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行目:WithEnd 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行目   :そのボタンを削除しなさい。

索引
ページの先頭へ戻る
目次へ戻る