【エクセル】CSVを定義情報シートに従い配置するマクロ
仕事でテストを担当しました。その際、CSVが正しく出力されているか、を確認するためエクセルを作成しました。改造して色々使えそうなのでブログにメモしておきます。
エクセルBOOKイメージ
CSV.sheet、Definition.sheet、output.sheetを用意してください。以下の通りです。
【CSV.sheet】CSVを貼り付けるsheet(編集元情報)
【output.sheet】CSVを要素毎に貼り付け結果sheet(編集後情報)
【Definition.sheet】貼り付ける位置を定義するsheet(定義情報)
上からCSVの要素順に従い貼り付け位置の定義をしています。上記イメージでは、CSVの2要素目は4行目に貼り付けることを意図しています。
エクセルマクロ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
Sub Macro1() Dim i As Long Dim kekka As String Const max_get_ro = 50 'CSV取込最大行の設定 'CSV取得ループ For i = 1 To max_get_ro Sheets("CSV").Select Debug.Print i Debug.Print Cells(i, 1) If Cells(i, 1) = "" Then Exit For Else 'CSVデータ配置 / 1行のCSV、現在処理行 kekka = SetCsvData(Cells(i, 1), i) End If Next i End Sub 'CSVデータ配置 Function SetCsvData(arg1 As String, arg2 As Long) Dim hai_csv As Variant 'CSV行の要素を配列化 hai_csv = Split(arg1, ",") Dim i As Long 'CSV行の配列の処理 For i = LBound(hai_csv) To UBound(hai_csv) Dim hai_teigi As Variant Sheets("Definition").Select '定義取得(0:行/1:列) / 1行のCSVの処理中の要素番号 hai_teigi = Split(GetTeigi(i), ",") Sheets("output").Select Debug.Print hai_teigi(0) 'CSV行の配列の要素の貼り付け(行:定義の通り、列:CSV行数) Cells(CInt(hai_teigi(0)), arg2).Value = hai_csv(i) Next i End Function '定義取得 Function GetTeigi(arg1 As Long) '定義情報(行)を取得、(行、列情報取得に変更可能) GetTeigi = Cells(arg1 + 1, 1) & "," & "" End Function |
コーディングの良し悪しは、意見あると思いますが、マクロの記録機能を使って作成した様なわかりやすさと明確な機能単位分けを心がけました。Definition.sheetの貼り付け位置(行)定義に従い、output.sheetの配置していきます。列はCSVの行数としています。
このサンプルでは、定義情報に列の定義のみ設定していますが、カンマにより他の情報も付加できます。例(列,行)を設定すると、hai_teigiの要素番号(0,1)を指定することで、それぞれの値を取得できます。これを Cells(CInt(hai_teigi(0)), arg2).Value = hai_csv(i) に変更を反映することで、例えば、CSVの1要素毎に定義された行、列に設定することも可能です。色々、いじってみてください。
それでは!