#VBSでCSVを編集する方法について
VBS初心者です。
業務でVBSの作成が必要なため、手探り状態でコードを書いております。
一部、処理が上手くいかずに行き詰っているところがあるため、
以下の内容について、知識がある方にご教授いただければと思っております。
実現したいこと
csvをテキスト形式で開き、17列あるリストの15列目・16列目に新しく2列を挿入したい。
挿入した列の1行目のみ、15列目に文字列"レンタル"を入れ、16列目に文字列"プラン名"を挿入、
2行目以降は15列目16列目には文字列を入力せず空白(列追加のみの状態)にしたい。
この処理をVBSにて実行したい。
CSVの状態
・元のcsvの状態
|列1|列2|列3|列4|列5|列6|列7|列8|列9|列10|列11|列12|列13|列14|列15|列16|列17|
| あ | い| う| え | お| か | き | く | け | こ | さ | し | す | せ | そ | た | ち |
| : | : | : | : | : | : | : | : | : | : | : | : | : | : | : | : |
| : | : | : | : | : | : | : | : | : | : | : | : | : | : | : | : |
| : | : | : | : | : | : | : | : | : | : | : | : | : | : | : | : |
:
:
・実現したい列挿入後のcsvの状態
|列1|列2|列3|列4|列5|列6|列7|列8|列9|列10|列11|列12|列13|列14| 列15 | 列16 |列17|列18|列19|
| あ| い | う| え | お| か| き | く | け | こ | さ | し | す | せ |レンタル|プラン名| そ | た | ち |
| : | : | : | :| : | : |: | : | : | : | : | : | : | :| | | : | : | : |
| : | : | : | :| : | : |: | : | : | : | : | : | : | :| | | : | : | : |
| : | : | : | :| : | : |: | : | : | : | : | : | : | :| | | : | : | : |
:
:
以下のソースコードでできていること
・1行目の列15,16にそれぞれ、文字列"レンタル"、"プラン名"を挿入してCSVを出力。
以下のソースコードでできないこと
・2行目以降にも列追加(空白のまま)をしたいが、できていない。
・多次元配列にして2行目以降にも列挿入し、2行目以降は空白を挿入する分岐処理を行うことが必要かと思っているが、配列に関する知識も乏しく、方法が分からない。
試したこと(ソースコード)
コードの表示(インライン)
VBScript
1コードの表示(ブロック) 2Option Explicit 3 4Dim objFile 5Dim strLine 6Dim strLineSplited 7Dim j 8Dim k 9Dim i 10Dim data 11Dim objwriteFile 12Dim objwriteFso 13Dim inputcsv 14Dim outputcsv 15 16'列を追加する位置と、文字列を定義 17 18'追加位置①(インデックス) 19Const add1 = 14 20 21'追加位置②(インデックス) 22Const add2 = 15 23 24'追加文字列① 25Const rental_Prace = "レンタル" 26 27'追加文字列② 28Const plan_Name = "プラン名" 29 30 31'格納ファイルの文字コードを指定 32Set inputcsv = CreateObject("ADODB.Stream") 33inputcsv.Type = 2 34inputcsv.Charset = "shift_jis" 35inputcsv.Open 36 37'出力ファイルの文字コードを指定 38'Set outputcsv = CreateObject("ADODB.Stream") 39'outputcsv.Type = 2 40'outputcsv.Charset = "shift_jis" 41'outputcsv.Open 42 43'ファイルシステムオブジェクト定義 44 Dim objFSO 45 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") 46'フォルダパス 47 Dim objPath 48 Const strFolder = "C:\temp\test" 49 If objFSO.FolderExists(strFolder) = False Then 50 Set inputcsv = Nothing 51 WScript.Quit 52 End If 53 Set objPath = objFSO.GetFolder(strFolder & "\") 54 55For Each objFile In objPath.Files 56 Dim FileName 57 FileName = objFile.Name 58 59 If InStr(FileName, "番号") > 0 Then 60 '文字列の中に"16"の文字が無いcsvで以下の処理が行われます。 61 If InStr(FileName, "(16)") = 0 Then 62 63 inputcsv.LoadFromFile objPath & "\" & FileName 64 65 j = 1 66 67 Do Until inputcsv.EOS 68 '1行ずつ読み取り、strLineに格納 69 70 strLine = inputcsv.ReadText(-1) 71 WScript.Echo strLine 72 strLineSplited = Split(strLine, ",") 73 74 '配列を一つ増やす 75 ReDim Preserve strLineSplited(UBound(strLineSplited) + 2) 76 77 '配列末尾から追加位置まで順番に置換① 78 For i = UBound(strLineSplited) To ADDprace + 1 Step -1 79 strLineSplited(i) = strLineSplited(i - 1) 80 Next 81 82 '配列末尾から追加位置まで順番に置換② 83 For i = UBound(strLineSplited) To add_planname + 1 Step -1 84 strLineSplited(i) = strLineSplited(i - 1) 85 Next 86 87 '指定位置を置換① 88 strLineSplited(add1) = rental_Prace 89 90 '指定位置を置換② 91 strLineSplited(add2) = plan_Name 92 93 j=ubound(strLineSplited) 94 95 if j<>-1 then 96 for k=0 to j 97 data = data & strLineSplited(k) & "," 98 next 99 End If 100 101 '出力ファイルの文字コードを指定 102 Set outputcsv = CreateObject("ADODB.Stream") 103 outputcsv.Type = 2 104 outputcsv.Charset = "shift_jis" 105 outputcsv.Open 106 outputcsv.WriteText data, 1 107 108 109 Loop 110 '出力ファイルを、格納ファイルと同じファイル名で保存 111 outputcsv.SaveToFile "C:\temp\test\test1.csv", 2 112 113 End If 114 End If 115 116Next 117 118inputcsv.Close 119outputcsv.Close 120 121Set objFSO = Nothing 122Set inputcsv = Nothing 123Set outputcsv = Nothing 124 125 126 127
ご教授いただきたいこと
上記のソースコードに、どのようなコードを追加すれば処理が実現できますでしょうか。
お知恵のある方いらっしゃいましたら、ご教授いただけると幸いです。
よろしくお願いいたしますm(__)m
回答3件
あなたの回答
tips
プレビュー