- ベストアンサー
csvデータの番号付加について
- csvデータの内容を番号付きの新しい列に変換する方法についてアドバイスをお願いします
- 元のデータには5つの配列があり、指定された特定の配列のみを使用して、タブ区切りのcsvデータを作成します
- まだ配列の宣言をしていないため、新しい配列を宣言してcsvデータを作成する方法についてアドバイスをお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2 HohoPapaです。 追記します。 タブ区切りのテキストファイルで、拡張子がcsvなんですね? また、無駄なコードがあるので、直してみました。 Sub sample() Dim buf As String Dim tmp As Variant Dim ColCnt As Long Dim ChkData As Variant Dim n As Long Dim m As Long Dim l As Long 'Lineカウンター '変数の初期設定 n = 0 m = 0 l = 0 ChkData = "" Open "C:\test\Getdata.csv" For Input As #1 Open "C:\test\Putdata.csv" For Output As #2 Do If EOF(1) Then Exit Do Line Input #1, buf l = l + 1 tmp = Split(buf, vbTab) '列数算出 If l = 1 Then ColCnt = UBound(tmp) End If If ChkData = tmp(ColCnt) Then m = m + 1 Else m = 1 n = n + 1 End If Print #2, buf & vbTab & Format(n, "00000") & "-" & m ChkData = tmp(ColCnt) Loop Close #1 Close #2 End Sub
その他の回答 (2)
- HohoPapa
- ベストアンサー率65% (455/693)
>例えば、タブ区切りの配列が元データで5つあり >配列5番目だけを指定し、例題のようにcsvを作成したい タブ区切りのテキストファイルがある。 このレコードの最終列をもとに 00001-1 の形式で、連番を付し、 これを最終列の後にに追加する。 ということでいいでしょうか? 一方、 Printで書き出すことのできるファイルなら OpenAsTextStreamを使う必要はなく、 Line Inputでいいだろうと思います。 この仕様でよければ、 後記コードはいかがでしょうか? Option Explicit Sub sample() Dim buf As String Dim tmp As Variant Dim PutLine As String Dim ColCnt As Long Dim i As Long Dim ChkData As Variant Dim n As Long Dim m As Long Dim l As Long 'Lineカウンター '変数の初期設定 n = 0 m = 0 l = 0 ChkData = "" Open "C:\test\Getdata.txt" For Input As #1 Open "C:\test\Putdata.txt" For Output As #2 Do If EOF(1) Then Exit Do Line Input #1, buf l = l + 1 tmp = Split(buf, vbTab) '列数算出 If l = 1 Then ColCnt = UBound(tmp) End If If ChkData = tmp(ColCnt) Then m = m + 1 Else m = 1 n = n + 1 End If PutLine = "" For i = 0 To ColCnt PutLine = PutLine & tmp(i) & vbTab Next i PutLine = PutLine & Format(n, "00000") & "-" & m ChkData = tmp(ColCnt) Print #2, PutLine _ Loop Close #1 Close #2 End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
「配列」という、用語の使用法に違和感を持った。 それで、質問で何を求めているか、理解に迷う。 例えば、「https://www.pc-master.jp/sousa/csv.html の「列・項目のことをフィールド、行のことをレコードといいます」のフォールド の意味で、項目やフィールドというほうが、よいのでは。 ーーー データが完成後に、(オフラインバッチ処置)、番号データをデータの新フィールドにくわえるのなら、(使えるVBAコードも、すでにできているのだから)質問するまでもないようにおもうが。 ーー 普通は別項目に基づいて(例えば、店別付番を班別附番も加える場合など) 各項目別にソートし直して、附番プログラムを使えばできるのでは。 その際、FSOにはソートユテリティ、ステートメント・コマンド?がなかったと思うので、どうするか。 一旦エクセルシートを使うか。 こういうのは、小生の勘違いだろうか。 === もしこの状態で、適当な回答が出なければ、質問の趣旨を説明してみてほしい。
お礼
コードのご提示ありがとうございます。率直にいうと解決しました。区切りをカウントすればいいんですね。助かりました。エクセル上や、アクセス上でも、検証していたのですが、ファイル数が多いと作業効率が悪かったり、フィールドやレコード数が多いと、機能しなかったりで困ってました。今回はどうもありがとうございました。