サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
www.officetanaka.net
一般的なSubプロシージャやFunctionプロシージャを指定するときは0を指定します。 Sub Sample10() Dim Cnt As Long Cnt = ThisWorkbook.VBProject.VBComponents("Module1"). _ CodeModule.ProcBodyLine("Sample10", 0) MsgBox Cnt End Sub ProcCountLinesプロパティは、指定したプロシージャの行数を返します。 指定する引数はProcBodyLineプロパティと同じです。 ProcCountLinesプロパティは、指定したプロシージャの宣言行(Sub ○○やFunction××など)以前にある空白行やコメント行から、プロシージャの終了行(End SubやEnd Functionなど)までの行数を返します。指定したプロシージャがコードモジュール内
Fileオブジェクトはファイルを表します。Fileオブジェクトの集合はFilesコレクションです。FilesコレクションのプロパティはCountプロパティとItemプロパティだけで、メソッドはありません。Fileオブジェクトには次のプロパティとメソッドが用意されています。
開くブックをユーザーに選択してもらう場合は、[ファイルを開く]ダイアログボックスを表示するといいでしょう。 Sub Sample1() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open OpenFileName End Sub [ファイルを開く]ダイアログボックスを表示するには、ApplicationオブジェクトのGetOpenFilenameメソッドを使います。GetOpenFilenameメソッドによる[ファイルを開く]ダイアログボックスは、ユーザーが選択したファイルのフルパスを返すだけで、自動的には開きません。GetOpenFilenameメソッドの書式は次の通りです。 GetOpenFilename Fil
本稿で紹介する「テキストファイルの操作」は、Shift-JIS形式のテキストファイルを対象にしています。UTF-8形式のファイルを扱うときは、下記ページをご覧ください。 UTF-8形式のテキストファイルから読み込む UTF-8形式のテキストファイルに書き込む ファイル操作の最後に、テキストファイルへの読み書きテクニックをご紹介します。VBAでマクロを作成していると、たまにテキストファイルへデータを書き込むと便利なケースに遭遇します。たとえば、現在の設定を保存して後で利用したり、ユーザーが行った操作のログを残したり・・・。テキストファイルの操作は Excelのシートやセルの操作とは異なり、どちらかというとVisual Basic的なテクニックです。詳細に解説しているマニュアル本も少ないかもしれません。ここでは、テキストファイルからデータを読み込むときのセオリーや、テキストファイルにデータを書
ここでは、ユーザーに分からないようにブックを操作する方法をご紹介します。たとえば、Book1を表示している状態で、裏で開いたBook2を操作するような使い方です。 見えないように開く ブックを開くときは、WorkbooksコレクションのOpenメソッドを使います。これは、難しくないですね。 Sub Sample1() Workbooks.Open "Book2.xlsx" End Sub もちろん、ブックを開くと、開いたブックがアクティブになります。ユーザーに分からないようにブックを開くには、開いたあとで、アクティブブックを切り替えなければなりません。 Sub Sample1() Workbooks.Open "Book2.xlsx" ''別のブックをアクティブにする End Sub もし、このマクロが書かれているブックをアクティブにするのなら、ThisWorkbookをアクティブにしてや
FileSystemObjectオブジェクトは、ドライブ・フォルダ・ファイルなどを操作できるオブジェクトです。FileSystemObjectオブジェクトは、Scrrun.dllファイル内のスクリプティングタイプライブラリとして提供されます。 VBAからFileSystemObjectオブジェクトを利用するには、CreateObjectメソッドを実行してFileSystemObjectオブジェクトのインスタンスを作成し、そのインスタンスに対してプロパティの設定やメソッドを実行します。ここでは、FileSystemObjectオブジェクトのプロパティやメソッドのリファレンスと、使い方のサンプルを解説します。 なお、本文の内容はExcel VBAでの操作を前提に書きますが、AccessなどのVBAや、VisualBasic(VB)からも同じ考え方でFileSystemObjectオブジェクトを
書式 たとえば、任意のセルに「=A1」と入力すれば、そのセルからセルA1を参照できます。 INDIRECT関数を使うと、次のように、参照するセルのアドレスを文字列で指定できます。 「なんじゃ、そりゃ?」「はぁ?何に使うの?」と思ったあなた。その通りです。これだけだと、この関数がどれほど便利か分かりませんね。ポイントは、参照するセルのアドレスを文字列で指定できる、というところです。文字列で指定できるということは、参照したいセルのアドレスを、何とかして文字列で作成できれば、どこにあるセルでも参照できるということです。これ、超便利です。てか、INDIRECT関数を使えるようになると、Excelの数式作成スキルが256倍アップします(当社比)。 アドレスを文字列として作れればいいのですから、たとえば、文字列を結合できる&演算子を使って、次のようなこともできます。 文字列の"A"と数値の2を結合して
のようにデータを格納しておいて、「Japan」というキーで「日本」を探し出す機能です。 「VBAで連想配列は使えますか?」とか「VBAには連想配列がないからな~」などという話をたまに聞きますが、Excel VBA使いとしては「??」という気がしてなりません。だって、いつもワークシート上で普通にやってることですから。 Excel VBAに連想配列という機能はありませんが、データを変数ではなくワークシート上のセルに格納することで、連想配列のような使い方ができます。ちなみに、かなり高速ですよ。20,000件のデータをランダムに並べ、20,000件目のデータを検索するのに要した時間は20ミリ秒でした。CPUは1GHzでメモリは512MBの環境です。 ひとつだけマクロ例を提示しておきますね。 Sub Sample1() ''データの検索 Dim buf As String buf = InputBo
機能と数式のTips Home Excel Excel Tips 数式/関数 共有範囲の参照 0より大きい最小値 一番下のセルを参照する(1) 一番下のセルを参照する(2) 空欄を計算するとエラーになる aとAを区別する 全角と半角を変換する セルを移動しても同じセルを参照する セルを挿入・削除しても変化しない参照式 VLOOKUP関数で0を返さない セル内改行の前後で分割する 月末の日を調べる 数式のエラーについて セルに入力した数式を別のセルで計算する 数式内にコメントを記述する 論理値 - TRUEとFALSE - 時間の計算 シート名でカレンダーを自動作成する ワークシート内を検索する セル内を検索する セル内をカウントする 2番目以降の文字位置を調べる 複雑な参照「単一セル→結合セル」 複雑な参照「結合セル→単一セル」 重複しないデータ件数のカウント 重複している数値の順位を調べ
またもや「Excel VBAと関係ねぇじゃねーか!」と言われそうですが、今回はMS-DOSコマンドの標準出力を変数に取得する方法を解説します。これはもう、Excelとは関係ないVB系のネタなんですね。ただ実行環境がExcelってだけで(^^; ま、いーや書いちゃえ。MS-DOSって何のことだかわからない人は、自分で調べてください(^^; なお、ここではWindows XP Home Editionを例に解説します。 MS-DOSのコマンドには今でも便利に使えるものが多いですし、何よりネットワークを管理されている方は必須コマンドです。VBやVBAからMS-DOSコマンドを実行するときには、問題が2つあります。1つめはShell関数で起動できないことです。MS-DOSコマンドはいわゆるDOS窓で起動する仕組みになっていますので、Shell関数では起動できません。2つめの問題は、実行結果もDOS
最初に完成例をご覧ください。セルの値によって、表示する画像を自動的に変更します。マクロは使いませんが手順が多いので落ち着いて操作してくださいね。 【手順】 表示の元になる画像を準備する 実際に画像を表示する領域を作る 画像を切り替える仕組み「名前」を定義する 表示領域の式を書き換える 切り替え用のリストを作る 見栄えを整える 表示の元になる画像を準備する まず、切り替えて表示する画像を用意します。ここでは解説のために、クリップアートから2つの画像を挿入しました。 このとき、左の画像はセル範囲B2:C9内に、右の画像はセル範囲E2:F9内に収めるように配置してください。 次に、画像を配置したセル範囲B2:C9に「ワイン」、セル範囲E2:F9に「ビール」という名前を設定します。セル範囲B2:C9を選択して、名前ボックスに「ワイン」と入力してください。同じように、セル範囲E2:F9を選択して名前
セルに入力したカタカナをひらがなに変換したり、あるいは逆に、入力したひらがなをカタカナに変換する方法をご紹介します。ただし、Excelにそうした変換をする関数が用意されているわけではありません。Excelの「ふりがな機能」とPHONETIC関数を使います。したがって、部分的に変換するなどの細かい要望には対応できません。あまり期待しないでください。 次のように入力されているとします。 まずは、ふりがなの設定を変更します。留意していただきたいのは、変更するのは「カタカナが入力されているセル」です。今回でしたらセル範囲A2:A7ですね。B列のセルではありません。 設定を変更するセル範囲を選択したら、[ホーム]タブ[フォント]グループにある[ふりがなの表示/非表示]ボタンを開き、一番下の[ふりがなの設定]をクリックします。 実行すると[ふりがなの設定]ダイアログボックスが表示されます。 [ふりがな
Excelコンテンツ Home Excel セミナーとイベント VBA 機能と数式 Excel 2016レビュー Excel 2010レビュー Excel 2007レビュー Mac版Excel 2016レビュー 現在執筆中です…しばらくお待ちください。
2つのリストボックスを連動する基本的な考え方をご紹介します。 たとえば、UserForm1にListBox1とListBox2という2つのリストボックスがあったとします。 ListBox1には「東京都」「横浜市」「名古屋市」というデータを表示し、そのListBox1で選択したデータに応じてListBox2に表示するデータを変化させます。 Private Sub UserForm_Initialize() With ListBox1 .AddItem "東京都" .AddItem "横浜市" .AddItem "名古屋市" .ListIndex = 0 End With End Sub Private Sub ListBox1_Click() With ListBox2 .Clear Select Case ListBox1.List(ListBox1.ListIndex) Case "東京
フォルダを選択するダイアログボックスを表示するにはいくつかの方法があります。 1.FileDialogオブジェクトを使う方法 Sub Sample1() With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then MsgBox .SelectedItems(1) End If End With End Sub 2.Shellを使う方法 Sub Sample2() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then Ms
上図のように、処理の対象とするセル範囲をユーザーに選択してもらいたい場合があります。表示しているコントロールは、Excelの標準機能でよく使われていますので、ビギナーが操作するときでも理解しやすいでしょう。ちなみに、テキストボックスの右にある、クリックするとダイアログボックスが小さくなるボタンの正式名称は[ダイアログ最小化]ボタンです。 この[ダイアログ最小化]ボタンを持つコントロールの正体はRefEditコントロールです。UserFormで使うには次のようにします。 VBEで[ツールボックス]ツールバーの余白を右クリックする 表示されるショートカットメニューで[その他のコントロール]をクリックする [コントロールの追加]ダイアログボックスで「RefEdit.Ctrl」をオンにする [OK]ボタンをクリックする こうして[ツールボックス]ツールバーに追加したRefEditは、その他のコント
セル内で改行するときは、改行したい位置で[Alt]キーを押しながら[Enter]キーを押します。では、他のセルに入力されている文字を結合するなどの「数式で改行」するにはどうしたらいいでしょう。 セルA1に「東京都」という文字列が入力されています。セルにA2には「千代田区」です。この2セルを結合するには&演算子を使います。セルB1には「=A1&A2」という式を入力しました。 ちょっと個人的な感想ですけど、よくこの手の"文字列結合"をするとき「CONCATENATE関数を使いましょう」みたいに教えている書籍などを散見します。 まぁ、CONCATENATE関数でもできますけど、なんでわざわざ関数使うんだろ。てか、ここは&演算子でしょ。どっちでもいいっちゃ、いいんですけど、これからExcelのスキルを高めようって思うのなら、関数じゃなくて&演算子をオススメします。数式の作成にしても、VBAにしても
FileSystemObjectは最上位のオブジェクトです。FileSystemObjectオブジェクトには次のプロパティとメソッドが用意されています。
誰でも必ずマクロが"読める"ようになって"書ける"ようになる「VBAベーシック」は、すべてのExcelユーザーに受講していただきたいです。ほかにも、数多くのセミナーを実施しています。最も重要なことは誰が教えるかということです。
セル内で改行するときは、改行したい位置で、Altキーを押しながらEnterキーを押します。 この改行を削除して1行のデータにしたいときは、セルを編集状態にして、改行されているところでBackSpaceキーやDeleteキーを押します。つまり、(目に見えない)改行コードを削除してやればいいです。しかし、複数のセルでこの操作を繰り返すのは、決して楽しい作業ではありませんね。もちろん、マクロを使えば、複数のセルから改行コードを一瞬で削除できますけど、ここではマクロを使わない方法をいくつかご紹介します。 間違ったやり方 その前に、間違ったやり方です。こうやってはダメですよ・・・という例です。実は、セル内で改行したセルでは、自動的に[折り返して全体を表示する]オプションがオンになります。 そこで、このオプションをオフにすれば改行されなくなるのではないでしょうか。実際にやってみましょう。 確かにワーク
上図のようなリストがあったとします。同じ名前の人が重複していますね。このリストから重複したデータを削除するには次のようにします。 Sub Sample() Dim i As Long With Range("A2") Do While .Offset(i, 0) <> "" If .Offset(i, 0) = .Offset(i - 1, 0) Then .Offset(i, 0).EntireRow.Delete i = i + 1 Loop End With End Sub セルA2を基点として"注目セル"を1つずつ下げていきます。このとき、アクティブセルを移動するのではなくOffsetメソッドを使います。"注目セル"が、"注目セルの1つ上"と同じだったら、"注目セル"を含む行(EntireRow)を削除(Delete)します。 行の削除をマクロ記録で調べるとき、普通は行番号を右クリ
VBAコンテンツ Home Excel VBA Excel VBA Tips セル セルが選択されているか判定する アクティブでないシートのアクティブセル 結合セルを調べる 簡単に罫線を引く セルのValue2プロパティ あるセルがセル範囲に含まれるかどうか セル範囲の操作 確実に選択されているセルを操作する 入力されているデータの最終セルを取得する 複数のセルを選択する 特定のセル範囲内を検索する 非表示のセルを検索する すべて検索する 日付を検索する 1と001の問題 Range(左上セル, 右下セル)の使い方 セルの罫線に関すること new オートフィルタ 書き方の基本 文字列で絞り込む 数値で絞り込む 日付で絞り込む 色で絞り込む 作業列で絞り込む 絞り込んだ結果をコピーする 絞り込んだ結果を集計する 絞り込んだ結果の行を操作する オートフィルタの状況を判定する 数式のエラーで絞り
セルに表示されている数値の0を、見せたくないときがあります。たとえば次のように。 データが日々追加されていくような表です。D列にはあらかじめ計算式を入力してあります。すると、まだデータが入力されていない6行目以降には、すべて0が表示されてしまいます。もちろん、間違いではありません。最終的にすべてのデータが入力されれば、表として完成します。でも、途中までしかデータ入力されていないと、たくさんの0が並びます。ちょっと恥ずかしいですね。 こうした「0を見せたくない」とき、いくつかの方法があります。IF関数を組み込むなどして、たとえば計算式を変更するのも一考です。しかし実務は、このように簡単な計算とは限りません。せっかく作成した長い計算式を、できれば編集したくないことも多いでしょう。そこで今回は、Excelの機能で「0を表示しない」方法をご紹介します。 オプションを変更する 実はExcelには、セ
VBAから正規表現を使うには、VBScriptが便利です。ただし、正規表現をサポートしているVBScriptはVer5.0からですから、IE5.0がインストールされているパソコンでないと使えません。 VBScriptの中で正規表現エンジンを提供しているのはRegExpオブジェクトです。参照設定によるEarly Bindingか、CreateObject関数を使ったLate Bindingで参照します。ここではLate Bindingによるサンプルを紹介します。 まずは、正規表現で使用するオブジェクトとプロパティやメソッドを整理しましょう。 RegExpオブジェクトのプロパティとメソッド
2018年12月に、すべて検証し直して、コンテンツも新しくしました。本コンテンツは1995年頃パソコン通信「NIFTY-Serve」に書いたものがベースになっていますが、パソコンの性能が向上したことによって、理論的には遅いけど実際には影響ないということもあります。そのへんを検証し直しました。 また「VBA高速化"テクニック"」と言っていますが、本来であれば"テクニック"以前の問題が多いです。たいてい私に「田中さん、マクロが遅いので見てください」と質問されるときは「そもそも、なんでそんなコード書くの?」というマクロばかりです。まずは「 無駄なSelectをしない」「 余計なことはしない」あたりを、よ~く注意してください。それだけで十分高速になります。さらに、マクロ全体の構成や"考え方"も検討してください。プランAでは遅かった。じゃ、プランBでやってみよう。それでも遅かったらプランCで。という
このページを最初にブックマークしてみませんか?
『Office TANAKA VBA講座』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く