VBA-読み込んだテキストファイルを並び替えて書き出す方法

このQ&Aのポイント
  • VBAを使用してテキストファイルを読み込み、項目を並び替えて書き出す方法を教えてください。
  • 具体的には、読み込んだテキストファイルの各行に含まれる項目をタブ区切りで分割し、それぞれの項目を並び替えてから書き出す方法を知りたいです。
  • 例えば、読み込んだテキストファイルの行には「にんじん」「りんご」「ねこ」が含まれており、それらの項目を「りんご」「ねこ」「にんじん」という順番で書き出したいです。
回答を見る
  • ベストアンサー

VBA-読み込んだテキストファイルを並び替えて書き出したい

VBA-読み込んだテキストファイルを並び替えて書き出したい ch1=FreeFile Open A for Input as ch1 ch2=FreeFile Open B for Input as ch2 DO while Not EOF(ch1) Line Input #ch1,buf Print #ch2,buf Loop Close #ch1,#ch2 で読み込み、書き出すことはできました。 やりたいことは、書き出す時に、項目を並べ替えたいのです。 例 にんじん りんご ねこ だいこん バナナ いぬ ↓ りんご ねこ にんじん バナナ いぬ だいこん よろしくお願いいたします。 区切りはタブです。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1です。 例示のコードは、配列内容を完全に入れ替えますので、ご希望の順に調整してください。 forループの部分です。

ajisaika
質問者

お礼

ありがとうございます。 無事できました!! 並び変えの最後、「範囲がない」といわれ、 んっ?とちょっとあせったのですが、 配列は0からということを思い出しました(;一_一) 本当にありがとうございました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

1)文字型配列を2個宣言する 2)文字型配列の個数を格納する変数を2個宣言する 3)Split関数で区切り文字にvbTab or Chr(9)を指定して、読み取った文字列を分解し配列1で受け取る。 4)文字型配列を反転させる(配列1を配列2に) 5)join関数で区切り文字にvbTab or Chr(9)を指定して、反転させた配列を書き出し用文字列に連結する 6)書き出し用文字列を出力する dim strArray1() as string dim strArray2() as string dim nArray1 as long dim nArray2 as long dim i as long DO while Not EOF(ch1)  Line Input #ch1,buf  ’バッファをタブで区切って配列1に格納する  strArray1()=Split(buf, vbTab)  ’バッファをタブで区切った配列1の件数を取得する  nArrey1=Ubound(strArray1()) '反転用配列を用意するので同じことを繰り返す  ’バッファをタブで区切って配列2に格納する  Array2()=Split(buf, vbTab)  ’バッファをタブで区切った配列2の件数を取得する  nArrey2=Ubound(strArray2())  '配列1を逆転させて配列2に格納する  for i = 0 to nArrey1   Array2(i) = Array1(nArray - i) next i  ’配列2をタブで連結してバッファに格納する  buf = join(strArray2(), vbTab)  Print #ch2,buf Loop

関連するQ&A

  • VBAフォルダ内ファイル入出力について

    Accessで特定のフォルダ内にあるcsvファイルを全て読み込み、別のcsvファイルへ 出力するという処理を作りたいのですが、最近からVBAを始めたばかりで どうすればよいか分かりません。 とりあえず、特定のファイルをひとつ読み込み、別ファイルへ出力することはできました。 Option Compare Database Private Sub Button_Click() Dim No As Integer Dim buf No = FreeFile Open "C:\test1.csv" For Input As #1 Open "C:\test2.csv" For Output As #2 Do Until EOF(No) Line Input #1, buf Print #2, buf Loop MsgBox "処理終了" Close #1 Close #2 End Sub 読み込み対象を「特定のフォルダ内のファイル全て」 にする方法が知りたいです。 ちなみに出力先のファイルはひとつにまとめてもそれぞれ別のファイルに 出力でもどちらでも構いません。 できれば両方教えていただければ有難いです。 宜しくお願いします。

  • VBAでテキストをユーザーフォームに表示

    Office2007を使っています。 テキストデータからユーザーフォームにデータを表示させたいのですがうまくいきません。 インターネットを見てまねしたのですが添削をお願いします。 Private Sub UserForm_Initialize() Call Farst End Sub Sub test() Open "C:\Address\test.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf TextBox1.Text = buf TextBox2.Text = buf TextBox3.Text = buf Loop Close #1 End Sub

  • テキストファイルの閉じ方について

    いつもお世話になります。 環境はXPを使用しています。 VBAでセルに設定してあるハイパーリンクを開くと テキストファイルが開くようにしてあります。 このテキストファイルを閉じようとするのですが、 閉じません。 ちなみにソースは以下の通りです。 intFileNum = FreeFile Open strFileName For Input As intFileNum i = 1 Do While Not EOF(intFileNum) Input #intFileNum, TextLine Cells(i, 1) = TextLine i = i + 1 Loop Close #intFileNum 最後のCloseで閉じないのはなぜですか? 初めてテキストファイルを操作するのでよくわかりません。 よろしくお願いします。

  • VBAでCSVファイルを読み込もうとしていますが、

    VBAでCSVファイルを読み込もうとしていますが、 「ファイルが見つかりません」とエラーが表示されます。 どのように対処していいのかわかりません。 教えてくください。 Sub readCsv() Dim csvFile As String Dim ch As Integer Dim csvStr As String Dim str() As String Dim i As Integer Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) targetFolder = oFolder.Items.Item.Path Set fso = CreateObject("Scripting.FileSystemObject") Set fileList = fso.GetFolder(targetFolder).Files For Each file In fileList csvFile = file.Name ch = FreeFile Open csvFile For Input As #ch i = 1 Do While Not EOF(1) Line Input #ch, csvStr Close #ch str = Split(csvStr, ",") Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str i = i + 1 Loop Next End Sub

  • Excel2003でテキストのデータをセルに代入

    初めまして。 私はWindowsXPのExcel2003のVBAでテキストファイル のデータ(カンマ区切り)を指定したセル行に代入 したいと思っているのですが上手くいきません。 下記のコードを実行したところ、 Dim n As Long, buf As Variant, tmp As String Dim lrow As Long lrow = 14 n = FreeFile Open "C:\TEKISEI.txt" For Input As #n fname = "C:\TEKISEI.txt" Do Until EOF(n) Input #n, tmp lrow = lrow + 1 buf = Split(tmp, ",") Worksheets("Sheet1").Range("B14:B30") = buf Loop Close #n 指定したセル行(B14:B30)にテキストファイル (中身はカンマ区切りの数字の羅列)のデータの 最後の数字がセル行に入ってしまいます。 このコードでセル列(B14:P14)ならセルごとに 順に数字が代入されましたが、これをセル行に代入 したいと思っています。 どこが悪いのか皆様にご教授願います。

  • エクセルにてテキストファイル読み込みでエラー  

    いつもお世話になっております。 テキストファイル (test.txt)をエクセルマクロにてセルへの読み込みを したいのですが、なぜか エラーになります。 Cells(n, 1) = buf  でエラーのようです。 理由がわかりません。 教えてもらえないでしょうか 普通の文章なら読み込みできるのですが =  を使っているとエラーがでるようです。 test.txtの画像を添付します。 エクセルのマクロの内容は次の通り Sub テキストファイルをセルに転記() Dim buf As String, n As Long Open "C:\Users\a\Desktop\test.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf n = n + 1 Cells(n, 1) = buf Loop Close #1 End Sub

  • エクセルに二つのテキストファイルをインポートしたい

    エクセルのsheet1の1行目にタイトルがあります。 ボタンのクリックイベントで、テキストファイル2つをインポートしたいのですが。 ・テキストファイルの名前は、固定ではありません ・テキストファイルの保存先は、デスクトップで、ファイルの選択は自分でしたい ・テキストファイルの一行目は、タイトル行なので、二行目以降をインポートしたい 行数は固定ではありません ・タブ区切りです 複数選択はできなく、1ファイルでタイトル行も含めるのであれば下記コードできたのですが。 どなたか、ご教示いただけますでしょうか・・・・ よろしくお願いいたします。 ----------------------------------------------------- Sub ReadTextFile() 'タブ区切りファイルを全て文字列として読み込む Dim FileName As String Dim i As Long Dim Cnt As Long Dim Buf As Variant Dim FileNo As Integer Dim SplitString As Variant 'ファイルダイアログを表示 FileName = Application.GetOpenFilename("テキストファイル,*.txt") If FileName <> "False" Then '全セル選択して書式を文字列にセットする Cells.Select Selection.NumberFormatLocal = "@" Cells(1, 6).Select '空いているファイル番号を取得 FileNo = FreeFile() Buf = Space(FileLen(FileName)) 'ファイルを開いてbufに1行読み込み ' → タブで配列に分割 ' → セルに書き出し Open FileName For Input As #FileNo Do Until EOF(FileNo) Line Input #FileNo, Buf Cnt = Cnt + 1 SplitString = Split(Buf, vbTab) For i = 0 To UBound(SplitString) Cells(Cnt, i + 1) = SplitString(i) Next i Loop Close #FileNo Else End If End Sub -----------------------------------------------------

  • VBA 文字数の判定

    テキストファイルを1行ずつ読み取り、 100文字を超えている行のみ、新しいテキストファイルまたはexcel行に書き込んでいくという バッチを作成したいと思います。 以下でテキストファイルを1行ずつ読み取ることはできました。 1行ずつ読み取った行に対して、文字数以上の判定の方法を教えてください。 また100文字以上の場合は、別ファイルに書き込んでいく構文も教えていただけますか。 Sub test() Dim buf As String, n As Long Open "パス\a.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf n = n + 1 Cells(n, 1) = buf Loop Close #1 End Sub

  • テキストファイルへの書き込み

    gstrMyFileにファイルへのパスが入っているとして、以下を実行すると 今あるファイルへ追記されてしまいます。 今ある行を削除をして新たにbuf()のデータを記入したいのですが、できますか? fileNo = FreeFile Open gstrMyFile For Append As #fileNo For i = 0 To 50 Print #fileNo, buf(i) Next i Close #fileNo

  • リストボックスの内容を テキストファイルに出力

    エクセル vba初心者です。 (1)ini fileからデータを取得 (2)その内容のリストボックスに表示 (3)リストボックス内容をテキストボックスに出力 (2)、(3)がわかりません。 なんとなくやってたら余計にわからなくなりました。助けてください。 Private Sub CommandButton1_Click() '読込み(1)を押した時の処理 Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    ListBox1.Clear   Open "C:\filepath.ini" For Input As #n Do While Not EOF(n) Line Input #n, listbox ListBox1.AddItem listbox Loop Close #n End Sub Private Sub CommandButton2_Click() '書込み(1)を押した時の処理  Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    Open "c:\example.txt" For Output As #n Print #n, strL_Data Close #n End Sub よろしくお願いいたします。

専門家に質問してみよう