• ベストアンサー

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