Vba でcsvの列を削除する記述を教えてください。 “,”区切りのcsvファイルで、ファイル名はyyyymmdd日録.csvです。 当日の日付&日録です。

Vba でcsvの列を削除する記述を教えてください。 “,”区切りのcsvファイルで、ファイル名はyyyymmdd日録.csvです。 当日の日付&日録です。 Vba実行ファイルと同じフォルダにあります。 削除したい列は、 E,AS,BR,BS列を削除し、左列に詰めたいです。 宜しくお願い致します。

Visual Basic | Excel35閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

「VBScript」による回答ですので、「Windows限定」です。 以下のプログラムは、プログラムファイルの存在するフォルダ内に「Sample.csv」という、これから処理するファイルが存在し、「Result.csv」という結果ファイルを同じフォルダ内に作成します。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します(保存する際は、必ず、「文字コード」を「Shift-JIS(ANSI)」で保存してください)。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。 できたプログラムファイル(「~.vbs」ファイル)を、これから処理したい「csv」ファイルが存在するフォルダに放り込み、名前を「Sample.csv」から質問者の実際のファイル名に変更してから、実行してください。 実行の仕方は、プログラムファイルをダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 ★★★注意事項★★★ 処理する「csv」ファイルは、すべての行で、「71」列より多くなければなりません。 3行目「r = Array(5, 45, 70, 71)」が削除する列を指定している部分です(残念ながら、「何列目」という「数値」で指定しなければなりません)。 この削除する列が増えたり減ったりしても、プログラムの他の部分を変更する必要はありません。 今は、これから処理する「csv」ファイルの文字コードが、「Shift-JIS」であることを前提にしていますが、「UTF-8(BOM付き)」や「Unicode(=UTF-16LE(BOM付き))」にも、3行目の「m = "Shift-JIS" '"UTF-8" "Unicode"」の部分を変更するだけで対応できます。 すなわち、今は「m = "Shift-JIS"」ですが、「UTF-8」なら、ここを「m = "UTF-8"」に、また、「UTF-16LE(BOM付き)」なら「m = "Unicode"」に変更するだけです。 Option Explicit Dim a, ai, ao, c, f, m, i, j, r, so, x, z r = Array(5, 45, 70, 71) m = "Shift-JIS" '"UTF-8" "Unicode" Set so = CreateObject("Scripting.FileSystemObject") f = so.GetParentFolderName(WScript.ScriptFullName) Set ai = CreateObject("ADODB.Stream") ai.Type = 2 ai.Charset = m ai.Open ai.LoadFromFile f & "\Sample.csv" Set ao = CreateObject("ADODB.Stream") ao.Type = 2 ao.Charset = m ao.Open Do Until ai.EOS x = ai.ReadText(-2) a = Split(x, ",") c = - 1 For i = 0 to UBound(a) z = 0 For j = 0 to UBound(r) If i = r(j) - 1 Then z = 1 Exit For End If Next If z = 0 Then c = c + 1 ReDim Preserve n(c) n(c) = a(i) End If Next ao.WriteText Join(n, ","), 1 Erase n Loop ao.SaveToFile f & "\Result.csv", 2 ai.Close ao.Close Set ai = Nothing Set ao = Nothing Set so = Nothing MsgBox("Finished!") 説明が必要でしたら、言ってください。

ご連絡ありがとうございます。 私のやり方が間違っているかもしれません。 ファイルを実行すると、 行11 文字1 ファイルを開けませんでした。 800A0BBA ADODB.Stream と、エラーが表示されてしまいます。 どのようにすればよいでしょうか? テキスト内に、“,”とは別に“”が含まれていることが関係しますでしょうか?

ThanksImg質問者からのお礼コメント

ありがちうございました

お礼日時:9/28 9:02

その他の回答(1件)

1

Sub sample() With Workbooks.Open(ThisWorkbook.Path & "\" & Format(Date, "yyyymmdd") & "日録.csv") ActiveSheet.Range("E:E,AS:AS,BR:BS").Delete .Close savechanges:=True End With End Sub

1人がナイス!しています