【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
- ヘッダー出力で改行しているがこれは任意。大量のデータを出力する場合などには、コードの可読性を考慮する等して、必要であれば上記の方法で改行が可能。