【VBA】Excelマクロの基本的な使い方

Excel VBAに関する記事になります。
業務で「複数のExcelファイルから所定のデータを取得し、一つのCSVにまとめる。」というマクロが必要になり、対応した経緯があります。
個人的にExcel VBAは初挑戦で基礎的なことも分からず四苦八苦しましたが、そこで得られた内容をまとめます。

セルの値を取得
ThisWorkbook.Sheets("sample").Range("A1").Value

「マクロを実行しているエクセルファイル」の「sampleシート」から「A1セル」の値を取得する。
という命令文になります。

エクセルファイルを開く・閉じる
Dim App As Object
Dim Wkb As Object

Set App = CreateObject("Excel.Application")
Set Wkb = App.Workbooks.Open(Filename:="sample.xlsx", ReadOnly:=True)

※※※ここで任意の処理を実行※※※

exApp.Quit


値の代入
' ----- その①
Dim App As Object
Set App = CreateObject("Excel.Application")

' ----- その②
Dim Rng As String
Rng = ThisWorkbook.Sheets("sample").Range("A1").Value
  • Setを使う場合(①)と使わない場合(②)がある。Setを使うのは「オブジェクト型で宣言した変数に代入する時」。Setを使わないのはそれ以外。
  • 「オブジェクト型」とはプロパティやメソッドを持つもの。「~As Object」だけがオブジェクト型ではない点に注意。

任意の値を検索
' 検索範囲の指定
Set SearchArea = wsCurrent.Range("A1:Z10")

' 部分一致検索
Set SearchObj1 = SearchArea.Find("Samp", LookAt:=xlPart)
' 完全一致検索
Set SearchObj2 = SearchArea.Find("Samp", LookAt:=xlWhole)

検索の結果、該当するデータがない場合、オブジェクトは「Nothing」になる。その状態で操作するとエラーになる為、検索後は以下のようにデータ有無チェックを実施する事をおすすめする。

If Not SearchObj1 Is Nothing Then
 ※Nothing ではない時だけ処理を実行
End If


文字列の置換
Replace("あいうえお", "お", "を")

引数は「元文字列」「置換対象」「置換後文字列」の順番に指定。

CSV出力
' CSVファイル作成
Open "data.csv" For Output As #1

' ヘッダー出力
Print #1, "郵便番号, 住所, 氏名" _
; "年齢, 性別, 電話番号"

' 任意の値を出力
Print #1, "123-4567, 東京都〇〇区, 試験太郎, 30, 男, 03-1234-5678"

Close #1
  • ヘッダー出力で改行しているがこれは任意。大量のデータを出力する場合などには、コードの可読性を考慮する等して、必要であれば上記の方法で改行が可能。