Appendix 1 基本操作マクロサンプル |
この付録は、テキストで使用した基本操作に関する「マクロの記録」を整理したものです。
以下に掲げるサンプルは、「基本操作マクロサンプル.xls」にあります。各サンプルを実行
する前にマクロプログラムに目を通し、実行前の準備を適宜行なって下さい。
なお、VBAマクロプログラムには行番号は付きませんが、説明の都合上各行の左端に
それを付しています。また、コードの先頭に記入されるマクロ名とマクロの記録日に関する
注釈行は削除されています。
A セル関係
A-01 セル内容のコピー
1 Sub セル内容のコピー() 2 Range("A1").Select 3 Selection.Copy 4 Sheets("Sheet1").Select 5 Range("A1").Select 6 ActiveSheet.Paste 7 End Sub |
セル内容を別シートにコピーします。
2行目 :A1セルを選択し、アクティブにします。
3行目 :編集/コピーあるいはCtrl+Cのコピー操作に対応するコードです。
4行目 :[Sheet1」を選択
6行目 :A1セルに貼付(ペースト)
A-02 セル範囲クリア
1 Sub セル範囲クリア() 2 Range("A1:C22").Select 3 Selection.ClearContents 4 End Sub |
選択したセル範囲の内容を消去(クリアー)します。
2行目 :A1〜C22の範囲を選択
3行目 :セルの内容を消去
A-03 セル内容の移動
1 Sub セル内容の移動() 2 Range("I9").Select 3 ActiveCell.FormulaR1C1 = "" 4 Range("H9").Select 5 ActiveSheet.Paste 6 End Sub |
セルに表示されている内容を別のセルに移動します。
2行目 :I9セルを選択
3行目 :アクティブセルの内容を切り取り
4行目 :H9セルを選択
5行目 :アクティブセルの内容を貼付
A-04 列幅設定
1 Sub 列幅設定() 2 Columns("G:U").Select 3 Selection.ColumnWidth = 2 4 End Sub |
列幅の設定です。
2行目 :G〜U列を選択
3行目 :列幅を半角2文字分として設定
B シート関係
B-01 シートコピー
1 Sub シートコピー() 2 Sheets("国語成績").Select 3 Sheets("国語成績").Copy before:=Sheets(2) 4 End Sub |
シートのコピーです。
2行目 :シート名「国語成績」を選択
3行目 :先頭から2枚目のシートの前に「国語成績」をコピーしなさい。
コピーされたシート名は「国語成績(2)」となり、アクティブシートに切り替わ
ります。
B-02 シート名変更
1 Sub シート名変更() 2 Sheets("国語成績 (2)").Select 3 Sheets("国語成績 (2)").Name = "連結成績" 4 End Sub |
シート名の変更です。
2行目 :シート名「国語成績(2)」を選択
3行目 :シートの名前「国語成績(2)」を「連結成績」とします。
B-03 ワークシート挿入
1 Sub ワークシート挿入() 2 Sheets("国語成績").Select 3 Sheets.Add 4 End Sub |
シートの挿入です。
2行目 :シート名「国語成績」を選択
3行目 :追加された空白シート名は「国語成績(2)」となり、アクティブシートに
切り替わります。
B-04 シート印刷
1 Sub シート印刷() 2 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 3 End Sub |
シートの印刷です。
2行目 :選択されているシートを1部印刷
C 文字列関係
C-01 文字列キーボード入力
1 Sub 文字列キーボード入力() 2 Range("F10").Select 3 ActiveCell.FormulaR1C1 = "'1991年9月6日" 4 ActiveCell.Characters(5, 1).PhoneticCharacters = "ネン" 5 ActiveCell.Characters(7, 1).PhoneticCharacters = "ガツ" 6 ActiveCell.Characters(9, 1).PhoneticCharacters = "ニチ" 7 End Sub |
文字列をキーボードから入力した場合の「マクロの記録」です。
2行目 :F10セルを選択
3〜6行目 :1991年9月6日と入力すると、漢字の読みが4行〜6行に示すよう表示されます。
C-02 文字列結合マクロ例
1 Sub 文字列結合マクロ例() 2 Range("F25").Select 3 ActiveCell.FormulaR1C1 = _ 4 "=""平成""&R[-10]C[-1]&""年""&R[-10]C[0]&""月""&R[-10]C[1]&""日""" 5 End Sub |
文字列を&で結合します。
2行目 :F25セルを選択
3,4行目 :アクティブセルに結合した文字列が代入されます。3行目=の右辺は、
「半角空白+_」で継続行の印で、3行目が次の行に続いていることを意味
します。文が横長になり過ぎるときに使われます。
直接記入される文字列は""
""で囲み、セルに文字列が表示されている
場合にはR1C1形式でセル位置を指定し、結合します。
C-03 文字列中央寄せ
1 Sub 文字列中央寄せ() 2 Range("N9,S9,G10:U10").Select 3 Range("G10").Activate 4 With Selection 5 .HorizontalAlignment = xlCenter 6 .VerticalAlignment = xlCenter 7 .WrapText = False 8 .Orientation = 0 9 .AddIndent = False 10 .IndentLevel = 0 11 .ShrinkToFit = False 12 .ReadingOrder = xlContext 13 .MergeCells = False 14 End With 15 End Sub |
文字列をセルの中央に配置します。
2行目 :N9,S9,G10:U10セルを選択
3行目 :G10セルがアクティブの状態
4〜14行目:With〜End Width文は、その間に挟まれた複数の文(これをブロック文と
呼びます)を簡潔に記述するもので、Withの右横に書かれたオブジェクト
(この例では、Selection)をブロック文のピリオドの前で再定義しなくとも
使用できる便利な命令です。
5行目〜水平方向配置を中央(Center)にしなさい。
6行目〜高さ方向配置を中央(Center)にしなさい。
7〜13行目〜「マクロの記録」をとると記述されていますが、省略可です。
C-04 文字列右寄せ
1 Sub 右寄せ() 2 Range("F20").Select 3 With Selection 4 .HorizontalAlignment = xlRight 5 .VerticalAlignment = xlCenter 6 .WrapText = False 7 .Orientation = 0 8 .AddIndent = False 9 .IndentLevel = 0 10 .ShrinkToFit = False 11 .ReadingOrder = xlContext 12 .MergeCells = False 13 End With 14 End Sub |
文字列の水平方向配置を右寄せとします。C-03と比較参照して下さい。
4行目 :水平方向配置を右寄せ(Right)にしなさい。
他の行の解釈は、全てC-03に同じです。
C-05 文字列縦書き変換マクロ例
1 Sub 文字列縦書き変換マクロ例() 2 Range("E25").Select 3 With Selection 4 .HorizontalAlignment = xlRight 5 .VerticallAlignment = xlCenter 6 .WrapText = False 7 .Orientation = xlVertical '横書き変換の場合には右辺は0です 8 .AddIndent = False 9 .IndentLevel = 0 10 .ShrinkToFit = False 11 .ReadingOrder = xlContext 12 .MergeCells = False 13 End With 14 End Sub |
横書きの文字列を縦書きに変換します。7行目の指定を除き、C-04に同じです。
7行目 :文字列の方向(Orientation)を鉛直(Vertical)にしなさい。
因みに、縦書きを横書きに変換する場合には、7行目の右辺xlVerticalを
0とします。
C-06 文字列縦書き上詰め
1 Sub 文字列縦書き上詰め() 2 Range("C4").Select 3 With Selection 4 .HorizontalAlignment = xlCenter 5 .VerticalAlignment = xlTop 6 .WrapText = True 7 .Orientation = xlVertical 8 .AddIndent = False 9 .IndentLevel = 0 10 .ShrinkToFit = False 11 .ReadingOrder = xlContext 12 .MergeCells = False 13 End With 14 End Sub |
縦書きで高さ方向中央配置の文字列を上詰めとします。
5行目 :高さ方向配置を上詰め(Top)にしなさい。他の行の解釈は、C-05に同じ。
C-07 数値を文字列に変換
1 Sub 数値を文字列に変換() 2 Range("J12").Select 3 ActiveCell.FormulaR1C1 = "=TEXT(37,""0"")" 4 End Sub |
数値37を文字列37に変換します。
3行目 :数値37を表示形式0で変換しなさい。TEXT関数のダイアログにて数値欄を
37、表示形式欄を0と置く操作に対応しています。
C-08 フォントの指定と拡大
1 Sub フォントの指定と拡大() 2 Range("B10").Select 3 With Selection.Font 4 .name = "MS Pゴシック" 5 .Size = 12 6 .Strikethrough = False 7 .Superscript = False 8 .Subscript = False 9 .OutlineFont = False 10 .Shadow = False 11 .Underline = xlUnderlineStyleNone 12 .ColorIndex = xlAutomatic 13 End With 14 End Sub |
フォントの指定と拡大です。
4行目 :フォントを「MS Pゴシック」に指定
5行目 :フォントサイズを12ポイントに指定
6〜12行目:省略可
D 文字列関数関係
D-01 FIND関数マクロ例
1 Sub FIND関数マクロ例() 2 Range("E12").Select 3 ActiveCell.FormulaR1C1 = "=FIND(""年"",R[-2]C[1])" 4 End Sub |
特定文字を指定セルから見出いし、文字列先頭から何番目にあるのかを返します。
2行目 :E12セルを選択
3行目 :E12セルの上に2行、右に1列ずれたR[-2]C[1]セルの文字列から年の文字
が文字列先頭から何番目の位置にあるのかをE12セルに表示しなさい。
D-02 LEFT関数マクロ例
1 Sub LEFT関数マクロ例() 2 Range("G10").Select 3 ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],4)" 4 End Sub |
文字列の先頭(左端)から指定文字数分取り出します。
2行目 :G10セルを選択
3行目 :G10セルの左隣セル(RC[-1])の文字列について、左端から4文字取り出し、
G10セルに表示しなさい。
D-03 RIGHT関数マクロ例
1 Sub RIGHT関数マクロ例() '年以降の文字列 2 Range("F14").Select 3 ActiveCell.FormulaR1C1 = "=RIGHT(R[2]C,LEN(R[2]C)-FIND(""年"",R[2]C)+1)" 4 End Sub |
文字列の右端から指定文字数分取り出します。
2行目 :F14セルを選択
3行目 :F14セルの下のセル(R[2]Cセル、即ちH14セル)について、(文字列の全長
−FIND関数で見出した年の位置の文字数+1)の文字数を、文字列右端
から取り出し、F14セルに表示しなさい。
D-04 MID関数マクロ例
1 Sub MID関数マクロ例() 2 Range("F14").Select 3 ActiveCell.FormulaR1C1 = "=MID(R[-4]C,R[-2]C[-1]+1,R[-2]C-R[-2]C[-1]-1)" 4 End Sub |
文字列の中間部(第2引数から第3引数で指定された位置の文字列)を取り出します。
2行目 :F14セルを選択
3行目 :F14セルの4行上にあるR[-4]Cセルの文字列について、R[-2]C[-1]セルに表示
された数+1から(R[-2]Cセルに表示された数-R[-2]C[-1]に表示された数-1)
までの位置にある文字列をF14セルに表示しなさい。
D-05 前半分文字列取り出し
1 Sub 前半分文字列取り出し() 2 Range("B28").Select 3 ActiveCell.FormulaR1C1 = "=LEFT(R[-1]C,FIND("":"",R[-1]C)-1)" 4 End Sub |
選択セルに表示された文字列:の前半分を取り出します。
2行目 :B28セルを選択
3行目 :B28セルの上隣セルについて、文字列先頭から数えた:の位置をFIND関数で
見出し、その値-1の文字数を文字列左端から取り出し、B28セルに表示
D-06 後半分文字列取り出し
1 Sub 後半分文字列取り出し() 2 Range("B29").Select 3 ActiveCell.FormulaR1C1 = "=RIGHT(R[-2]C,LEN(R[-2]C)-FIND("":"",R[-2]C))" 4 End Sub |
選択セルに表示された文字列:の後半分を取り出します。
2行目 :B29セルを選択
3行目 :B29セルの2行上隣セルについて、(文字列の全長−FIND関数で見出した:
の位置)の文字数分を、文字列右端から取り出し、B29セルに表示
D-07 TEXT関数漢数字変換マクロ例
1 Sub TEXT関数漢数字変換マクロ例() 2 Range("E15").Select 3 ActiveCell.FormulaR1C1 = "=TEXT(R[-1]C,""[DBNum1]"")" 4 End Sub |
数値あるいは文字列としての数字を漢数字に変換します。
3行目 :E15セルの1行上のセルにある数字を漢数字に変換し、E15セルに表示
しなさい。
D-08 文字列の置換
1 Sub 文字列の置換_1() 2 Range("E4").Select 3 ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-3],""-"",""〜"")" 4 End Sub |
ある文字列を他の文字列に置き換えます。
3行目 :E4セルから左に3列ずれたRC[-3]セルの文字列について、「-」を「〜」に
置き換えた文字列をE4セルに表示しなさい。
E 日付関係
E-01 日付スタイル変更例
1 Sub 日付スタイル変更例() 2 Range("F10").Select 3 ActiveCell.FormulaR1C1 = "=TEXT(RC[-1],""yyyy年m月d日"")" 4 End Sub |
日付の表記を指定した種類に変更します。
3行目 :F10セルの左隣セルRC[-1]の日付表記を種類「yyyy年m月d日」に変更して
F10セルに表示しなさい。
E-02 シリアル値に変換
1 Sub シリアル値に変換() 2 ss = Range("E18") 3 ss.NumberFormatLocal = "G/標準" 4 End Sub |
日付の表記をシリアル値に変更します。
2行目 :E18セルの内容を変数ssに代入しなさい。
3行目 :変数ssの内容を分類「標準」を用いて、シリアル値に変更しなさい。
F 罫線関係
F-01 罫線削除マクロ例
1 Sub 罫線削除マクロ例() 2 Range("J13").Select 3 Selection.Borders(xlDiagonalDown).LineStyle = xlNone 4 Selection.Borders(xlDiagonalUp).LineStyle = xlNone 5 Selection.Borders(xlEdgeLeft).LineStyle = xlNone 6 Selection.Borders(xlEdgeTop).LineStyle = xlNone 7 Selection.Borders(xlEdgeBottom).LineStyle = xlNone 8 Selection.Borders(xlEdgeRight).LineStyle = xlNone 9 Selection.Borders(xlInsideVertical).LineStyle = xlNone 10 Selection.Borders(xlInsideHorizontal).LineStyle = xlNone 11 End Sub |
罫線の表示を削除します。
2行目 :J13セルを選択
3行目 :右下がり斜め罫線表示を削除
4行目 :右上がり斜め罫線表示を削除
5行目 :左端罫線表示を削除
6行目 :上端罫線表示を削除
7行目 :下端罫線表示を削除
8,9行目 :この例のようにセルがひとつ選択された場合には、セルの内部罫線は元々
無く、この2行は削除可能です。
8行目〜内部の鉛直方向罫線
9行目〜内部の水平方向罫線
F-02 右下がり斜め罫線記入マクロ例
1 Sub 右下がり斜め罫線記入マクロ例() 2 Range("I9").Select 3 With Selection.Borders(xlDiagonalDown) 4 .LineStyle = xlContinuous 5 .Weight = xlThin 6 .ColorIndex = xlAutomatic 7 End With 8 Selection.Borders(xlDiagonalUp).LineStyle = xlNone 9 Selection.Borders(xlEdgeLeft).LineStyle = xlNone 10 Selection.Borders(xlEdgeTop).LineStyle = xlNone 11 Selection.Borders(xlEdgeBottom).LineStyle = xlNone 12 Selection.Borders(xlEdgeRight).LineStyle = xlNone 13 End Sub |
右下がり斜め罫線の記入です。
3〜7行目 :右下がり斜め罫線を細線(xlThin)で記入
8〜12行目 :削除可
F-03 セル内部罫線削除マクロ例
1 Sub セル内部罫線削除マクロ例() 2 Range("I3:J6").Select 3 Selection.Borders(xlDiagonalDown).LineStyle = xlNone 4 Selection.Borders(xlDiagonalUp).LineStyle = xlNone 5 With Selection.Borders(xlEdgeLeft) 6 .LineStyle = xlContinuous 7 .Weight = xlThin 8 .ColorIndex = xlAutomatic 9 End With 10 With Selection.Borders(xlEdgeTop) 11 .LineStyle = xlContinuous 12 .Weight = xlThin 13 .ColorIndex = xlAutomatic 14 End With 15 With Selection.Borders(xlEdgeBottom) 16 .LineStyle = xlContinuous 17 .Weight = xlThin 18 .ColorIndex = xlAutomatic 19 End With 20 With Selection.Borders(xlEdgeRight) 21 .LineStyle = xlContinuous 22 .Weight = xlThin 23 .ColorIndex = xlAutomatic 24 End With 25 Selection.Borders(xlInsideVertical).LineStyle = xlNone 26 Selection.Borders(xlInsideHorizontal).LineStyle = xlNone 27 End Sub |
外枠罫線を記入し、内部罫線を消去します。
2行目 :I3〜J6のセル範囲を指定
5〜24行目:範囲内のセル外枠罫線を細線で記入
25,26行目 :セル範囲の内部鉛直、水平方向の罫線を消去
F-04 セル右端罫線表示
1 Sub セル右辺罫線表示() 2 Range("O9:R9").Select 3 With Selection.Borders(xlEdgeRight) 4 .LineStyle = xlContinuous 5 .Weight = xlThin 6 .ColorIndex = xlAutomatic 7 End With 8 End Sub |
選択セル範囲の右端の罫線を表示します。
2行目 :O9〜R9のセル範囲を選択
3〜7行目 :右端の罫線表示
G コピー関係
G-01 他シートからセルの文字列転記
1 Sub 他シートからセルの文字列転記() 2 Sheets("各教科別観点リスト").Select 3 Range("C3:C7").Select 4 Selection.Copy 5 Sheets("国語観点評価").Select 6 Range("D2").Select 7 ActiveSheet.Paste 8 End Sub |
他シートのセル内容を別シートにコピーします。
2行目 :ワークシート「各教科別観点リスト」を選択
3行目 :C3〜C7セル範囲を選択
4行目 :上記セル範囲の内容をコピーしなさい。
5行目 :ワークシート「国語観点評価」を選択
6行目 :セルD2を選択
7行目 :上記セルを左上隅として、コピーしたセル内容を貼付
G-02 名簿tblコピー
1 Sub 名簿tblコピー() 2 Application.Goto Reference:="名簿tbl" 3 Selection.Copy 4 Sheets("連結成績").Select 5 Range("B4").Select 6 ActiveSheet.Paste 7 End Sub |
名前付き登録表を参照し、コピーします。
2行目 :登録名「名簿tbl」を参照し、登録セル範囲を選択しなさい。
3行目 :上記範囲の内容をコピーしなさい。
4行目 :シート名「連結成績」を選択
5行目 :セルB4を選択
6行目 :上記セルを左上隅として、コピーした「名簿tbl」のセル内容を貼付
G-03 列幅コピー
1 Sub 列幅コピー() 2 Application.Goto Reference:="名簿tbl" 3 Selection.Copy 4 Sheets("連結成績").Select 5 Range("B4").Select 6 Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ 7 SkipBlanks:=False, Transpose:=False 8 End Sub |
セルの列幅をコピーします。G-02の6行目が6,7行目に入れ替わっています。
6,7行目 :列幅を貼り付けなさい。
セルの内容と列幅を同時に貼り付ける場合には、この2行をG-02マクロの
6行目の次に新たな行として挿入します。
H 行、列の挿入削除関係
H-01 複数列の削除
1 Sub 複数列の削除() 2 Range("K:K,P:P,U:U").Select 3 Range("U1").Activate 4 Selection.Delete shift:=xlToLeft 5 End Sub |
複数の列番号を削除します。
2行目 :K、P、U列を選択しなさい。()内を"K,P,U"のように記述できません。
3行目 :U1がアクティブな状態
4行目 :選択された列を削除して、左に詰めなさい。
H-02 複数行の削除
1 Sub 複数行の削除() 2 Rows("1:1000").Select '1:1000行までの削除 3 Selection.Delete Shift:=xlUp 4 End Sub |
複数の行番号を削除します。
2行目 :1〜1000行を選択
3行目 :選択された行を削除し、上に詰めなさい。
H-03 行の挿入
1 Sub 行の挿入() 2 Dim myAdr As String, insrow As Integer 3 For num = 1 To 2 4 ins = 7 + (num - 1) * 5 5 myAdr = CStr(ins) 'tips A044 6 Rows(myAdr).Select 7 For i = 1 To 4 8 Selection.Insert shift:=xlDown 9 Next 10 Next 11 End Sub |
4行の挿入例で、「マクロの記録」ではありませんが、参考のために掲載しておきます。
CStr()は、()内のinsで与えられる数値を文字列化しています。
3行目 :ループ変数numは最初1、2回目の繰り返し時に2となります。
4行目 :変数insは、最初7、2回目の繰り返し時に12となります。
5行目 :insに保存されている数値を文字列化します。
6行目 :()内に指定された文字列の行番号を選択
7〜9行目 :8行目が実行される度に1行挿入されます。4回繰り返えされます。
I その他
I-01 リスト入力の設定
1 Sub リスト入力の設定() 2 Range("G11:U40").Select 3 With Selection.Validation 4 .Delete 5 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 6 xlBetween, Formula1:="○,△,・, " 7 .IgnoreBlank = True 8 .InCellDropdown = True 9 .InputTitle = "" 10 .ErrorTitle = "" 11 .InputMessage = "" 12 .ErrorMessage = "" 13 .IMEMode = xlIMEModeNoControl 14 .ShowInput = True 15 .ShowError = True 16 End With 17 With Selection 18 .HorizontalAlignment = xlCenter 19 .VerticalAlignment = xlCenter 20 .WrapText = False 21 .Orientation = 0 22 .AddIndent = False 23 .IndentLevel = 0 24 .ShrinkToFit = False 25 .ReadingOrder = xlContext 26 .MergeCells = False 27 End With 28 End Sub |
選択したセル範囲を一括してリスト入力可能とします。
2行目 :セル範囲G11〜U40を選択
3〜16行目:5,6行目は、リスト欄記入文字列を半角のカンマで区切って記述しています。
17〜27行目:リスト入力したデータの文字列を「中央寄せ」しています。20〜26行目省略可
I-02 絶対アドレスから行番号の取り出し
1 Sub 絶対アドレスから行番号の取り出し() 2 ' 絶対アドレスはH17セルに記入済 3 Range("I18").Select 4 ActiveCell.FormulaR1C1 = "=RIGHT(RC[-1],LEN(RC[-1])-3)" 5 End Sub |
絶対アドレス表記(例えば、$D$35)から行番号を取り出します。
3行目 :I18セルを選択
4行目 :上記セルの左隣RC[-1]セルの文字列全長から3(即ち、$D$の3文字)引いた
文字数を文字列右端から取り出し、I18セルに表示しなさい。絶対アドレスが
例えば$BD$ならば、4を引くことになります。
I-03 選択教科赤丸表示
1 Sub 選択教科赤丸表示() 2 ActiveSheet.Shapes.AddShape(msoShapeOval, 691.5, 31.5, 8.25, 8.25).Select 3 Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 4 Selection.ShapeRange.Line.Visible = msoTrue 5 End Sub |
赤い丸を表示します。
2行目 :○を表記しなさい。
3行目 :色を赤にしなさい。
I-04 マクロボタンの削除
1 Sub マクロボタンの削除() 2 ActiveSheet.Shapes("Button 8").Select 3 Selection.Cut 4 End Sub |
マクロボタンを削除します。
2行目 :アクティブシート上のButton
8を選択しなさい。
3行目 :そのボタンを削除しなさい。
索引
ページの先頭へ戻る
目次へ戻る