○第165回目 エクセルマクロの基本コマンド
エクセルマクロの基本コマンドは何か、というものです。
基本とは、結構、頻繁に使われるというコマンド群をさします。
これさえあれば、骨格の70%はできるというものです。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 初心者の方へ
┃ 以下のそれぞれのマクロ(□以下に書かれているもの。不適
┃なものもある。)を、モジュールに貼り付けて、デバックして
┃、それぞれの変数にどのような数値がはいるのか試してくださ
┃い。変数の初期値はゼロなので、うまく動かないものもありま
┃す。
┃ マクロのイメージが少し分かります。
┃ ・エクセルのマクロの世界への移行。=⇒エクセルシートに
┃いて、Alt+F11を押す。+は同時押しの意味です。すなわち、Al
┃tとF11を同時に押す。
┃ ・(以下はマクロの世界での操作)モジュールシートを作る=
┃⇒Alt、I、M(この場合は逐次押しで良い)
┃ ・(以下はモジュール上での操作)"sub test01()" を貼り付
┃ける。自動的に、"End Sub"が付加される。
┃ ・Sub test01()とEnd Subの間に、以下のマクロを貼付ける。
┃ ・F8を押すと色のついたマクロ行が1行ずつ実行される。
┃ ・処理後のマクロ行の変数にカーソルを置くと、その変数の
┃ ・処理後のマクロ行の変数にカーソルを置くと、その変数の
┃内容が表示される。つまり、そのマクロ行の処理内容がわかる
┃ ・一気に処理を進めたい場合は、任意のマクロ行にカーソル
┃を移し、Ctrl+F8を押す。そこまで処理が一気に進む。
┃ End Subにカーソルを置き、Ctrl+F8を押すと、終了直前の
┃状態になる。この状態でも変数の内容の確認ができる。
┃ ・モジュールを削除する(必要な場合(モジュールつきのブッ
┃クを保存する場合、拡張子を変更する必要があるので、気持ち
┃が悪いという人の場合))=⇒画面左上のプロジェクトウィンド
┃ウのmodule1などを右クリックし、モジュールの解放を選択。
┃保存の有無が聞かれるが、保存してもしなくても良い。
┃ ・エクセルの世界へ戻る=⇒Alt+F11を押す。
┃ ・エクセル2010の場合、モジュール付きのブックを登録する
┃時は、拡張子を"xlsm"にする必要があります。
┃ ・おまけ。以下は完結したマクロです。これも貼り付けで試
┃してみてください
┃ Sub 和を求める()
┃ '数値の指定
┃ Suuti = InputBox("数値を入れてください。", , 10)
┃
┃ kotae = 0
┃ For i = 1 To Suuti Step 1
┃ kotae = kotae + i
┃ Next
┃ MsgBox ("1から" & Suuti & "まで加算した答えは、" &
┃ kotae & "です。")
┃
┃ End Sub
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
□実行時のブック(ファイル)の属性(ぶっく名、シートの属性)の取得
fname1 = ActiveWorkbook.Name
shname1 = ActiveSheet.Name
ii_max = Sheets.Count
ii0 = ActiveSheet.Index
□実行時のセルの指定範囲の情報の取得
''範囲情報の取得
AAA = Selection.Address
gyo1 = Selection.Row
gyo_cnt = Selection.Rows.Count
gyo9 = gyo1 + gyo_cnt - 1
retu1 = Selection.Column
retu_cnt = Selection.Columns.Count
retu9 = retu1 + retu_cnt - 1
AAA11 = Cells(gyo1, retu1).Address
AAA9 = Cells(gyo9, retu9).Address
□シート名の取得
'シート名の取得
Dim p_mm0(100)
cc = Sheets.Count
For i = 1 To cc 'ワークシートの数だけ繰り返す
p_mm0(i) = Sheets(i).Name '取得したシート名を取得する
Next i
□(例えば、設定された)範囲のセル群から値を取得
Dim atai(100,110)
for i = 1 to gyo_cnt
for j = 1 to retu_cnt
atai(i,j) = Cells(4 + i - 1, 3 + j - 1).Value
next
next
□(例えば、設定された)範囲のセル群から計算式を取得
'計算式の取得
Dim shiki(100)
for i = 1 to gyo_cnt
If Cells(4 + i - 1, 3).HasFormula = True Then
shiki(i) = "xxx" & Cells(4 + i - 1, 3).Formula
Else
shiki(i) = ""
End If
next
□ブック、シートの指定
Windows(fname1).Activate 'ブック名
Sheets(ii0).Select 'シート番号
Sheets(shname1).Select 'シート名
□セルの指定
Range(AAA).Select 'AAAには、"A5"、"B5:B10"などの座標が入っている。
Cells(4, 3).Select
Range(Cells(4, 3),Cells(10, 6)).Select
□コピー
Dim b_name(100)
Windows(fname1).Activate '現在のブックであれば省略可能
Sheets(ii0).Select '現在のシートであれば省略可能
Range(Cells(4 , 3 ), Cells(10, 6)).Select
Selection.Copy
Windows(b_name(bk_no)).Activate '現在のブックであれば省略可能
Sheets(h2).Activate '現在のシートであれば省略可能
Cells(24, 23 + cc).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
'計算式
Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'数値と数値の書式
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'列幅
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'書式
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'リンク貼付け
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste Link:=True
'縦横変換コピー。値及び数値書式のみ
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
□セルに数値を書きだす
Cells(4 + i - 1, 3 + j - 1) = atai
□セルに計算式を書きだす
Cells(4 + i - 1, 3 + j - 1) = atai '=から始まっている文字列
□画面から入力
h1 = InputBox("飛び先のシート番号を入れてください。 そのままのシートの場合は、0。-1,*1も可" & vbCrLf ,, 1)
□画面に出力
Suuti = 10
kotae = 55
MsgBox ("1から" & Suuti & "まで加算した答えは、" & kotae & " です。")
□セルの座標の入力1(画面から)
Dim セ As Range
Set セル範囲 = Application.InputBox(Prompt:="次のセット範囲の先頭のセルを指定してください", Default:=AAA1, Left:=10, Top:=2, Type:=8)
aaa2 = セル範囲.Address
' Type:=の値 意味
' 0 数式
' 1 数値
' 2 文字列(テキスト)
' 4 論理値(TrueまたはFalse)
' 8 セル参照(Rangeオブジェクト)
' 16 エラー値(#N/Aなど)
' 64 数値配列
□セルの座標の入力2(画面から)
Dim せる範囲 As Variant
'セルの設定
in_rrcc01 = "C4"
せる範囲 = Application.InputBox(Prompt:="使用するセルを指定してください。終了はキャンセルキー。", Default:="=" & in_rrcc01, Left:=10, Top:=2, Type:=0)
If せる範囲 = False Then errflag = 0: Exit Do
'セルの座標をA1形式にするための処理
in_rrcc2 = Application.ConvertFormula(Formula:=せる範囲, _
FromReferenceStyle:=xlR1C1, ToReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
in_rrcc2 = Mid(in_rrcc2, 2)
Range(in_rrcc2).Select
gyo21 = Selection.Row
retu21 = Selection.Column
□計算式の入力(画面から)
Dim せる範囲 As Variant
in_rrcc01 = "C4"
keisansikin = Application.InputBox(Prompt:="計算式を入力してください。終了はキャンセルキー。", Default:="=" & in_rrcc01, Left:=10, Top:=2, Type:=0)
□時間の取得、処理時間の算定
t10 = Time
t9 = Time
Cells(p1 + pp1, 3) = " 終了時間は、" & Application.WorksheetFunction.Text(t9, "hh:mm:ss") & "です。": pp1 = pp1 + 1
Cells(p1 + pp1, 3) = " 処理時間は、" & Application.WorksheetFunction.Text(t9 - t10, "hh:mm:ss") & "です。": pp1 = pp1 + 1
□連続してセルに出力(下方向)するときの工夫
pp1 = 3
p1 = pp1 + 1: pp1 = 0
Cells(p1 + pp1, 3) = " 終了時間は、" & Application.WorksheetFunction.Text(t9, "hh:mm:ss") & "です。": pp1 = pp1 + 1
Cells(p1 + pp1, 3) = " 処理時間は、" & Application.WorksheetFunction.Text(t9 - t10, "hh:mm:ss") & "です。": pp1 = pp1 + 1
Cells(p1 + pp1, 3) = " 処理レコード数は、" & Str$(jj_cnt) & "件です。": pp1 = pp1 + 1
Cells(p1 + pp1, 3) = " 出力件数は、" & jj_cnt2 & "件です。": pp1 = pp1 + 1
□inputboxを使用したメニュー表示
Dim b_name(100)
bk_no = InputBox("使用したいブックを指定してください。そのままは0。そのままのシートの場合は、99。 " & vbCrLf & _
"終了はキャンセルキー。" & vbCrLf & _
"01=⇒" & b_name(1) & vbCrLf & "02=⇒" & b_name(2) & vbCrLf & _
"03=⇒" & b_name(3) & vbCrLf & "04=⇒" & b_name(4) & vbCrLf & _
"05=⇒" & b_name(5) & vbCrLf & "06=⇒" & b_name(6) & vbCrLf & _
"07=⇒" & b_name(7) & vbCrLf & "08=⇒" & b_name(8) & vbCrLf & _
"09=⇒" & b_name(9) & vbCrLf & "10=⇒" & b_name(10) & vbCrLf & _
"11=⇒" & b_name(11) & vbCrLf & "12=⇒" & b_name(12) & vbCrLf & _
"13=⇒" & b_name(13) & vbCrLf & "14=⇒" & b_name(14) & vbCrLf & _
"15=⇒" & b_name(15) & vbCrLf _
, xpos:=2000, ypos:=3000, Default:=99)
' ※vbCrLfは改行のこと
□画面の抑止・解放
'画面を止める
Application.ScreenUpdating = False
'画面を更新する
Application.ScreenUpdating = True
□自動計算の抑止・解放
'再計算を停止
With Application
.Calculation = xlManual
End With
'再計算を実施
With Application
.Calculation = xlAutomatic
End With
□エラーになった場合の処理(エラーになった場合、次の行の処理をする)
On Error Resume Next
□エラーになった場合の処理(エラーになった場合、特殊な処理をする)
On Error GoTo ErrorTrap
ErrorTrap:
errflag = 99
Resume Next