• ベストアンサー

VBからテキストファイル(タブ区切り)をエクセルで開く方法

VBからテキストファイル(タブ区切り)をエクセルで開く方法を探しています。CSVデータを出力する方法や、テキストファイルを読み込む方法等の情報はたくさんあるのですが、直接エクセルを起動し、それにテキストファイルを出力するのはなかなか見当たらない状況です。 質問の主旨は、もともと、参照ボタンを押下すると、選択されている指定のテキストファイルを保存するダイアログが出力される仕組みであったものを、どうせ開くのはエクセルだからと言うユーザーの要望から、参照ボタンクリックと同時にエクセルが起動し指定のテキストファイルをエクセルで開いて見ることができるように改造するといったものです。(参照のみですので読み取り専用で見たい) テキストファイルをドラッグしてエクセルシートに持っていけばタブを認識して格セルに分割して開いてくれるのですが、VBから同じような動作をさせることは可能なのでしょうか? よいヒントになるような情報でもかまいません うまく説明できずわかりにくいかも知れませんがご助言をお願いいたします。 【環境】 WindowsXP、VB6.0、EXCEL2002

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

  • ベストアンサー
回答No.4

SendKeyを使うより直接EXCELオブジェクトを操作するほうがいいです。 こんな感じでしょうでしょうか。 VBの参照設定でEXCELオオブジェクトライブラリを ロードしてやることを忘れずに。 Sub a() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet 'オブジェクトのロード Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Open("D:\tab.csv", , True) Set xlSheet = xlBook.Worksheets(1) 'A列をタブ区切 xlSheet.Columns("A:A").TextToColumns , Tab:=True xlSheet.Cells(1, 1).Select '当該EXCELを画面に表示 xlApp.Visible = True 'オブジェクトの破棄 Set xlBook = Nothing Set xlApp = Nothing End Sub

kodawariha
質問者

お礼

ご回答ありがとうございます。 上記コードで問題なく動作確認できました。 で、ちょっと疑問に思ったのは 'A列をタブ区切 xlSheet.Columns("A:A").TextToColumns , Tab:=True xlSheet.Cells(1, 1).Select の部分はNo.3でご回答いただいた部分と違う部分で無くても動作したのですが、省略可能と解釈して問題ないのでしょうか・・。 もう少し調査してみます。

その他の回答 (5)

回答No.6

#4です。 >'A列をタブ区切 >xlSheet.Columns("A:A").TextToColumns , Tab:=True >xlSheet.Cells(1, 1).Select >の部分はNo.3でご回答いただいた部分と違う部分で無くても動作したのですが、省略可能と解釈して問題ないのでしょうか・・。 上記の部分ですが、TAB区切りで開きたいとの事でしたので、 明示的にTAB区切りを指定しています。 自動でTAB区切りになるかどうかは各PCの設定によりますので。 ちなみに私のPCではなりませんでした。(Excel2000) 2行目でA1をセレクトしているのは、TAB区切りした後で A1列の表示(上部に表示されるセルの値の部分)を再表示させています。 …これも私のPCではなぜかTAB区切り前の表示になっていたので 気持ち悪かったから付け加えただけです。

kodawariha
質問者

お礼

なるほど!そういうことでしたか!。 使う人の環境がまちまちなのはわかってることですので、この2行は絶対必要ですね^^; ご回答本当にありがとうございました。

回答No.5

VB 6.0 から Excel を Com オブジェクトで操作すれば問題ないかと。 Excel への参照設定を行ったうえで Dim xlApp As Excel.Application Dim xlBooks As Excel.Workbooks Dim xlBook As Excel Workbook Set xlApp = New Excel.Application Set xlBooks = xlApp.Workbooks Set xlBook = xlBooks.Open("c:\hoge.txt") xlApp.Visible = True Set xlBook = Nothing Set xlBooks = Nothing Set xlApp = Nothing または、Excel のバージョン変化に何とか対応するには Dim xlApp As Object Dim xlBooks As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBooks = xlApp.Workbooks Set xlBook = xlBooks.Open("c:\hoge.txt") xlApp.Visible = True Set xlBook = Nothing Set xlBooks = Nothing Set xlApp = Nothing てな感じで。 > VBからテキストファイル(タブ区切り)をエクセルで開く方法を探しています。CSVデータを出力する方法や、テキストファイルを読み込む方法等の情報はたくさんあるのですが、直接エクセルを起動し、それにテキストファイルを出力するのはなかなか見当たらない状況です。 ズバリなサンプルを探してしまうのは最初は仕方のない事なのですが、そこから前進するためには、 かつて得たズバリな知識、または今回も Web で調べまくった数々のサンプル。これらを小さな点に例えます。 kodawariha さんの中にはこれら小さな点がいくつもあるはずですので、次はこの小さな点たちの間に空いている空間を埋める努力をし、大きな円になるようにします。(なんのこっちゃって思います?) 空いている空間を埋めるのは「ひらめき」もあるのですが、「すでにある知識の中に出てくる要素から探っていく」という方法が大事です。 今回の目的には合致しなかった無数のサンプルをとりあえず入力してみる。 オブジェクト ブラウザとかで、Excel を VB から扱う時にどんな命令などがあるのか見てみる。 そんな行動から目的の解決方法が見つかったり、今後使うかもしれない何かを先取りすることが可能になります。

kodawariha
質問者

お礼

ご回答ありがとうございます。 おっしゃるとおりですね。私はお察しのとおり最近巷で流行のコピペ職人?とも言われる(言われてない?)駆け出し技術者です。。。情けないですが・・・。恥ずかしながら、点を円にする努力はそれなりにしてきたつもりです、しかしながら、その手段や方法が悪いのか、自力でこれらの事を探って解決した経験はほとんどありません。temtecomai2のおっしゃるオブジェクトブラウザも何の為にあるものかも知らないしまつです。どうせわからないからと自分で考えなくなる悪循環スパイラルですね・・・いけないこととは思いつつついついネットに頼ってしまいます。 こういう職人が蔓延る悪い時代ですね・・・。

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.3

じゃんぬねっと です。 > CSVデータを出力する方法や、テキストファイルを読み込む方法等 > の情報はたくさんあるのですが、 > 直接エクセルを起動し、それにテキストファイルを出力するのは > なかなか見当たらない状況です。 そうでしょうか? CSV でも TSV でも、'形式さえ正しければ' Excel から開くことはできますので、同じように可能だと思います。 たとえば、以下のような方法があります。 まず、プロジェクトの参照設定に 'Microsoft Excel xx.x Object Library' を追加します。 (Excel 2002 であれば、'Microsoft Excel 10.0 Object Library' のハズ) 次に以下のようなテストソースを書きます。 Dim xlApplication As Excel.Application Set xlApplication = New Excel.Application Dim xlWorkbooks As Excel.Workbooks Set xlWorkbooks = xlApplication.Workbooks Call xlWorkbooks.Open("C:\Hoge.txt") Set xlWorkbooks = Nothing xlApplication.Visible = True Set xlApplication = Nothing 動作確認済みです。

kodawariha
質問者

お礼

ご回答ありがとうございます。 上記コードで実行できました。 ありがとうございました。

noname#25230
noname#25230
回答No.2

手元に開発環境が無く、最近はVB.NET 2003ばかりつかっているので正確ではないかもしれませんが、Excel自体が、オブジェクトとして単独で存在し得るのではないでしょうか? 現在の仕事で、VB.NETから「Wordオブジェクト」を生成し、Wordを起動、指定されたWordファイルを開いて内部を編集、保存して印刷して、なんてのを一通りやってます。実は、VB.NETだといろいろと面倒がありまして、本来はVB6.0などでやるための手順を応用してやっていますので、VB6.0からも同様のことができるはずです。 内容は.NET向けですが、マイクロソフトにもいくつか文献はあります。 http://msdn2.microsoft.com/ja-JP/library/y1xatbkd.aspx などです。また、「VB Wordオブジェクト」などで検索してもいくつか文献が引っかかります。VBから見れば、WordもExcelもオブジェクトという面では基本性能は同じですので、同様に検索できるでしょう。 http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/6/vbacc/vbacc.html なども参考になるかと。 いろいろ調べて試してみてください。基本的に、ExcelのVBA(マクロ)でできることは、おそらくVB6.0からもできると思います。

kodawariha
質問者

お礼

ご回答感謝します。 ありがとうございました。 参考にさせていただきます。

  • cla_kk
  • ベストアンサー率33% (12/36)
回答No.1

他プログラムを起動させる・・・shell関数 他プログラムをアクティブにする・・・AppActivateステートメント 他プログラムをリモート操作・・・・・sendKeysステートメント 私がVB5でこれらのものを使用したことがあります。 VB6にあるかどうかわかりませんが、これで事が足りるのであれば、 似たようなものはあるのではないでしょうか。

kodawariha
質問者

お礼

ご回答ありがとうございます。 起動したエクセルをリモート操作まではする必要なさそうですが これらをキーワードに調べさせていただきます。

関連するQ&A