• ベストアンサー

テキストへの保存方法

N個(毎回変動します)のテキストファイルがあります。 その中に360行2列のデータがあります。 このN個のテキストを1つのテキストファイルにまとめて、 360行(2×N)列のデータにして保存したいです。 '------------------保存するプログラム------------------------- SaveName = Dir2.Path & "\" & Nam & ".txt" Open SaveName For Output As #1 For i Write #1, V1(1,i),VRMS(1,i),V1(2,i)・・・V1(N,i),VRMS(N,i)  next i Close #1 '-------------------------------------- 上のプログラムの4行目 Write #1, V1(1,i),VRMS(1,i),V1(2,i)・・・V1(N,i),VRMS(N,i)  ですが毎回変動するため何列になるかわかりません。 行の場合でしたらFor NEXTを使えばよいと思うのですが、 横に増えてい場合どのようにすればよいのでしょうか? VB6で作成しています。 アドバイスよろしくおねがいします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Forループを2重にまわせば良いように思いますよ ' Read用のファイル番号用の配列 dim nFiles(255) as integer for nn = 1 to N   ' Read用ファイルのOpen   nFiles(nn) = FreeFile   open "InputName"& nn as input as nFiles(nn) next OutFn = FreeFile open saveName for output as OutFn for i = 01 to 360   for j = 1 to N     Input #nFiles(nn), v1, vrms     if j <> N then       write #OutFn, v1, vrms,     else       write #OutFn,v1, vrms     end if   next next Close OutFn ' Openしたファイルの後始末 for i = 1 to N   Close nFiles(i) next といった具合です

kuragekunn
質問者

お礼

プログラムを組むことができました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#140971
noname#140971
回答No.4

ANo2と実質的には同じです。 <Test.txt> 101,1010 102,1020 201,2010 202,2020 このように交互に書き出すサンプルコードです。 Private Sub Command1_Click()   Dim I    As Integer   Dim J    As Integer   Dim N    As Integer   Dim M    As Integer   Dim L    As Integer   Dim V(1, 1) As String   Dim W(1, 1) As String   Dim strText As String     V(0, 0) = "101"   V(0, 1) = "102"   V(1, 0) = "201"   V(1, 1) = "202"   W(0, 0) = "1010"   W(0, 1) = "1020"   W(1, 0) = "2010"   W(1, 1) = "2020"     N = UBound(V(), 1)   M = UBound(V(), 2)   For I = 0 To N     For J = 0 To M       strText = strText & V(I, J) & "," & W(I, J) & vbCrLf     Next J   Next I   FileWrite "C:\temp\test.txt", strText End Sub 一つのテキストファイル情報を作成してからファイルに書き出しています。 Public Function FileWrite(ByVal FileName As String, _              ByVal Text As String) As Boolean On Error GoTo Err_FileWrite   Dim fso As FileSystemObject   Dim txs As TextStream      Set fso = New FileSystemObject   Set txs = fso.CreateTextFile(FileName, True)   txs.Write Text   FileWrite = True Exit_FileWrite:   Exit Function Err_FileWrite:   MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"   Resume Exit_FileWrite End Function

kuragekunn
質問者

お礼

回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

項目(フィールド)セパレータ文字で、Split関数で分離する。 バリアント配列(s)に入るから、Ubound(s)で項目数はつかめる。 上記コードはInput #1,aも書いてないが(もうすこし丁寧に), s=Split(a,",") for j=0 to Ubound(s) XX=s(j) Next j Write # は便利なのだが、上記配列と相性は良くない。 Sub test03() a = Array("aaa", 12345, "ccc") nam = "test01A" MsgBox CurDir SaveName = CurDir & "\" & nam & ".txt" Open SaveName For Output As #1 For i = 1 To 2 For j = 0 To UBound(a) Write #1, a(j); Next j Write #1, Next i Close #1 End Sub メモ帳で確認すると "aaa",12345,"ccc", "aaa",12345,"ccc", のように終わりにカンマが着く。これで辛抱できれば良いが。 ーー Write #1, a(j); Write #1, が使えそうなことを認識した。 ーー 最悪Print #で書き出すため、カンマなどのセパレターで区切った文字列の編集を、別途しなければならない。 文字列か数値か判断 文字列の場合には””で囲む 項目区切りセパレータを入れて連結する やり方にも夜が多分最終のカンマを削る 書き出す文字列の完成

kuragekunn
質問者

お礼

こういった方法があるなんて まったく思いつきませんでした。 参考になりましたありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

write ぢゃなくて print を使う print #1,変数; の様に最後に ;(セミコロン)をつけると改行されない ただし、writeと違って文字列を""で囲んでくれなかったり、区切りのカンマは自分で出力する必要あり

kuragekunn
質問者

お礼

参考になりました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル2003のVBAで列を指定

    エクセルで特定の列の2~10行目に対して、ある作業をする場合、列を指定する方法は以下のどれがいいでしょうか?あるいはもっといい方法があれば教えてください。 実際には列は約40列(固定)、行は1~2万行(変動)程度で、作業はもっと複雑です。 Sub test01() Dim col Dim i As Long, n As Long For Each col In Array(1, 3, 7, 8, 11) '列番号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test02() Dim col Dim i As Long, n As Long For Each col In Array("A", "C", "G", "H", "K") '列の記号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test03() Dim col Dim i As Long, n As Long For Each col In Range("A2,C2,G2,H2,K2") 'セルで指定 For i = 2 To 10 n = n + 1 col.Offset(i - 2).Value = n Next i Next col End Sub

  • さっきのバイナリ→テクスト

    FP1 = FreeFile Open Text1.Text For Binary As #FP1 FP2 = FreeFile Open Text3.Text For Output As #FP2 Do While (Not (EOF(FP1))) For i = 1 To 128 Get #FP1, , Bwk(i) Next i flg = 0 If j(1) <> "" Then Swk = Right("00" & Trim(Hex(Bwk(1))), 2) & Right("00" & Trim(Hex(Bwk(2))), 2) For i = 1 To 5 If j(i) <> "" Then If j(i) = Swk Then flg = 1 Exit For End If End If Next i Else flg = 1 End If If flg = 1 Then Swk = "" For i = 1 To 128 Swk = Swk & Right("00" & Trim(Hex(Bwk(i))), 2) Next i Print #FP2, Swk End If Loop Close MsgBox "完了" End Sub 上のプログラムでどこで変換してるのかがわからないんです。誰か教えてください。

  • 0が消える:WRITEを使ってTEXT出力

    ワークシートの一部をカンマ区切りのテキストとして出力しようとしています。ワークシートには文字列と数値が混在しています。文字列は"文字列"としてする必要があります。数値はそのまま出力します。 ワークシート上で文字列あらかじめ""を付加しておくと、CSV保存の際に、""文字列""となるので、CSV形式は断念しました。 そこでVBAでWRITEを使い、 Dim i, j As Integer i = 2 j = 1 For i = 2 To 5 Write #1, Worksheets("diff").Cells(i, j).Value, Worksheets("diff").Cells(i, j + 1).Value, Worksheets("diff").Cells(i, j + 2).Value, Next i Close #1 といった感じで挑戦しています。ところが、セルの値が1より小さい数値、つまり0から始まる場合には、始めの0が消えてしまいます。  セルの値 0.****  出力された値 .**** 「それが仕様だよ」と言う場合には、何か良い方法を教えていただけると幸いです。

  • 新規テキストファイルを作成して日付名で保存したい。

    すみません誰か、教えて下さい。 新規でテキストファイルを作成して、日付名で保存を しようとしたのですが、ファイル名が不正とのエラーが出ます。 どうすればいいか、教えて頂けませんでしょうか。 また、保存先の指定方法も分かりません。保存先の指定方法も あわせて教えて頂けませんでしょうか。 宜しくお願いします。 Sub 保存() Dim myFileNo As Integer Dim i As Long Dim myLastRow As Long Dim IMA As String IMA = Now & ".txt" Worksheets("内容").Activate myLastRow = Range("A1").CurrentRegion.Rows.Count myFileNo = FreeFile Open IMA For Output As myFileNo For i = 1 To myLastRow Write #myFileNo, Cells(i, 3) Next i Close #myFileNo End Sub

  • 列数の多いエクセルのデータをテキストファイル(スペース区切り)に変換するにはどうしたらいいでしょうか

    列数の多い(200列くらい)エクセルのファイルをテキストファイル(スペース区切り)1行に保存したいのですがどのようにしたらいいのでしょうか. エクセルを普通にテキスト形式で保存すると200列 1行で保存されず,適当に折り返して3行くらいになってしまいます. 例えば 2行200列をテキストにすると 1行目 1~100列 2行目 1~100列 1行目 101~200列 2行目 101~200列   と4行になってしまいます.これを 1行目 1~200列 2行目 1~200列   のようにしたいのですが可能でしょうか.

  • VBAで「,」⇒「.」へ置換後、タグ区切りでテキスト保存したい。

    VBAで「,」⇒「.」へ置換後、タグ区切りでテキスト保存したい。 お世話になっております。 VBAで下記を行いたいと考えております。 全体の流れとしては、テキストを読み込み⇒エクセル上で編集⇒テキスト保存です。 そのエクセル上で編集⇒テキスト保存で悩んでおります。 編集した複数のシートを、個別にタブ区切りのテキストファイルに保存したいと考えております。 出力する際に、小数点の「,」⇒「.」に変換します。 ※小数点を「,」として利用しています(海外対応) 編集するシートは全てのセルが文字列形式になっており、列も行も読み込むテキストによって可変なので、統一されているわけではありません。 最終行はA列ではなくB列でカウントします。 全てのセルに値が入っているわけではなく、空白もあります。 また、各セルには「0.00000」や「02.24」等の数値も入っており、数値形式にしてしまうと0が消えてしまうので、全てのセルを文字列形式として編集しています。 なお、小数点以下の桁数も可変です。 つまり、小数点が「,」となっているのを「.」になおし、タブ区切りのテキストファイルとして保存したいのです。 出力する際に、いったん別ブックに保存⇒不要なシートを削除⇒タブ区切りで保存はできたのですが、自分があまりVBAに詳しくないせいか、これでは文字列形式で保存されなかったため、シートを新規ブックにコピー⇒タグ区切りで保存に変更しました。 しかし、これではcells.replace ~で置換すると、「00,000」が「0」になってしまいました。 ※「22,222」等は問題ないのですが……何故かは分かりませんでした。 ファイルとしては20000万行~25000行程度です。 列としては40列前後になります。 あまりVBAには詳しくないので、まとはずれな事を言っているかもしれません。 何か良い方法はありますでしょうか? 宜しくお願いいたします。

  • 改行のない長いテキストをアクセスへ保存する方法

    開発環境VB2008を使用しております。Multilineが有効となっているTextBoxに入力された長い文章をアクセスのテーブルへ保存するロジックがわかりません・・・。今までは、1行ごとに入力制限を設けていたので、行単位でフィールドサイズ255以下のテキストデータを保存していたのですが、文章編集の際に、ワードのように連続してるほうが使いやすいとの事から、入力方法を変更しようと思っております。 文字列を255単位で切り出して、保存していく具体的なやり方をご教授願います。

  • VBAでtextファイルを作成

    マクロ・VBA初心者です。 ご教授お願いします!! 経費精算のExcelデータを画像のような「"",]で区切ったテキストファイルを作成するマクロを作りたいと考えてます。 完成イメージ:マクロのボタンを押すとテキストファイルの形でフォルダに作成される。もしくは、マクロボタンを押すとテキストファイルの形で区切ったものが表示されるものを作りたいです。 *経費精算データに関してA列からX列まであり、集計データにより列にデータを埋めていく作業が入っております。なので、A列からX1列まででデータが記入されている範囲で集計できるようにしたいと考えております。 現在は、勉強しつつ組み立てた結果、 CSVのExcelファイルをフォルダの中に作成できるようになりました。 (コードは下記に記載します) ただ、テキストファイルが作れるコードができていないのが問題です。 このコードをどのように変えればよいのか? もしくは、別のコードで出来るようならば教えていただけると嬉しく思います。 宜しくお願いします。 ______________________________ 〈コード〉 Option Explicit Sub ExcelファイルCSV形式作成() '変数宣言 Dim filePath As String Dim i As Long Dim maxRow As Long Dim fileNo As Integer '初期値設定 filePath = ActiveWorkbook.Path & "\経費計算エクセル(CSV保存).csv" maxRow = Range("A1").End(xlDown).Row '最終行取得 fileNo = FreeFile 'FreeFile関数で使用可能なファイル番号取得 'ファイル開く Open filePath For Output As #fileNo '最終行までループ For i = 1 To maxRow '列の数は決め打ち Write #fileNo, Cells(i, 1), Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 5), Cells(i, 6); Cells(i, 7), Cells(i, 8), Cells(i, 9); Cells(i, 10), Cells(i, 11), Cells(i, 12); Cells(i, 13), Cells(i, 14), Cells(i, 15); Cells(i, 16), Cells(i, 17), Cells(i, 18); Cells(i, 19), Cells(i, 20), Cells(i, 21); Cells(i, 22), Cells(i, 23), Cells(i, 24) Next i 'ファイル閉じる Close #fileNo End Sub ______________________________________ 以上です。 本当に困ってます。よろしくお願します。

  • マクロの行列の掛け算ができません

    エクセルでマクロ勉強中の初心者です。 マクロで行列A(3行4列)、行列B(4行2列)の掛け算のプログラム(下記)を作っているのですが 「インデックスが有効範囲にありません」というエラーメッセージが出てしまいます。 エクセルで関数(MMULT)で同様の計算をするときちんと計算できるのですが・・・。 どなたか教えてください。 よろしくお願いいたします。 Sub s1() ' 次元の設定 Dim A(3, 4), B(4, 2), C(3, 2) N1 = 3: N2 = 4: N3 = 3 ' データの入力 (行列AとBの設定) For I = 1 To N1: For J = 1 To N2 A(I, J) = Worksheets("s1").Cells(I, J) Next J: Next I For I = 1 To N2: For J = 1 To N3 B(I, J) = Worksheets("s1").Cells(I, J + 5) Next J: Next I ' ベクトルの内積 For I = 1 To N1 For J = 1 To N3 For K = 1 To N2 C(I, J) = C(I, J) + A(I, K) * B(K, J) Next K Next J Next I ' 結果の出力 For I = 1 To N1 For J = 1 To N3 Worksheets("s1").Cells(I + 6, J + 7) = C(I, J) Next J Next I End Sub

  • エクセル 全通り出力

    Sub test01() a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得 b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得 For i = 1 To a '1行からA列最終行まで繰り返し For n = 1 To b '1行からB列最終行まで繰り返し x = x + 1 Cells(x, "C") = Cells(i, "A") & " " & Cells(n, "B") 'C列に結合して転記 Next n Next i End Sub こちら過去の解答にあったのですが、a,b,c,dに数字が入っていて、 Eに組み合わせを出力する場合どう変えればよいのでしょうか?

このQ&Aのポイント
  • 質問内容:クラウドに登録してフリーのサウンドパックをUSBにダウンロードしたのですが、ae30にインポート出来ません。「not file」になってしまいます。USBの初期化とfat32のフォーマットは済んでいます。パラメータガイドを見ても分からないので教えてください。
  • 質問されている内容は、ae30にクラウドからダウンロードしたサウンドパックをインポートできない問題です。USBの初期化とfat32のフォーマットは済んでいるそうですが、「not file」となってしまいます。パラメータガイドを確認しても解決策が見つからないため、アドバイスを求めています。
  • 質問内容:ae30にクラウドからダウンロードしたサウンドパックをインポートする際に問題が発生しています。「not file」となり、解決方法がわからず困っています。USBの初期化とfat32のフォーマットは済んでいます。パラメータガイドを確認しましたが、解決策が見つからず、助言をいただきたいです。
回答を見る