• ベストアンサー

Excelデータとテキストデータの読み出し・ソートについて

Cドライブに入っているテキストデータAとExcelデータBをそれぞれ読み出し(どちらも内容はひらがなとカタカナで構成された文字で20行程度)その2つのデータを昇順ソート(あいうえお順)して、そのつなげた40行の内容をCドライブ内の別のテキストデータCに表示させるという事をしたいのですが、テキストデータCにはAの20行の文字のあとに文字化けしたデータが1行だけ表示される状態で詰まってしまいました。 Const CNT = 100 eod = 0 i = 0 iarrycount = CNT ReDim iarry(iarrycount) RF(リードファイルの略として)="C:\aaa\テキストデータA.txt" RF2(リードファイル2の略として)="C:\aaa\テキストデータB.xls" WF(ライトファイルの略として)="C:\aaa\テキストデータC.txt" Open RF For Input As #1 Do While Not EOF(1) Line Input #1. x i = i + 1 iarry(i)=x Loop Close 1 Set ExlObject = CreateObject("Excel.Application") ExlObject.Workbooks.Open FileName: = RF2 ExlObject.Visible = True Open RF2 For Input As #1 Input #1. x If x="" Then eod=1 Else i = i + 1 iarry(i)=x End If Loop Close 1 iarrycount=i For j=1 To iarrycount -1 For i=1 To iarrycount -1 If iarry(i) > iarry(i+1) Then S=iarry(i) iarry(i)=iarry(i+1) iarry(i+1)=S End If Next i Next j Open WF For Output As #1 For i=1 To iarrycount Print #1,iarry(i) Next i Close 1 このような感じで作っています。Excelデータの方は空白になったら読み込み終了ということで、If x="" Then   eod=1を使っているのですが、これが悪いのでしょうか?

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

>Open RF2 For Input As #1 RF2はExcelのBookファイルですよね。 読み込み方が違うのではないでしょうか。 ANo.3さんの紹介されたサイトをよく見てみると、csvとxlsを同時に扱ってますが、 Set exl = CreateObject("Excel.Application") exl.Application.Visible = True exl.Application.Workbooks.Open FileName:=fnm For j = 1 To 65536 If exl.Cells(j, 1) = "" Then Exit For ~以下がxlsからの読み込み方になると思います。

jericowall
質問者

お礼

Set ExlObject ~ をセットしたのに、Openコマンドがあるために余計な事をしてうまくいかなかったんですね。無事解決しました。ありがとうございます。

その他の回答 (4)

  • id357
  • ベストアンサー率29% (39/133)
回答No.5

ANo.3です。 ANo.4さんの補足説明の通りです。 オブジェクト定義したxlsデータに対して シーケンシャル用のOpen命令を発行したら、それは、 まともに動作しないです。 このOpen命令が邪魔しています。 (つまり、この行は必要ないということです)  

jericowall
質問者

お礼

Openコマンドが不要だったんですね。わかりやすい補足、ありがとうございます。

  • id357
  • ベストアンサー率29% (39/133)
回答No.3

たしかに >Open RF2 For Input As #1 これは無理でしょう。 セルデータとして読込む必要があります。 こちらを参考にしてみては? http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t16.htm

jericowall
質問者

補足

Open RF2 For Input As #1 のあとにDo While eod = 0 抜けていました。失礼しました。それはさておき、早速リンク先を見ました。ちょっと難しいですが参考になりました。ありがとうございます。 Open RF2 For Input As #1 Len = 32000  If ExlObject.Cells(x, 1) = "" Then   eod = 1 に変更し、再度実行してみましたが、型が一致しないというエラーが出て、xには文字化けした文字が入ってきています。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

http://hanatyan.sakura.ne.jp/ まずはこちらを一読されてみては?

jericowall
質問者

お礼

前回はお世話になりました。このリンク先は宣言文から載っているので、初心者にもわかりやすい内容で、これから困ったときは参考にします。

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

> Set ExlObject = CreateObject("Excel.Application") > ExlObject.Workbooks.Open FileName: = RF2 > ExlObject.Visible = True > Open RF2 For Input As #1 EXCELのファイル(拡張子xls)のファイルをシーケンシャルリードするつもり? バイナリファイルですので、読み方を間違えています。

関連するQ&A

  • データの読み出しと書き込み

    初めて質問します。最近独学でVBを勉強中ですが、VB6.0でCドライブ内にあるテキストデータA(10行程度で1行あたり8文字前後のひらがな)を読み込み、それを昇順(あいうえお順)に並べ替え、テキストデータBにその並べ替えたデータを反映させたいのです。現在、 RF(リードファイルの略として)="C:\aaa\テキストデータA.txt" Open RF For Input As #1 Do While Not EOF(1) Line Input #1. x y = y + x Loop Close 1 これで、yには10行のひらがなデータをつなげた1行のデータが入っていたのですが、そのあとのソートプログラムへのつなげ方や、もう1度OpenさせてテキストデータBに反映させてCloseするまでがわからなく困っています。よろしくお願いします。

  • GetOpenFilenameを使用し、複数行のデータを抽出について

    エクセルVBA初心者です。 いろいろ調べましたが、うまくいかずご教授頂ければとお聞きします。 よろしくお願いします。 テキストファイル10万行からなるデータが入っています。 「aaa」と文字列を検索し、その下10行を抽出したいのです。 Sub 抽出() fname = Application.GetOpenFilename(FileFilter:="(*.*),[*.*]", Title:="data?", MultiSelect:=False) if fname For Input As #1 Do Line input as #1 If InStr(data, "aaa") > 0 Then For i = 1 To 10 Cells(i, 1).Value = data Next End If Loop Until EOF(1) Close #1 End Sub

  • ファイルからのデータ読み出しについて

    VC++6.0 MFC  以下のような形式でファイルに保存されているデータの読み出し方法について、C++Builderで書かれているた め良く判りません。 各行が具体的に何をしているのか教えください 分かるところはコメントを入れておきました <ファイル形式> パンダ,904,527,0,2//付箋紙の絵,左位置,TOP位置,状態フラグ,コメント行数  ←1枚目データー 7/7       //コメント1行目 秋葉原。メモリ初期不良交換 //コメント2行目  ←付箋紙1枚目のデータの終わり ひぐ,153,826,0,3            //←付箋紙2枚目のデータ デスクトップメモの改良: フォントの調整 コードの整理 <読み出しコード> //========================================================= (3) // メモデータをロードする。 SetCurrentDir(ExtractFilePath(Application->ExeName));//解説不要です if (!FileExists(MemoFileName)) return;//解説不要です input->LoadFromFile(MemoFileName);//解説不要です // 各行を順番に読んでいく for (lineNum=0; lineNum<input->Count; lineNum++) {  //Countがファイルの全行? s=input->Strings[lineNum]; // 新しいメモを作成 memo=NewMemo(); // タブ絵柄名、位置、 // メモのアクティブ状態、テキストの行数 // を順番に読み込む t=GetToken(s); for (i=0; i<TabList->Count; i++) {  //このCountは何? if (((TTab*)TabList->Items[i])->Name==t) break;  //if文の真は何? } if (i==TabList->Count) memo->TabIndex=0;  //分かりません? #行数オーバーのためここで中断

  • エクセルでテキストデータを読み込むときに、カンマの扱い

    エクセルVBAで、 open "**.txt" for input as #1 で読み込ませています。1行のデータとして、セルに入力したいのですが、カンマが入っているとそこで区切られてしまいます。これをしないようにしたいのですが、テキストファイルのデータに全角のカンマ,を使っても同じようになってしまいます。何か方法はありませんでしょうか?

  • エクセルから外部テキストの置換をしたいです

    お時間があるかた、どうぞご教授下さい>< ================================ Dim FT As String Open "C:\1.txt" For Input As #1 Open "C:\2.txt" For Output As #2 Do While Not EOF(1) Line Input #1, FT FT = Replace(FT, ">", "\n") Print #2, FT Loop Close #1 Close #2 ================================ というマクロをエクセルで書いたのですが、テキスト上では>が\nに変換されているだけです。 テキストのほうで、ある文字(今回は>)を『改行』するにはどうしたらいいのでしょうか? エクセルのマクロから出来るようにしたいのです。 よろしくお願い致します。

  • エクセルでのシート間のデータの移動について

    前回の質問ではこのような回答をしてもらいました。 ------------------------- Sub test() 'TXTファイル読み込みダイアログボックス Dim FileToOpen As String FileToOpen = Application.GetOpenFilename("テキストファイル (*.txt), *.txt") Dim myVal As String Dim x As Integer Dim y As Integer y = 1 '1列目から Open FileToOpen For Input As #1 ' シーケンシャル入力モードで開きます。 Do While Not EOF(1) ' ファイルの終端までループを繰り返します。 x = x + 1 Input #1, myVal Cells(x, y) = myVal If x Mod 20 = 0 Then'20行置きに y = y + 1 '列をずらす x = 1 '行をクリア End If Loop Close #1 ' ファイルを閉じます。 End Sub ------------------------- 今度はこのマクロを利用して同じファイル内のシートAAAにA1からA100までそれがC列まであるとします。 このデータをシートBBBに20行ずつ移したいのです。 わかる方がいましたら教えてください。 よろしくお願いします。

  • ExcelVBAで扱うテキストファイルデータ

    MSOffice2003のExcelVBAでテキストファイル(文字コードはUTF-8)内の全角文字データを入力し、そのまま更新しないで、別ファイル名で出力したら、文字化け(ANSI化)した。どうすればUTF-8のまま出力できますか? 「(フ)」(X'EFBBBFEFBC88E38395EFBC89')がX'8145BF814588E3839581458145'に化けます。 テキストファイルはCreateObject("Scripting.FileSystemObject")を定義して、 入力は、Open F_in For Input As #1でOPENし、Line Input #1, I_bufで入力し、 出力は、Open F_out For Output As #2でOPENし、Print #2, I_bufと出力した。

  • テキストファイルを一行づつとる方法

    テキストファイルを一行だけとる方法は以下のとおりかと思いますが、最後の列まで一行づつとる場合はどうすればいいのでしょうか?教えて頂ければ幸いです。 Open "c:\data.txt" For Input As #1 Line Input #1, str Close #1

  • VBで複数のテキストを結合するときの問題

    教えてください!お願いします。 VB6を使って、複数のテキストファイル(~.txtで保存しているもの)を 一つずつ読み込んで、それらを結合して1つのファイルにして リッチテキストボックスに表示する、というツールを作成しています。 一応うまく出来たのですが、ただ、結合した時にそれぞれのテキストの 間にどうしても1行ブランクが入ってしまうんです。 このブランク行を削除して、結合したファイルの継ぎ目がきれいに 続いて表示されるようにする方法はありますでしょうか? ブランク行を全て削除してしまうのではなく、ファイルとファイルの 間に挿入されてしまうブランク行だけをなくしたいのです。 ちなみに Open App.Path & "\" & List1.List(List1.ListIndex) For Input As #FileNum Do Until EOF(FileNum) Line Input #FileNum, ddd gggg = gggg & ddd & vbCrLf Loop Close #FileNum このようにリストに載っているテキストファイルを全部読み込んで、 If Dir(書き出すテキストファイル) = "" Then Open 書き出すテキストファイル For Output As #FileNum Print #FileNum, gggg Close #FileNum Else Open 書き出すテキストファイル For Append As #FileNum Print #FileNum, gggg Close #FileNum End If 書き出すファイルが存在しなければそのまま保存し、書き出すファイルが あれば、そのファイルに追記するというコードにしています。

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

    いつもお世話になります。 環境は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で閉じないのはなぜですか? 初めてテキストファイルを操作するのでよくわかりません。 よろしくお願いします。

専門家に質問してみよう