エクセルVBA|初心者でもできる文字やメッセージを表示するマクロの作り方

vba

ここでは、エクセル(Excel)VBAでプログラムで文字を表示するマクロの代表的な方法を紹介していきます。文字を表示する手段は3つですが、それぞれの目的に応じて使いわけることになります。

会社や職場でエクセルを使っている人にとって、セルに文字を入力することが代表的なものですが、マクロを開発する人にとっては、それ以外の2つの方法で文字を表示する方法もよく使うものになってきます。

それぞれの方法を個別に紹介していきますので、これからのマクロ開発に役立てて下さい。

この記事は、エクセルVBAで文字の表示や、ユーザー向けのメッセージを表示するプログラムを解説しています。エクセルVBAでプログラミングをはじめるためには、エクセルの設定変更をする必要があります。
設定の変更がまだの場合は、こちらの手順で設定変更を実行してください。

独学だと中々スキルが身についた実感が湧かない。学習環境を見直してみませんか?

エクセルで繰り返しや転記作業で苦しい思いをした経験はありませんか?
今まで苦労してきたその作業を簡単なプログラムをおぼえるだけで解決できる可能性があります。
なるべくお金や時間をかけずにエクセルマクロVBAを習得したい人にはこちらの「1日速習講座」がおすすめです。

【結論】エクセルVBAで文字を表示するマクロの作り方は3つ

VBAをつかって文字を表示する3つの方法は以下のとおりです。

VBAで文字を表示するマクロの作り方|Debug.Print

1つ目は、Debug.Print(デバッグプリント)というコード(命令文)を使う方法です。

Debug.Printは、ユーザーから見える表示ではなく、VBAの開発画面(VBE)にある、イミディエイトウィンドウに文字を表示するコード(命令文)となります。
Debug.Printは、プログラムを作る人側でテストなどをする時に使用し、意図した値や、文字列が取得できているかの確認や変数に代入されている値の検証などの目的に使います。

実際にVBEにDebug.Printを書き込んで動作を確認してみます。

Debug.Printを表示するマクロを実行した後のVBE画像

エクセルVBAでデバッグプリントを指定したマクロを実行した結果の画像
Debug.Printは、指定した文字列をVBEのイミディエイトウィンドウに表示します。

VBAで文字を表示するマクロの作り方|Msgbox

2つ目は、Msgbox(メッセージボックス)というコード(命令文)を使う方法です。

こちらは、マクロのユーザーに対する視覚的な通知などによく使います。
目にみえる表示なので、案内通知警告の他、Yes/Noや、Ok/Cancelなどの選択肢を指定することもできます。

具体的な例として以下のような表示をするときに使います。

  • 〇〇の処理を開始します。よろしいですか? Yes/No
  • 処理中です。完了メッセージが表示されるまでしばらくお待ちください。 ok

実際にVBEにMsgboxを書き込んで動作を確認してみます。

Msgboxを表示するマクロを実行した後の画像

エクセルVBAでメッセージボックスを指定したマクロを実行した結果の画像
Msgboxは、指定した文字列をエクセル上のウィンドウに表示します。

VBAで文字を表示するマクロの作り方|セルに値を入力する

3つ目は、エクセルのワークシートに文字を入力する方法です。

マクロを使用しない人の手でセルに文字を入力することと同じですが、VBAでマクロを作ってしまえば、何百や何千のセルに対して値を入力することも数秒から数分程で処理できます。

詳しいコード(命令文)の書きかたは後ほど紹介しますが、RangeオブジェクトのRangeCellsを使うことで、エクセルのワークシート上にあるセルに文字や数値などの値を書きこむ方法となります。

セルに値を入力するマクロを実行した後の画像

エクセルVBAでセルに値を表示するコードを指定したマクロを実行した結果の画像

単純に文字を表示すると言っても、利用方法で使い分けようね。

それでは、それぞれの文字を表示するマクロの使いかたについて詳しく説明していきます。

この記事は、VBA初心者でこれからマクロの作り方をおぼえたい人におすすめです。

冒頭で書いたとおり、エクセルVBAで文字を表示する方法は大きく3つあります。
ここからは、それぞれの特徴や方法を紹介していきますので、目的とするマクロの作り方を参考にしてください。

Debug.Print(デバッグプリント)で文字を出力する

コード(命令文)書き方は以下のとおり

構文

Debug.Print[outputlist ]

VBEのイミディエイトウィンドウに文字を表示するためのVBAコード(命令文)です。

DebugオブジェクトのPrintメソッドというものをつかっており、引数であるoutputlistには、文字や数値などの表示したい任意の値を指定します。
また、変数と呼ばれる値を代入した箱を指定すると変数に代入された値を表示します。

いくつかのサンプルコードをつかって動作を確認してみます。

デバッグプリントを実行するためのサンプルコード

入力コード

Sub test()
'SubとEnd Subの間にコードを書きます。

'数値の場合の書きかた
    Debug.Print 1

'文字列の場合の書きかた
    Debug.Print "デバッグプリントでピカピカピカチュウ"

'日付の場合の書きかた
    Debug.Print #1/1/2023#

'真偽の場合の書きかた
    Debug.Print True
    Debug.Print False

'数式の場合の書きかた
    Debug.Print 1 + 10
    Debug.Print 10 * 2
    Debug.Print "これ" + "と" + "それ"

'複数の場合の書きかた
    Debug.Print 1; 2; 3; 4; 5; "いちにさんしご"

End Sub

文字列はダブルクォーテーション(“)、日付はシャープ(#)で囲みましょう。
日付は月、日、年の順番で書きます。また、セミコロン(;)で値を区切ることで複数の値を表示できます。

文の先頭に ‘ がついている行はコメントアウトと呼ばれるもので、コード(命令文)として認識されません。プログラムの説明や補足などをメモとして残しておくときなどに使います。

先頭に ‘ がついている行は、VBAのコードとして扱われないよ。

コメントアウトに方法については、こちらの記事で詳しく解説しています。複数行やまとめて一括してコメントアウトを設定・解除する方法も紹介しています。

コード(命令文)の入力が完了したら実行します。

マクロの実行方法は、VBEの画面上部の” ▶ “をクリックするか、またはショートカットキーの” F5 “(パソコンの機種によっては、Fnキーを押しながら)を押します。くわしくは以前の記事を参考にしてください。

デバッグプリントを実行するためのサンプルコードの実行結果

イミディエイトウィンドウの実行結果が以下となります。

1
デバッグプリントでピカピカピカチュウ
2023/01/01
True
False
11
20
これとそれ
1 2 3 4 5 いちにさんしご

数式を指定した場合は、計算結果を表示します。また、文字列を” + “でつないだ書きかたをしたときは、文字列を結合したものがイミディエイトウィンドウに表示されます。

Debug.Print(デバッグプリント)は、イミディエイトウィンドウに結果を表示します。
ユーザーには見えない結果となることから、サンプルコードのように、数字や文字列を直接指定するケースはほとんどありません。

Debug.Print(デバッグプリント)は、主に変数』に代入された値を確認する上で使うことが多いです。大規模なプログラムであったり、条件分岐により結果が変わるものや、繰り返し処理を実行するマクロなどでは変数に代入された値が状況によって更新されるため、意図した値が変数に代入されているかの確認方法として使います。

デバッグプリントは、マクロ開発者に便利だね。

MsgBox関数で文字を出力する

メッセージボックスを表示するコード(命令文)書き方は以下のとおり

メッセージボックスは、MsgBox関数に引数を指定することで引数の数値や文字列を表示します。

構文

MsgBox (prompt, [ buttons, ] [ title, ] [ helpfile, context ])

引数

引数のpromptは、必須で指定します。それ以外の引数は省略可能となります。

引数説明省略
promptメッセージボックスに表示する文字列です。 使用する文字の幅により、最大で約 1024文字使用できます。改行コードを用いることで改行してメッセージボックスを表示することもできます。不可
buttonsメッセージボックスのボタンの数と種類を指定する値です。使用するアイコンのスタイル、既定のボタンの ID、およびメッセージ ボックスのモダリティの組み合わせを表す数値です。 省略された場合、buttons の既定値は0です。
titleメッセージボックスのタイトルとして表示される文字列です。 title が省略された場合、タイトル バーにはアプリケーション名が表示されます。

それぞれの引数で、以下の部分が指定できます。

MsgBox “こんにちは!ここはコダマのもりブログです。”, vbInformation, “ようこそコダマのもりブログへ”

引数 buttons には以下の引数が指定できます。
buttons の引数はグループごとに指定することで組み合わることができます。

メッセージボックスに表示されるボタンの数と種類を指定するグループ
種類説明
vbOKOnly0[OK] ボタンのみ
vbOKCancel1[OK] ボタンと [キャンセル] ボタン
vbAbortRetryIgnore2[中止]、[再試行]、[無視] の各ボタン
vbYesNoCancel3[はい]、[いいえ]、[キャンセル] の各ボタン
vbYesNo4[はい] ボタンと [いいえ] ボタン
vbRetryCancel5[再試行] ボタンと [キャンセル] ボタン
アイコンのスタイルを指定するグループ
種類説明
vbCritical16[重大なメッセージ] アイコン
vbQuestion32[警告クエリ] アイコン
vbExclamation48[警告メッセージ] アイコン
vbInformation64[情報メッセージ] アイコン
初期選択のボタンを指定するグループ
種類説明
vbDefaultButton101 番目のボタンが初期位置となる
vbDefaultButton22562 番目のボタンが初期位置となる
vbDefaultButton35123 番目のボタンが初期位置となる

buttons の引数は種類もしくは、値を組み合わせて指定ができるよ。

MsgBox関数で文字を表示するサンプルコード

メッセージボックスを表示するコードを「標準モジュール」に入力します。

入力コード

Sub メッセージボックステスト()
    
    '[A]引数prompt以外の指定なし。
    MsgBox "こんにちは!ここはコダマのもりブログです。"
    
    '[B]引数 prompt と buttons と titleの指定あり。
    MsgBox "こんにちは!ここはコダマのもりブログです。", vbInformation, "ようこそコダマのもりブログへ"
    
    '[C]引数 prompt と buttons と titleの指定ありで、buttonsの引数を複数組み合わせ(値で指定)。
    MsgBox "こんにちは!ここはコダマのもりブログです。", 2 + 32 + 256, "ようこそコダマのもりブログへ"
    
    '[D]引数 prompt と buttons と titleの指定ありで、buttonsの引数を複数組み合わせ(種類で指定)。
    MsgBox "こんにちは!ここはコダマのもりブログです。", vbYesNoCancel + vbCritical + vbDefaultButton1, "ようこそコダマのもりブログへ"
    
End Sub

4種類のMsgBoxでそれぞれの実行結果をみていくよ。

MsgBox関数で文字を表示するサンプルコードの実行結果

メッセージボックスを表示することができました。

メッセージボックスで文字を表示するマクロを実行結果の画像A
MsgBox関数[A]の実行結果

こちらのメッセージボックスは、prompt以外の引数を指定していません。そのため、titleはアプリケーション名である[ Microsoft Excel ]が表示され、buttonsも初期値である[ OK ]ボタンのみになります。

prompt以外の引数は指定してないタイプだね。

メッセージボックスで文字を表示するマクロを実行結果の画像B
MsgBox関数[B]の実行結果

こちらのメッセージボックスは、prompt・title・buttonsの引数を指定しています。titleに指定の文字列が表示され、vbInformationの指定によって情報アイコンが表示されました。

buttonの引数で「vbInformation」だけを指定したタイプだね。

メッセージボックスで文字を表示するマクロを実行結果の画像C
MsgBox関数[C]の実行結果

こちらのメッセージボックスは、prompt・title・buttonsの引数を指定しています。buttonsは引数を組み合わせて指定することでボタンの数と種類・アイコンの種類・初期選択ボタンを指定しています。

buttonsの引数を数値の組みあわせで指定したタイプだね。

メッセージボックスで文字を表示するマクロを実行結果の画像D
MsgBox関数[D]の実行結果

こちらのメッセージボックスは、prompt・title・buttonsの引数を指定しています。buttonsは引数を組み合わせて指定することでボタンの数と種類・アイコンの種類・初期選択ボタンを指定しています。

buttonsの引数を種類の組みあわせで指定したタイプだね。

使用者にもっと親しみやすいプログラムを作りたい人は必見!ユーザー(使用者)から入力された数値や文字列を取得して、処理が変わる双方向プログラムの作りかたについてはこちらの記事がおすすめです。

メッセージボックスは、マクロを使っている人とお話するために使えるね。マクロの操作方法や、確認画面、注意事項などに使えるよ。

ワークシートセルに値(文字や数値)を入力する

ワークシートのセルに文字や数値を入力するコード(命令文)の書き方は以下のとおり、RangeまたはCellsを使って書きます。

ThisWorkbook.Worksheets(“Sheet1”).Range(“A1”) = 1

または

ThisWorkbook.Worksheets(“Sheet1”).Cells(1, 1) = 1

※イコールの右辺には、入力した数値や文字列を指定してください。

RangeでCellsでは、セルの場所を指定する書きかたが異なる点に注意です。
ワークシートの最も左かつ、最も上のセルを指定するとき、Rangeでは “A1” セルと表現し、Cellsでは 1, 1 セルと表現します。Rangeでは列名、行数の順で書いているところを、Cellsでは行数、列数との順に逆転している点に注意が必要です。

また、同じ結果となるコード(命令文)として以下のような書き方もあります。

ActiveSheet.Range(“A1”) = 1
ActiveSheet.Cells(1, 1) = 1

上記の指定では、現在開いている(アクティブ)なシートのA1セルが対象となります。注意しておかなっければならないのは、入力する対象のシートが相対的に変わってしまう点です。絶対的な指定の場合はこちらのコード(命令文)で書くことは避けた方が良いでしょう。

Sheet1.Cells(1, 1) = 1

こちらは先ほどとは違い、シートオブジェクト名で入力する対象のシートを指定しているため、絶対的な指定になります。

ワークシートのセルに値(文字や数値)を入力するためのサンプルコード

入力コード

ワークシートセルに文字を表示するコードを標準モジュールに入力してみましょう。

<Rangeで書いたサンプル>
Sub セルに数字や文字を入力する()
    
    'アクティブ(開いている)シートのA1セルに文字を入力する(Range)
    ActiveSheet.Range("A1") = "あ"
    
    'アクティブ(開いている)シートのA2セルに文字を入力する(Cells)
    ActiveSheet.Cells(2, 1) = "い"
    
    'シートオブジェクトで指定したシートのA3セルに文字を入力する
    Sheet5.Cells(3, 1) = "う"
    
    'シート名で指定したシシートのA4セルに文字を入力する(Range)
    ThisWorkbook.Worksheets("書きたいシート").Range("A4") = "え"
    
    'シート名で指定したシシートのA5セルに文字を入力する(Cells)
    ThisWorkbook.Worksheets("書きたいシート").Cells(5, 1) = "お"
    
End Sub

書きかたが色々だけど、すべてセルに文字を入力するコードだよ。

ワークシートのセルに値(文字や数値)を入力するための実行結果

指定したセルに文字を書き込むことができました。

セルに文字を入力するマクロの実行結果画像

ワークシートのセル範囲に値(文字や数値)を入力するためのサンプルコード

こんどはセルの範囲を指定して、文字を入力するコード(命令文)のマクロです。

Sub セル範囲に数字や文字を入力する()
    
    'シートオブジェクトで指定したシートのセル範囲を指定して文字入力をする
    Sheet5.Range("C1:G1") = 1
    Sheet5.Range(Cells(2, 3), Cells(2, 7)) = 10 'C2からG2セル
    
    'シート名で指定したシシートのセル範囲を指定して文字入力をする
    ThisWorkbook.Worksheets("書きたいシート").Range("C3:G3") = 100
    ThisWorkbook.Worksheets("書きたいシート").Range(Cells(4, 3), Cells(4, 7)) = 1000 'C4からG4セル

    'シート名で指定したシシートのセル範囲を指定して文字入力をする(飛び地の指定)
    Sheet5.Range("C5:G5,J5") = 10000
    ThisWorkbook.Worksheets("書きたいシート").Range("C6:G6,J6:M6") = 100000

End Sub

ひとつのセルだけでなく、セルの範囲を指定して文字を書きこめるよ。

ワークシートのセル範囲に値(文字や数値)を入力するための実行結果

セルに文字を入力するマクロの実行結果画像2

セル範囲を指定することで、まとめて文字を入力することができるね。

「エクセルVBAで文字を表示する方法」まとめ

本記事では、VBAで文字を出力する代表的な方法3つを紹介しました。

今回の記事を以下にまとめます。

  • 開発者・プログラムを作成している人向けのテストなどでは、Debug.Printを使う
  • アプリや機能を利用するユーザーへの通知や選択肢などではMsgBoxを使う
    メッセージボックスはprompt・title・buttonsの引数で色々なタイプの表示ができる。
  • ワークシートのセルに文字を入力するときはRangeやCellsを使う
    書きこみ先となるセルの指定では、相対的な指定か絶対的な指定かを使い分ける。
    セル範囲の指定では、必ずしもつながった範囲だけでなく、飛び地でも指定ができる。

おつかれさま。
これで文字や数字が表示できるマクロができるね

ここまで文字の表示や入力方法を説明しましたが、ここで紹介した方法は、すべてリテラル(直値)を指定する方法となります。

実務上で作業では、恐らく絶対的で決まった値を入力する機会よりも、計算の結果であったり、何らかの処理の結果の文字列だったりを入力する機会が圧倒的に多いと考えます。エクセルVBAやその他のプログラミング言語は『 変数』と呼ばれるものをつかうことが必須となります。

今回紹介した文字の表示や入力の内容をふまえつつ、変数があつかえるところまでいくとVBAのスキルとしてもステップアップしていると感じられると思います。

変数の詳しい説明や書きかたについては、こちらの記事で紹介していますので、ぜひこちらの記事もご覧になってください。

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

タイトルとURLをコピーしました