• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:csvデータの番号付加について。)

csvデータの番号付加について

このQ&Aのポイント
  • csvデータの内容を番号付きの新しい列に変換する方法についてアドバイスをお願いします
  • 元のデータには5つの配列があり、指定された特定の配列のみを使用して、タブ区切りのcsvデータを作成します
  • まだ配列の宣言をしていないため、新しい配列を宣言してcsvデータを作成する方法についてアドバイスをお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.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

yairi1106
質問者

お礼

コードのご提示ありがとうございます。率直にいうと解決しました。区切りをカウントすればいいんですね。助かりました。エクセル上や、アクセス上でも、検証していたのですが、ファイル数が多いと作業効率が悪かったり、フィールドやレコード数が多いと、機能しなかったりで困ってました。今回はどうもありがとうございました。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

>例えば、タブ区切りの配列が元データで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)
回答No.1

「配列」という、用語の使用法に違和感を持った。 それで、質問で何を求めているか、理解に迷う。 例えば、「https://www.pc-master.jp/sousa/csv.html の「列・項目のことをフィールド、行のことをレコードといいます」のフォールド の意味で、項目やフィールドというほうが、よいのでは。 ーーー データが完成後に、(オフラインバッチ処置)、番号データをデータの新フィールドにくわえるのなら、(使えるVBAコードも、すでにできているのだから)質問するまでもないようにおもうが。 ーー 普通は別項目に基づいて(例えば、店別付番を班別附番も加える場合など) 各項目別にソートし直して、附番プログラムを使えばできるのでは。 その際、FSOにはソートユテリティ、ステートメント・コマンド?がなかったと思うので、どうするか。 一旦エクセルシートを使うか。  こういうのは、小生の勘違いだろうか。 === もしこの状態で、適当な回答が出なければ、質問の趣旨を説明してみてほしい。

関連するQ&A