
かなり、困っております・・・。
「c:\csv_data」に複数の連番csvデータ(file_01.csv,file_02.csv,....)が入っており、
csvファイル内に含まれている"AAA"を"AAA_"+ファイル番号に変換させたいです。(下記の例を参考にして下さい。)
例:file_01.csv→AAAをAAA_01、file_02.csv→AAAをAAA_02、・・・・・
(フォルダ内の全てのcsvを変換させたいです)
一度作ってみたんですが、Excel-VBAでCSVファイルを開いて編集をかけると書式が失われてしまう為、だめでした・・・。
そこで
・Excel-VBAでの良い方法
・BATファイルで拡張子csv⇒txtに開いてからの編集⇒csvへ
といった2つの方法(どちらか)がであれば作業工程上、他の処理と同時に
自動化できることからこの2つの方法での文字列変換方法を知りたいです。
どうかよろしくお願いいたします。

No.4ベストアンサー
- 回答日時:
VBAです。
以下のマクロを標準モジュールに登録してください。-------------------------------------------
Option Explicit
Public Sub CSV文字列変換()
Const folder As String = "c:\csv_data"
Dim fname As String
Dim ctr As Long
ctr = 0
fname = Dir(folder & "\" & "file_??.csv", vbNormal)
Do While fname <> ""
ctr = ctr + 1
If CSV_replace(folder, fname) = False Then Exit Sub
fname = Dir()
Loop
MsgBox (ctr & "件のファイルを処理しました")
End Sub
Private Function CSV_replace(ByVal folder As String, ByVal fname As String)
Const target As String = "AAA"
Dim inPath As String
Dim outPath As String
Dim inline As String
Dim outline As String
Dim swd As String
Dim twd As String
CSV_replace = False
swd = """" & target & ""","
twd = """" & target & Mid(fname, 5, 3) & ""","
inPath = folder & "\" & fname
outPath = folder & "\" & "temp_csv.txt"
Open inPath For Input As #1
Open outPath For Output As #2
Do Until EOF(1)
Line Input #1, inline
If Left(inline, Len(swd)) = swd Then
outline = twd & Mid(inline, Len(swd) + 1, Len(inline))
Else
outline = inline
End If
Print #2, outline
Loop
Close #2
Close #1
Kill inPath
Name outPath As inPath
CSV_replace = True
End Function
-------------------------------------------
対象となるファイル名は
file_XX.csv です。(XXは任意の2文字です)
file01.csv,abc_01.csv等は本処理の対象外です。
No.3
- 回答日時:
こんばんは。
この質問というのは、どうもやらExcelは、直接関係ないようですね。
>Excel-VBAでCSVファイルを開いて編集をかけると書式が失われてしまう為、だめでした・・・。
Excel VBAがあるから、Excel VBAを使うというだけの話ですよね。同じような質問が最近もありましたが、その人は、Excelファイルを、VBSで処理するというリクエストでした。これは、単に、VBAを利用するだけなのですが、環境的にはずいぶん差があるものです。
'//'標準モジュール
Public mPATH As String
Sub ExchangeWordsInCsv()
Dim serch_txt As String
Dim Fname As String
Dim cnt As Long
serch_txt = "AAA"
mPATH = "C:\Users\Test2\"
If Right$(mPATH, 1) <> "\" Then mPATH = mPATH & "\"
Fname = Dir(mPATH & "*.csv")
Do While Fname <> ""
If Fname <> "." And Fname <> ".." Then
If (GetAttr(mPATH & Fname) And vbNormal) = vbNormal Then
If InStr(Fname, "_") > 0 Then
Call ReproduceCSV(Fname, serch_txt)
cnt = cnt + 1
End If
End If
End If
Fname = Dir
Loop
If cnt > 0 Then
MsgBox cnt & "個処理しました", vbInformation
End If
End Sub
Sub ReproduceCSV(ByVal Fname As String, serchWd As String)
Dim inFNo As Integer
Dim exFNo As Integer
Dim exFName As String
Dim i As Long, n
Dim strLine As String
Dim arbuf, buf
Dim sBrnc As String
Dim strFlg As Boolean
sBrnc = Replace(Mid(Fname, InStrRev(Fname, "_")), ".csv", "", 1, 1, 0)
exFName = "$" & Fname
inFNo = FreeFile()
Open mPATH & Fname For Input As #inFNo
exFNo = FreeFile()
Open mPATH & exFName For Output As #exFNo
Do While Not EOF(inFNo)
Line Input #inFNo, strLine
arbuf = Split(strLine, ",")
For Each n In arbuf
If StrComp(serchWd, n, 0) = 0 Or StrComp("""" & serchWd & """", n, 0) = 0 Then
If buf = "" Then
buf = Replace(n, serchWd, serchWd & sBrnc)
Else
buf = buf & "," & Replace(n, serchWd, serchWd & sBrnc)
End If
Else
If buf = "" Then
buf = n
Else
buf = buf & "," & n
End If
End If
Next
Print #exFNo, buf
buf = ""
Erase arbuf
Loop
Close #inFNo
Close #exFNo
Kill mPATH & Fname '元のファイルを削除
Name mPATH & exFName As mPATH & Fname '名前の変更
End Sub
'//
処理前と処理後の結果 (仮名:entring605データb_AB.csv)
WinMerge 使用


No.2
- 回答日時:
補足要求です。
1)データは、どのように格納されてますか。
① "11","AAA","bbb"
② 11,AAA,bbb
①でしょうか、それとも②でしょうか?
2)AAAがあるのは、どの列ですか。それとも、いろいろな列にAAAがありますか。
3)念の為、確認ですが
file_01.csvに AAABBBというデータがあったとき、
AAA_01BBBに置き換える必要はないですね。
No.1
- 回答日時:
「書式が失われてしまう」とはどういう事でしょうか?
元々CSVファイルは書式など持っていないはずですが?
もしかしたら「"AAA"」のように前後に有った「"」が無くなってしまうという事でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像生成AIのプロンプトの作り...
-
vba クリップボードクリアにつ...
-
Python... 環境設定 初心者です...
-
AIの登場でプログラマーたちが...
-
初心者powershellのPS1ファイル...
-
Geminiフォーム 画像生成で 人...
-
pythonの実行に関する質問
-
python3について。
-
iOSゲームアプリが作りたいと思...
-
Python 3.12.2 か一番最新のパ...
-
Google ColaboでGUI作成
-
数学、プログラミング、物理、...
-
pip --versionがエラーになる
-
OS入ってる機器のソフト・アプ...
-
パイソンのソースコードをChatG...
-
CSVファイルの複数行削除
-
pythonについて(初心者です)
-
MOVEコマンドでサブフォルダー...
-
プログラミング言語のバージョ...
-
AIがプログラムする時代のプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロ 空白セルを無視し...
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
【ExcelVBA】300万件越えCSVか...
-
ファイル名を変数で書きこむfwr...
-
VBAで複数のCSVからレコードセ...
-
CSVで余計な空行が入る
-
複数のファイルをまたぐエクセ...
-
VB.netでShellExecuteがしたい
-
LibreOffice Calcのマクロで、...
-
【C#】 csvファイルをバイナリ...
-
pythonでリストをCSVに出力する...
-
EXCEL→CSV保存時のダブルクォー...
-
PYthon Django csv関連
-
pythonについて質問です。 csv...
-
マクロで使うfor文
-
プログラムの間違いについて
-
Pythonのコードエラーについて...
-
Rubyを使用してcsvファイルを処...
-
CSVデータの文字列置換
おすすめ情報
GooUserラックさん、お問い合わせありがとうございます。
質問のけんですが、他の物が消えてしまって、AAA_01のみになってしまいます。
よろしくお願いいたしますm(_ _)m
tatsu99様、お問い合わせありがとうございます。
1)① "11","AAA","bbb"になります。
2)エクセルでいうところのA列、先頭列に各行に存在します。
3)そのようなことはありません。
どうかよろしくお願いいたしますm(_ _)m