- ベストアンサー
vbs データ登録用にcsvを編集
- vbsでcsvを編集する方法について教えてください。
- 氏名をキーにしてメールアドレスを整理する方法について教えてください。
- csvファイルの特定の列を編集するvbsのコードを教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一行目の項目名を忘れていました。 Option Explicit Dim a, cr, cv, f, i, j, k, n, wa, so, x, buf, myDic, d, str, v, v2(10), L Set so = CreateObject("Scripting.FileSystemObject") Set myDic = CreateObject("Scripting.Dictionary") Set wa = WScript.Arguments For i = 0 to wa.Count - 1 If LCase(so.GetExtensionName(wa(i))) = "csv" Then f = so.GetParentFolderName(wa(i)) n = so.GetBaseName(wa(i)) With so.OpenTextFile(wa(i), 1) ' .SkipLine buf = .ReadAll .Close End With buf = Split(buf, vbCrLf) For j = 1 to UBound(buf) a = Split(buf(j), ",") If UBound(a) > 0 Then If Not myDic.Exists(a(0)) Then myDic.Add a(0), Empty For k = 1 to UBound(a) If myDic(a(0)) = "" Then myDic(a(0)) = a(k) Else If a(k) <> "" and InStr(myDic(a(0)), a(k)) = 0 Then myDic(a(0))= myDic(a(0)) & "," & a(k) End if End If NeXt End If Next Set cr = so.OpenTextFile(f & "\" & n & "(Result).csv", 2, True) cr.WriteLine buf(0) For Each d In myDic.keys str = myDic(d) & String(9, ",") v = Split(str, ",") v2(0) = d For L = 1 to 10 v2(L) = v(L-1) Next cr.WriteLine Join(v2, ",") Next cr.Close myDic.RemoveAll End If Next Set cv = Nothing Set cr = Nothing Set wa = Nothing Set so = Nothing Set myDic = Nothing MsgBox("Finished!")
その他の回答 (1)
- watabe007
- ベストアンサー率62% (476/760)
レスがつかないですね Prome_Lin さんのコードを無断使用しました。 お試しください。 Option Explicit Dim a, cr, cv, f, i, j, k, n, wa, so, x, buf, myDic, d, str, v, v2(10), L Set so = CreateObject("Scripting.FileSystemObject") Set myDic = CreateObject("Scripting.Dictionary") Set wa = WScript.Arguments For i = 0 to wa.Count - 1 If LCase(so.GetExtensionName(wa(i))) = "csv" Then f = so.GetParentFolderName(wa(i)) n = so.GetBaseName(wa(i)) With so.OpenTextFile(wa(i), 1) .SkipLine buf = .ReadAll .Close End With buf = Split(buf, vbCrLf) For j = 0 to UBound(buf) a = Split(buf(j), ",") If UBound(a) > 0 Then If Not myDic.Exists(a(0)) Then myDic.Add a(0), Empty For k = 1 to UBound(a) If myDic(a(0)) = "" Then myDic(a(0)) = a(k) Else If a(k) <> "" and InStr(myDic(a(0)), a(k)) = 0 Then myDic(a(0))= myDic(a(0)) & "," & a(k) End if End If NeXt End If Next Set cr = so.OpenTextFile(f & "\" & n & "(Result).csv", 2, True) For Each d In myDic.keys str = myDic(d) & String(9, ",") v = Split(str, ",") v2(0) = d For L = 1 to 10 v2(L) = v(L-1) Next cr.WriteLine Join(v2, ",") Next cr.Close myDic.RemoveAll End If Next Set cv = Nothing Set cr = Nothing Set wa = Nothing Set so = Nothing Set myDic = Nothing MsgBox("Finished!")
お礼
ご回答ありがとうございました。 自身で整理し理解を深めようと思います。
補足
ご回答ありがとうございます。 差し支えなければ、一行一行のコードの説明を加えていただけないでしょうか。 難しいようであれば結構です。