VBAの必須知識


オートマクロでは生成できない必須記述法です。

覚えておきたい必須関数

実現したい機能

書式(R=行,C=列)

セルの値を求める

x = Cells(R,C) Rは行・Cは列

セルに値を入れる

Worksheets("シート名").Cells(R,C) = A

アクティブなセルの行番号を求める

R = ActiveCell.Row

アクティブなセルの列番号を求める

C = ActiveCell.Column

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

Msgbox"ここにメッセージ"

入力ボックスの配置

x0 = InputBox("ここにメッセージ")

マクロを呼び出す

Application.Run"ブック名!マクロ名( )"  または、 Call マクロ名 でも構いません。

ワークシート関数を呼び出す

Application.WorksheetFunction.関数名( )

VBAの関数とエクセルのワークシート関数は、記述法が異なります。基本的には、VBAでワークシート関数は使わない方が良い (使えないものや、引数の表記が異なる場合がある)のですが、上のように記述すれば使えます。

セルや範囲の指定

セルの指定には、Cells(行、列)という行や列の番号で指定するものと、Range("座標 ") の形式があります。
Rangeの座標は、A1やB1:B10などのシートでの表記法がそのまま使えます。

変数で範囲指定したい場合は、Range(Cells(g1,r1),Cells(g2,r2)).Select や Rows(r1&":"&r2).などの書き方ができます。

マクロの小技

オートマクロを利用する

マクロでどのように記述したらよいか分からないときに、オートマクロで記述させ、その内容を確認 し利用します。例えば、1行削除するマクロの場合、オートマクロでは
 Rows("1:1").Select
Selection.Delete Shift:=xlUp
と記述されます。これを見て、1行目全体を指定するのはRows("1:1")であり、削除後上に移動するのが、Shift:=xlUp だと分かります。Selectは不要なので、
Rows("1:1").Delete Shift:=xlUp のように、SelectとSelectionを削除してつなげます。こうすることで、マクロの実行時に選択の操作が実行されて画面が変わるのを止められます。スピードも速くなります。

オートマクロを修正する

オートマクロで作成したマクロは、コピー・貼り付けの際に、選択範囲を移動するので、画面表示がうるさくなります。マクロを実行している際に、この移動を表示させないようにすれば、スピードも速くすっきりします。以下の2行で、作成したマクロを挟んでください。(*subとend subの間を挟みます)

Application.ScreenUpdating = False
 ここに、オートマクロで作成したコマンドが入る。
Application.ScreenUpdating = True  で戻す。

シートを挿入し名前を付ける

Sheets.Add  (これで新しいシートが挿入されます。)
ActiveSheet.Name = "シート名" (挿入直後は新しいシートがアクティブになっています。)
ActiveSheet.Paste  (事前にコピーしておいたものを、アクティブな新しいシートに貼り付けます。)

カレントのパスを求める

        ActiveWorkbook.Path で、今開いているファイルのパスが得られます。

With と End with

シート名を指定する場合、Worksheets("シート名").Cells(10,10)などのように、表記が長くなりますが、
With Worksheets("シート名")  と End with の間では、 .Cells(10,10) のように記述して省略できます。

マクロでセルに数式を書き込む

Cells(1,2).Formula = "=today()" などのように記述すると、セルに関数を書き込めます。一度消して式を書き直すなどのときに使えます。

マクロの自動実行

ブックを開いたときに自動実行させるマクロは、プロジェクトの This Workbook のモジュールを開いて
Private Sub Workbook_Open()
 この中に書きます。
End Sub

また、シートの特定のセルの値が変化したときに自動実行させるには、同じくSheet1などを開いて、
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 3 And Target.Row = 4 Then
  この中に書きます。この場合は、4行・3列(C4)の値が変わったときに実行されます。
 End If
End Sub

これを使うと、フォームボタンなどをクリックしなくとも、値を入れたらマクロを実行するようにできます。

 

表紙へ