
基本からわかるExcel VBA 実用Q&A
目次
-
[Excel VBA]マクロの自動実行を止めるには?
前回で紹介したOpenメソッドでブックを開くとき、開くブックに自動実行マクロが存在すると、自動実行マクロが実行されます。自動実行マクロを実行しないでブックを開きたいときは、Excelのイベントを停止してからブックを開きます。Excelのイベントを停止するには、ApplicationオブジェクトのE…
-
[Excel VBA]確認画面なしでブックを閉じるには?
ブックを閉じるには、WorkbookオブジェクトのCloseメソッドを実行します。このとき、ブックに変更があると、ブックを閉じる前に「変更を保存しますか?」という確認ダイアログが表示されます。ブック内に“自動再計算”の関数が使われていても、確認ダイアログが表示されます。
-
[Excel VBA]日付から曜日を取得するには?
日付から曜日を取得するには、Format関数を使うと便利です。Format関数は、引数に指定した値を、指定した書式で返す関数です。日付(シリアル値)に対して曜日を表す書式記号(表)を指定すれば、曜日を表す文字列を簡単に取得できます。書式記号は、セルに「ユーザー定義」の表示形式を指定する際の記号と基…
-
[Excel VBA]月末の日付を調べるには?
ある日付を基に、その月の末日を調べるには、DateSerial関数とYear関数、Month関数を組み合わせます。「翌月1日」の日付データ(シリアル値)を作り、そこから1日分を引けば、翌月1日の前日=当月末が求められます。
-
[Excel VBA]うるう年を判定するには?
ある年がうるう年かどうかを判定するには、どうすればよいでしょう。うるう年のルールには「4年に1度」というだけでなく、いくつかの例外ルールがあり、計算で求めようとすると意外と厄介です。
-
[Excel VBA]セルを並べ替えるには?
Excel 2007以降、セルの並べ替え方法が変わっています。ポイントは、まずSortFieldsコレクションに並べ替えの基準を設定し、次にSortオブジェクトのApplyメソッドにより並べ替えを実行する点です。
-
[Excel VBA]フィルターを設定するには?
データの抽出に使うフィルター(オートフィルター)機能を利用するには、フィルターを設定したい表内のセルを1つ指定してAutoFilterメソッドを実行します。引数Fieldに条件を指定する列、引数Criteia1に条件を指定します。次のサンプルコードは、A1セルを含む表にフィルターを設定し、2列目が…
-
[Excel VBA]フィルターの適用範囲を調べるには?
フィルターが適用されているセル範囲を調べるには、AutoFilterオブジェクトのRangeプロパティを使います。次のサンプルコードでは、まずWorkSheetオブジェクトのAutoFilterModeプロパティを使ってフィルターが適用されているかどうかを判定。その上で、適用されているセル範囲をR…
-
[Excel VBA]文字種を変換するには?
大文字と小文字、全角文字と半角文字、ひらがなとカタカナといった、文字種の変換もマクロを使えば一発です。文字種の変換にはStrConv関数を使います。1つ目の引数に文字列、2つ目の引数に変換後の文字種を表す定数(表)を指定します。
-
[Excel VBA]数値から日付データを生成するには?
年、月、日を表す数値から日付データ(シリアル値)を生成するには、DateSerial関数を使います。引数に年、月、日を表す数値を順番に指定すればOKです。ワークシート関数の「DATE」と同じですね。
-
[Excel VBA]文字列から日付データを得るには?
DateValue関数を使うと、「2014/2/24」「2014年2月24日」「2014-02-24」「平成26年2月24日」のような日付を表す文字列から、日付データ(シリアル値)を生成することができます。「2/24」のように年を省略した文字列の場合は、現在の年と見なします。「2014年2月」のよ…
-
[Excel VBA]セルが数式かどうか調べるには?
セルに数式が入力されているかどうかを判定するには、RangeオブジェクトのHasFormulaプロパティを調べます。数式が入力されていると、HasFormulaプロパティがTrueを返します。これをIf文で判定すればよいでしょう。
-
[Excel VBA]数式がエラーかどうか調べるには?
セルに入力された数式がエラーになっているかどうかを判定するには、RangeオブジェクトのValueプロパティを、IsError関数で調べます。IsError関数は、カッコ内に指定した数式や値がエラーになっている場合はTrueを返します。一般には、VBAの処理の中でエラーを調べるときに使いますが、セ…
-
[Excel VBA]セルの####表示を調べるには?
セルの横幅が足りなくて、セルに入っている数値がすべて表示されないとき、セルには「####」のように表示されます。こうした状態を判定するには、セルの表示結果を調べるRangeオブジェクトのTextプロパティを使います。####はセルの値そのものではなく、表示されているだけなので、Valueプロパティ…
-
[Excel VBA]複数のセルに同じ数式を入れるには?
複数のセルに同様の数式を入力するとき、一般には、どれか1つのセルにまず数式を入れて、それをオートフィル機能によってコピーするなどします。
-
[Excel VBA]相対参照と絶対参照を変換するには?
ApplicationオブジェクトのConvertFormulaプロパティを使うと、セルに入力された数式の「相対参照」と「絶対参照」を変換することができます。引数には「変換する数式,変換前の参照形式(A1形式かR1C1形式か),変換後の参照形式(A1形式かR1C1形式か),変換後の参照形式(絶対参…
-
[Excel VBA]単位が付いた数値を計算するには?
「100円」などと単位が付いた数値(文字列)を「100」として計算したいケースがあります。その場合、文字列操作の関数などを使って「円」の文字を分割したり削除したりして、数値部分だけを計算できるようにすべきでしょうか。
-
[Excel VBA]セルを確実に操作するには?
選択したセルを操作するには、Selectionを使う方法があります。しかし、Selectionが表すものは、セルとは限りません。グラフやテキストボックスなどが選択されているとき、Selectionはグラフやテキストボックスを表すことになります。その場合、セルを操作するマクロを実行すると、エラーとな…
-
[Excel VBA]選択範囲の大きさを変更するには?
選択したセル範囲の大きさを変更するには、Resizeプロパティを使います。指定したセルを起点として、指定した行数と列数だけ広げたセル範囲を取得できます。次のサンプルコードは、アクティブセルを起点として3行×3列分のセル範囲に、「Excel」という文字列を入力する例です。
-
[Excel VBA]セルに数式を入力するには?
セルに数式を入れるには、RangeオブジェクトのFormulaプロパティに数式を表す文字列を代入します。ただ、セルに数値や文字列を入れるときと同様に、Valueプロパティに数式を表す文字列を代入してもOKです。先頭に「=」を付けた文字列を、Excelは「数式」と判断しますので、Valueプロパティ…