「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Excel VBAをはじめから(その05/X)

 仕事で未だに使うことのある\mathrm{Excel\ VBA}を改めて体系的に学びたく

を読んでいく。


power-of-awareness.com

3. VBAの基礎文法

3.3 条件分岐とループ処理

3.3.3 ループ処理

 ループ処理の3つ目として、\mathrm{Do} \mathrm{Loop}ステートメントがある。
 それには

  • \boldsymbol{\mathrm{Do}} \boldsymbol{\mathrm{while}}

     条件式が\mathrm{True}である限り処理を続ける
  • \boldsymbol{\mathrm{Do}} \boldsymbol{\mathrm{Until}}

     条件式が\mathrm{False}である限り処理を続ける

がある。

' 条件式がTrueである限り、処理を続ける
'Do while 条件式 ' 条件式がTrueである限り実行
'    繰り返したい処理
'Loop
'Do Until 条件式 ' 条件式がFalseである限り実行
'    繰り返したい処理
'Loop

Do while ActiveCell.Value <> ""
    ActiveCell.Next.Value = "〇"
    ActiveCell.Offset(1).Select ' アクティブセルを今より1行下のセルに更新する
Loop


 また条件式は\mathrm{Loop}キーワードの後ろに置くことができ、その場合、少なくとも1回処理が行われることになる。

3.4 実行時にユーザーと対話する

3.4.1 メッセージボックスでメッセージを表示する

 メッセージボックスを表示するには\mathrm{MsgBox}関数を用いる。

'MsgBox 表示する文字列
MsgBox "Hello VBA!!"

 選択肢を表示させたい場合、\mathrm{MsgBox}関数に引数を与える。

MsgBox Prompt:="犬の方が猫よりも好きですか?", Buttons:=vbYesNo, Title:="質問"
引数
指定できる内容
\mathrm{Prompt} 表示する文字列
\mathrm{Buttons} 表示するボタンの種類
\mathrm{Title} ダイアログ上端に表示するタイトル

 \mathrm{Buttons}には対応する\mathrm{VbMsgBoxStyle}列挙の定数を指定する。
 戻り値はボタンに応じた値が\mathrm{VbMsgBoxResult}列挙のいずれかの形で返される。

Dim result As VbMsgBoxResult

' VBAでは戻り値を変数に格納したり利用したりするには引数全体を()で括る
result = MsgBox("犬よりも猫が好きですか?", Buttons :=vbYesNo)

If result = vbYes Then
    MsgBox "猫の方が好きなのですね"
Else
    MsgBox "犬の方が好きなのですね"
End If
名前
表示ボタンの

組み合わせ
\mathrm{vbOKOnly} 「OK」
\mathrm{vbOKCancel} 「OK」「キャンセル」
\mathrm{vbAbortRetryIgnore} 「中止」「再試行」「無視」
\mathrm{vbYesNoCancel} 「はい」「いいえ」「キャンセル」
\mathrm{vbYesNo} 「はい」「いいえ」
\mathrm{vbRetryCancel} 「再試行」「キャンセル」
名前
表示アイコン
\mathrm{vbCritical} 警告メッセージ
\mathrm{vbQuestion} 問い合わせメッセージ
\mathrm{vbExclamation} 注意メッセージ
\mathrm{vbInformation} 情報メッセージ
名前
デフォルトボタン
\mathrm{vbDefaultButton1} 1番目のボタンをデフォルトとする
\mathrm{vbDefaultButton2} 2番目のボタンをデフォルトとする
\mathrm{vbDefaultButton3} 3番目のボタンをデフォルトとする
\mathrm{vbDefaultButton4} 4番目のボタンをデフォルトとする
名前
その他
\mathrm{vbApplicationModal} アプリケーションモーダルに指定
\mathrm{vbSystemModal} システムモーダルに指定
\mathrm{vbMsgBoxHelpButton} 「ヘルプ」ボタンを表示
\mathrm{vbMsgBoxSetForeground} 最前面のウィンドウとして表示
\mathrm{vbMsgBoxRight} 右寄せで表示
\mathrm{vbMsgBoxRtlReading} 右から左へ表示
名前
説明
\mathrm{vbOK} 「OK」ボタン 1
\mathrm{vbCancel}「キャンセル 」ボタン 2
\mathrm{vbAbort} 「中止」ボタン 3
\mathrm{vbRetry} 「再試行」ボタン 4
\mathrm{vbIgnore} 「無視」ボタン 5
\mathrm{vbYes} 「はい」ボタン 6
\mathrm{vbNo} 「いいえ」ボタン 7
3.4.2 インプットボックスで値を入力してもらう

 インプットボックスを表示してユーザーに任意の値を入力してもらい、その値をマクロで利用するには\mathrm{InputBox}関数を用いる。

' 変数=InputBox(表示する文字列)

Dim result As String
result = InputBox("商品名を入力してください")

Debug.Print "入力値:", result
引数
説明
\mathrm{Prompt} 表示する文字列
\mathrm{Title} タイトル。ダイアログ上端に表示するタイトル文字列
\mathrm{Default} デフォルト値。入力欄に最初から入力させる文字列
3.4.3 セル範囲を選択する

 マクロの実行途中にセル範囲を選択するには、\mathrm{Application}オブジェクトの\mathrm{InputBox}メソッドを用いる。

' Set Range型変数 = Application.InpurBox("表示文字列", Type := 8)

Dim selectedRange As Range, rng As Range

' セル表示ダイアログを表示
Set selectedRange = Application.InputBox("対象セルを選択してください", Type:=8)

' 選択セル範囲に対してループ処理
For Each rng In selectedRange
    rng.Next.Value = "〇"
Next

補足

 \mathrm{VBA}には\mathrm{Continue}ステートメントは存在しないため、それと同様の処理をするには、\mathrm{If}ステートメントを使ってそれを再現する。

プライバシーポリシー お問い合わせ