Skip to content
Twitter
edu-IT Practical Labo
【名古屋】
edu-IT Practical Laboedu-IT Practical Labo
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact
 
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact

ExcelVBA入門~例題を解きながらオブジェクトの使い方を理解しよう

You are here:
  1. Home
  2. edu-IT
  3. Excel…
11月242020
edu-ITExcelIT knowledge

「Excelで自動化処理」といったフレーズを耳にすることがあるのではないでしょうか。請求書を出力したり、メールを一斉送信したり、普段業務で使うExcelを使って、ちょっとした開発をしてみたいと考えている方もいらっしゃるかもしれません。

複数の操作や手順をあらかじめ1つにまとめて必要に応じて呼び出すことができる「マクロ」。マクロを作成するためのプログラミング言語であるVBA(Visual Basic for Application)の基礎知識を学ぶことで、開発に対する素養を身に着けられると仕事にも役立つかもしれません。

今回は、Excel VBAの基本的な知識を確認していきたいと思います。
演習問題のダウンロードはこちらから

 

Contents

  • 1 マクロ文の構成
  • 2 変数を理解しよう
  • 3 オブジェクト変数を理解しよう
  • 4 ファイルの操作

マクロ文の構成

マクロの文は、主にオブジェクトとプロパティまたはメソッドで構成されています。

・オブジェクトとは

ブックやシート、セルなどExcelの構成物をオブジェクトといいます。オブジェクトは次のように階層構造になっています。

例. マクロでセルD5を選択する場合
 Workbooks(“Book1.xlsx”).Worksheets(“Sheet1”).Range(“D5”).Select

*Book1のSheet1がアクティブの場合は、Workbook と Worksheetオブジェクトは省略できます。

 

変数を理解しよう

変数をマクロの中で扱うためには、はじめに変数をDimステートメントで宣言します。

【基本構文】
  Dim 変数名 As データ型
  Dim 変数名 As データ型、変数名2 As データ型2

【参考】:よく使われる変数名

・ シート → sh
・ ブック → bk, wb
・ 数値 → num (numberの略)
・ カウンタ変数 → i, j, k (For文などの繰り返しの処理で使用)
・ 件数のカウント → cnt (counterの略)
・ 一時的な格納 → tmp, buf (temporary, bufferの略)

 

・配列の宣言

【書式】
  Dim <配列変数名> (要素の下限(最小値) To 要素の上限(最大値) )

 

    Sub Sample()
        Dim A(2) As String
        A(0) = “佐藤”
        A(1) = ”山本”
        A(2) = “川上”
        MsgBox  A(0) & “と” & A(1) & “と” & A(2)
    End Sub

 配列を宣言するとき、要素の下限(最も小さい部屋番号)を指定しなかった場合、
 最も小さいインデックス番号は「0」から始まることに留意してください。

⇒ ここで、添付資料「変数宣言と利用法」シートにある演習問題を解いてみましょう

 

・配列を受け取る

 VBAには配列を返す関数があります。よく使われるのがSplit関数です。

【書式】
  Split ( 元の文字列,区切り文字列 )

*VBAの変数の型に「配列型」はないので、Split関数が返す配列はバリアント(Variant)で受け取ります。

    Sub Sample()
        Dim A As Variant, i As Long
        A = Split(“A-B-C”, “-” )
        For i=0 To UBound(A)
	    MsgBox  A(i) 
        Next i
    End Sub

⇒ ここで、添付資料「配列を返す関数と型」シートにある演習問題を解いてみましょう

 

・配列を操作する - 「For Each…Nextステートメント」

For Each…Nextステートメントは、グループのメンバーを
ひとつずつ順番に取り出して操作します。

【書式】
  For Each 変数 In グループ名             
   変数を使った操作                    
  Next 変数

 メンバーを取り出すグループには
 「コレクション」、「複数のセル」、「配列」の3つを指定できます。

    Sub Sample()
        Dim A(2) As Long, N As Variant, SUM As Long
        A(0) = 1
        A(1) = 10
        A(2) = 100
        For Each N In A
            SUM = SUM+N
        Next N
        MsgBox SUM
    End Sub

 

・動的配列

 宣言時には要素数を指定しない配列を「動的配列」と呼びます。

【書式】
  Dim A() As String            
                   
⇒ マクロの中で要素数を指定するには「ReDim」という命令を使います。 

    Sub Sample()
        Dim A() As String
        ReDim A(2)
        A(2) = “鈴木”
   End Sub

* 動的配列では、状況に応じて要素数を変更できますが、
 ReDimで要素数を変更すると、それまで格納されていた値が消えてしまうので注意が必要です。

 既存の値を消さないで要素数を変更するには
 ReDimという命令に「Preserve」というキーワードを付けます。

    Sub Sample()
        Dim A() As String
        ReDim A(1)
        A(2) = “斎藤”
        A(2) = “藤田”
        ReDim Preserve A(2)
        A(2) = “山下”
        MsgBox A(0)
   End Sub

⇒ ここで、添付資料「動的配列」シートにある演習問題を解いてみましょう

 

オブジェクト変数を理解しよう

 文字列型の変数に文字列を格納すると
 その変数はもとの文字列と同じ性質を持ちます。

 “オブジェクトそのもの”を格納する変数をオブジェクト変数と呼びます。

【オブジェクト変数の宣言例】

Dim A As Range セルを格納する型
Dim A As Worksheet ワークシートを格納する型
Dim A As Workbook ブックを格納する型

 

・オブジェクト変数にオブジェクトを格納する

Set 変数名 = オブジェクト

    Sub Sample()
        Dim A() As Range
        Set A = Range(“A1”)
        A.Font.Color.Index = 3
    End Sub

次のコードは、
 新しいワークシートを挿入した直後に、マクロ実行前のアクティブシートを開きます。

     Sub Sample()
        Dim WS1 As Worksheet, WS2 As Worksheet
        Set WS1 = ActiveSheet
        Set WS2 = Worksheets.Add
        WS1.Activate
        WS2.Name = “合計”
     End Sub

  オブジェクト変数は、格納されたオブジェクトと同様に扱えますので、
  たとえばセル(Rangeオブジェクト)を格納したオブジェクト変数では

  Rangeオブジェクトが持つValueやFormulaなどのプロパティ、
  Insert や Deleteなどのメソッドが使用できます。

     Sub Sample()
        Dim A() As Range
        Set A = Range(“A1”)
        A.Font.Color.Index = 3
        Set A = Nothing
     End Sub

* オブジェクトを破棄する場合は、「Nothing」キーワードを使用します。

 

 問題
 
1) 固有オブジェクト型変数objBook を宣言して、変数にBook2.xlsx を代入しなさい。

2) 固有オブジェクト型変数objRange を宣言して、変数に Book2.xlsx の Sheet1のA1~E4 を代入しなさい。

3) 固有オブジェクト型変数objBook を宣言して、変数に 新規ブック を代入しなさい。

4) A1~C7をコピーして、F3に貼り付けなさい。

5) A1~F5をコピーして、Sheet2のA1に貼り付けなさい。

 

ファイルの操作

・ブックを開く

 ブックを開くには、WorkbooksコレクションのOpenメソッドを使います。

    Sub Sample()
        Workbooks.Open “C:\Work\SI課_売上.xlsx”
    End Sub

 
・ブックを保存する

 アクティブブックに名前を付けて保存するときは、SaveAsというメソッドを使います。

    Sub Sample()
        ActiveWorkbook.SaveAs “C:\Work\2020年_売上.xlsx”
   End Sub

 

 問題
 
1) Book2.xlsxをフルパスで開きなさい。(パスはC:\Work とする)

2) Book2.xlsx を上書き保存しなさい。

3) Book2.xlsx のブック名を「ExcelVBA練習」に変えてカレントフォルダに保存しなさい。

====================================
業務でExcelVBAを使ってツールを作ったり、自動化処理を記述したりする機会がある方もいらっしゃると思います。自身のPCにExcelソフトがあれば、簡単に動かすことができるので、この機会にVBAにも挑戦してみようかなと思っていただければ幸いです。

以上となります。

#edu-IT #名古屋

参考文献:
・大矢『実務に役立つ!ExcelVBA基本テキスト ドリル100問付』Kindle
・田中享『VBAエキスパート公式テキスト ExcelVBAスタンダード』OdysseyCommunications(2019年)

Category: edu-IT, Excel, IT knowledgeBy semi3del2020年11月24日Leave a comment
Share this post
Share with Google+Share with FacebookShare with Twitter

Author: semi3del

Post navigation

PreviousPrevious post:VSCodeでPythonを使うための初期設定をするにはNextNext post:VSCodeでGitを利用する方法~初期設定とGitの基本操作を試してみよう

Related Posts

CodeSandboxでReactのTodoリストを作成してみよう
2025年3月31日
GitHub Actions入門~Cloud9でGitHub ActionsのHelloWorldを実行してみよう
2023年11月28日
Web APIをPythonで使ってみる~Fast APIの基礎
2023年9月25日
FigmaからReactのコード生成するプラグインを使ってUIコンポーネントを作成してみよう
2023年7月4日
CodeSandboxでReactのUIコンポーネントを作成してみよう
2023年5月10日
TypeScriptで「Hit&Blowゲーム(数字当て処理の実装)」を作ってみよう
2023年3月10日

コメントを残す コメントをキャンセル

Your email address will not be published. Required fields are marked *

Post comment

最近の投稿
  • CodeSandboxでReactのTodoリストを作成してみよう
  • Pythonライブラリ「Scrapy」でスクレイピング~Webサイトからデータを取得してみよう
  • CodeSandboxでReactのフォーム部品を操作してみよう
  • はじめてのLambda~関数のサンプルを作ってみよう
  • Canva入門~テンプレートでプレゼン資料を作成してみよう
アーカイブ
  • 2025年3月
  • 2025年1月
  • 2024年11月
  • 2024年9月
  • 2024年8月
  • 2024年6月
  • 2024年4月
  • 2024年1月
  • 2023年11月
  • 2023年9月
  • 2023年7月
  • 2023年5月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年6月
  • 2022年5月
  • 2022年3月
  • 2022年1月
  • 2021年11月
  • 2021年9月
  • 2021年7月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年11月
  • 2020年9月
  • 2020年6月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2017年7月