IT講習会テキスト

 

Excel VBAマクロの使い方

 

 

 

シーボルト大学校章

 

 

県立長崎シーボルト大学

情報メディア学科 辺見一男



 

 

 

 

 

マクロ記録を使う

Excelのセキュリティレベルを下げる

 Excelのセキュリティレベルが高いとマクロが実行できません.次の手順でセキュリティレベルを下げます.

 メニュー「ツール」→「セキュリティ」を選択する.

      ↓

 セキュリティレベルを「低」に設定する.

      ↓

 Excelを再起動する.

 

 

●マクロの記録方法

 メニュー「ツール」→「マクロ」→「新しいマクロの記録」を選択する.

      ↓

 「マクロの記録」ダイアログボックスが開くので「OK」ボタンを押す.

   

 

(練習)

  セルA110

  セルA220

  セルA330

  セルA4に =SUM(A1:A3) と記入し,

  セルA4をイタリック体にする.

 

 

●マクロ記録を終了する方法

 メニュー「ツール」→「マクロ」→「記録終了」を選択する.

 

 

●実行方法(Excelで)

 メニュー「ツール」→「マクロ」→「マクロ」を選択する.

     ↓

 「マクロ」ダイアログボックスが開くので「マクロ名」を選択した後,「OK」ボタンを押す.

 

 

●実行方法(VBE:Visula Basic Editorで)

 実行したいマクロ(プロシジャー)にカーソルを移動する.

     ↓

 メニュー「実行」→「Sub/ユーザーフォームの実行」を選択する.

 

 

●マクロの編集方法

 メニュー「ツール」→「マクロ」→「Visual Basic Editor」を選択する.

     ↓

 コードウインドウにマクロが記述されているので,これを編集する.

 

(練習で記録されたVBAマクロ)

  Sub Macro1()

  '

  ' Macro1 Macro

  ' マクロ記録日 : 2004/12/1  ユーザー名 :

  '

  '

      Range("A1").Select

      ActiveCell.FormulaR1C1 = "10"

      Range("A2").Select

      ActiveCell.FormulaR1C1 = "20"

      Range("A3").Select

      ActiveCell.FormulaR1C1 = "30"

      Range("A4").Select

      ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"

      Range("A4").Select

      Selection.Font.Italic = True

  End Sub

 

 

●マクロの記録場所

 原則として標準モジュールに記録する.標準モジュールは,VBEのプロジェクトエクスプローラで「Module?」と表記されている.

   

 

 

VBAマクロの基本構造

 VBAマクロは Sub で始まって,End Sub で終わる.これをプロシジャーといいます.

 マクロ名(プロシジャー名)はわかりやすい名前(日本語も可)を付ける.

 (例)A1からA3に値を代入し,A4で合計を求めるマクロ.「値の代入と合計を求める()」がマクロ名です.

   Sub 値の代入と合計を求める()

     Range("A1") = 10

     Range("A2") = 20

     Range("A3") = 30

     Range("A4") = =SUM(A1:A3)

   End Sub

 

 

●デバッグモードの解除

 マクロ実行時にエラーが発生すると,自動的にデバッグモードに入ることがあります.デバッグモードでは,エラーがあった行に黄色の帯が表示されます.この場合は,次の手順でデバッグモードを解除してください.

 メニュー「実行」→「リセット」を選択する.

 

 

●コメント

 コメントとは人が理解しやすくするために入れる説明のことで,プログラムの実行には影響を与えません.

 シングルコーテンション(')の後がコメントとなります.

 (例)「' セルA110を入れる」の部分がコメント

   Range("A1") = 10  ' セルA110を入れる

 

 

●マクロの強制停止(マクロが暴走した時)

 「Esc」キーを押す.

 

 

VBE:Visual Basic Editor の開き方(閉じてしまった場合)

 メニュー「ツール」→「マクロ」→「Visual Basic Editor」を選択する.

 

 

 

 

【良く使うVBAマクロ】

●セルを選択する

  ・セル番地で選択する Range("B1").Select

    直感的でわかりやすいが,セルを変数で指定できない.

  ・(y,x)座標((行,列)座標)で指定する Cells(1, 2).Select

    セルを変数で指定できる.

 

 

●セルに値(数値,文字,式)を入れる

 基本的に,文字やExcelの関数を入れるときはダブルコーテーション()で文字を囲み,数値を入れるときはそのまま入れます.

  ・セル番地を指定して入れる Range("B1") = 10

    直感的でわかりやすいが,セルを変数で指定できない.

  ・(y,x)座標で指定して入れる Cells(1, 2) = 10

    セルを変数で指定できる.

  ・セルを選択した後,そのセルに値を入れる.

    Cells(1, 2).Select

    ActiveCell = 10

  ・Excelの関数を入れる.

    Range("A1") = "=SUM(A2:A4)"

 

   <参考>

   セルに値を入れる方法は多数あります.また,数値と文字の区別も厳密には行われません.

   次の書き方は,いずれも「セルA110(数値)を入れる」という意味になります.

    Range("A1") = "10"

    Range("A1") = 10

    Range("A1").Value = "10"

    Range("A1").Value = 10

    Range("A1").Formula = "10"

    Range("A1").Formula = 10

    Range("A1").FormulaR1C1 = "10"

    Range("A1").FormulaR1C1 = 10

    Cells(1, 1) = "10"

    Cells(1, 1) = 10

    Cells(1, 1).Value = "10"

    Cells(1, 1).Value = 10

    Cells(1, 1).Formula = "10"

    Cells(1, 1).Formula = 10

    Cells(1, 1).FormulaR1C1 = "10"

    Cells(1, 1).FormulaR1C1 = 10

 

 

●セル範囲の選択

 ・セルA1からA3を選択する

   Range("A1:A3").Select

   Range(Cells(1, 1), Cells(3, 1)).Select

 

 

●セルの内容をコピー&ペーストする

 ・セルA1からA3の内容をB1からB3にコピーする.

   Range("A1:A3").copy Range(B1)

 

 

●セルの内容をカット&ペーストする

 ・セルA1からA3の内容をB1からB3に移動する.

   Range("A1:A3").Cut Range("B1")

 

 

●セルの内容を消去する

 ・セルA1からA3の内容を消去する.

   Range("A1:A3").Clear

 

 

●シートを選択する

 ・シート名で選択 Sheets("Sheet1").Select

   シート名で選択した場合,シート名を変えると選択できなくなる.   

 ・シートの番号で選択 Worksheets(1).Select

   左端のシートから順に1,2,3...となる.シート番号には変数が使える.

 

 

●シートを追加する

 ・Sheets(4)の後にシートを追加する

   Sheets.Add After:=Sheets(4)

 ・Sheets(4)の前にシートを追加する

   Sheets.Add Before:=Sheets(4)

 

 

●シートの名前を変える

 ・Sheets(4)の名前を「1組」に変える.

   Worksheets(4).Name = "1組"

 

 

●別のシートへコピーする

 ・Sheets(1)A1からA3の範囲を,Sheets(2)A1からにコピーする.

   Sheets(1).Range("A1:A3").Copy Sheets(2).Range("A1")

 

 

●シートを削除する

 ・Sheets(4)を削除する

   Sheets(4).Delete

 ・警告を出さないで削除する.

   Application.DisplayAlerts = False

   Sheets(4).Delete

 ・再度,警告を出すようにするには.

   Application.DisplayAlerts = True

 

 

●ファイル(Workbook)を開く

 ・同一フォルダ内にある「国語.xls」というファイルを開く.

   Workbooks.Open CurDir() + "\" + "国語.xls"

 

 

●ファイル(Workbook)を新規に作る.

 ・新規に作る

    Workbooks.Add

 ・ファイルに名前を付けたいときは,名前を付けて保存する.

    「まとめ」という名前で保存する場合 ActiveWorkbook.SaveAs ("まとめ")

 

 

●ファイル(Workbook)を閉じる

 ・上書き保存をして閉じる

   Workbooks("国語.xls").Close SaveChanges:=True

 ・保存せずに閉じる

   Workbooks("国語.xls").Close SaveChanges:=False

 

 

マクロ実行ボタンの登録方法(Sheetボタンを作ってマクロを実行できるようにする

 メニュー「表示」→「ツールバー」→「フォーム」を選択する

     ↓

 ツールバー「フォーム」から「ボタン」を選択する

     ↓

 シートの上にボタンを作成する(マウスの左ボタンを押しながらドラッグする)

     ↓

 「マクロの登録」ダイアログボックスが出るので,マクロ名を選択した後「OK」ボタンを押す

 

 

 

 

●繰り返し(For文) 

 ・セルA1からA5に,1から5の値を入れる

   a = 0

   For y = 1 To 5

      a = a + 1

      Cells(y, 1) = a

   Next y

 

 ・セルA1からA5の内容を,セルB1からB5にコピーする

   For y = 1 To 5

      Cells(y, 1).Copy Cells(y, 2)

   Next y

 

 ・セルA1からA5の内容を,セルB1からB5にコピーする

   For y = 1 To 5

      Range(Cells(y, 1), Cells(y, 1)).Copy Cells(y, 2)

   Next y

 

 

●条件判断(if文)

 ・セルA1からA3の内容を,セルB1からB3に,セルA4からA5の内容を,セルC4からC5にコピーする

   For y = 1 To 5

      If (y <= 3) Then

         Cells(y, 1).Copy Cells(y, 2)

      Else

         Cells(y, 1).Copy Cells(y, 3)

      End If

   Next y

 

 

●除算の余り(Mod

 ・A列の値を,1行飛ばしで,B列とC列にコピーする

   For y = 1 To 5

      If ((y Mod 2) = 1) Then

         Cells(y, 1).Copy Cells(y, 2)

      Else

         Cells(y, 1).Copy Cells(y, 3)

      End If

   Next y

 

 

●ファイルを開いたときにマクロを自動実行する

Auto_Open()という名前のマクロ(プロシジャー)を作る.ファイルを開いたときは,このプロシジャーが自動的に実行される

 ・ファイルを開いたときに,セルA1に「自動実行されました」と入れる

   Sub Auto_Open()

        Range("A1") = "自動実行されました"

   End Sub

 

 

Excelを起動したときに,特定のファイルを自動的に実行することもできます.次に示すフォルダにあるExcelのファイルが自動的に実行されます.

 ・自動実行ファイルを入れる場所

   Win2000+Office2000の場合

    c:\Program Files\Microsoft Office\Office\XLStart

   WinXP+OfficeXPの場合

    c:\Program Files\Microsoft Office\Office11\XLSTART

 

 

【練習問題】

(1)セルA130,セルA250,セルA190,セルA4100,セルA5A1からA4の合計,セルA6

A1からA4の平均を求めるマクロを作りなさい.合計は=sum(),平均は=average()を用います.

(2)セルA1からA5までを選択するマクロを作りなさい.

(3)セルA1からA5までの内容を,B1からB5に移動するマクロを作りなさい.

(4)セルA1B3に,セルA2B2に,セルA3B1にコピーするマクロを作りなさい.

(5)2枚目のシートの,セルA1からA5までを選択するマクロを作りなさい.

(6)1枚目のシートの,セルA1からA5までの内容を,2枚目のシートの,B1からB5にコピーするマクロを作りなさい.

 

 

【総合問題】

3つの成績ファイル(英語.xls,数学xls,国語xls,)から,「学籍番号101番 伊井直行

」の成績を抜き出して,1つのファイル(まとめ.xls)にまとめるマクロを作りなさい.

 

 

 

<参考図書>

(1)ExcelVBA完全制覇パーフェクト,田中亮著,翔泳社,3180

(2)Excel97VBAハンドブック,相沢文雄他著,ナツメ社,2500