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
ご回答ありがとうございます。
上記コードで問題なく動作確認できました。
で、ちょっと疑問に思ったのは
'A列をタブ区切
xlSheet.Columns("A:A").TextToColumns , Tab:=True
xlSheet.Cells(1, 1).Select
の部分はNo.3でご回答いただいた部分と違う部分で無くても動作したのですが、省略可能と解釈して問題ないのでしょうか・・。
もう少し調査してみます。
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区切り前の表示になっていたので
気持ち悪かったから付け加えただけです。
なるほど!そういうことでしたか!。
使う人の環境がまちまちなのはわかってることですので、この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 から扱う時にどんな命令などがあるのか見てみる。
そんな行動から目的の解決方法が見つかったり、今後使うかもしれない何かを先取りすることが可能になります。
ご回答ありがとうございます。
おっしゃるとおりですね。私はお察しのとおり最近巷で流行のコピペ職人?とも言われる(言われてない?)駆け出し技術者です。。。情けないですが・・・。恥ずかしながら、点を円にする努力はそれなりにしてきたつもりです、しかしながら、その手段や方法が悪いのか、自力でこれらの事を探って解決した経験はほとんどありません。temtecomai2のおっしゃるオブジェクトブラウザも何の為にあるものかも知らないしまつです。どうせわからないからと自分で考えなくなる悪循環スパイラルですね・・・いけないこととは思いつつついついネットに頼ってしまいます。
こういう職人が蔓延る悪い時代ですね・・・。
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
動作確認済みです。
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/y1xatbk …
などです。また、「VB Wordオブジェクト」などで検索してもいくつか文献が引っかかります。VBから見れば、WordもExcelもオブジェクトという面では基本性能は同じですので、同様に検索できるでしょう。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/6/ …
なども参考になるかと。
いろいろ調べて試してみてください。基本的に、ExcelのVBA(マクロ)でできることは、おそらくVB6.0からもできると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
Excelでフィルタをかけると警告...
-
「Columns("A:C")」の列文字を...
-
オブジェクトが見つかりません
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
上下の位置揃えについて
-
VBA:オートシェイプの線の長...
-
PowerPointVBAでスライドマスタ...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
VBAで既に開いている別アプリケ...
-
Shell.ApplicationのNameSpace...
-
ExcelのVBAについて(グラフ操作)
-
VBAからPDFファイルにパスワー...
-
横軸ラベルの追加に関するエラ...
-
VBScriptからDLL参照設定したい
-
【VB】【エクセル操作】 SaveAs...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
EXCEL VBA オートシェイプナン...
-
VBAからPDFファイルにパスワー...
-
エクセルマクロエラー「'Cells'...
-
ある文字列が全て数字であるか...
-
VBAで Set wb = Sheets(1).Cop...
-
AccessVBAで「dim dbs as datab...
-
上下の位置揃えについて
-
Excel VBA Collection.add で R...
-
UserForm1.Showでエラーになり...
-
VBScriptでファイルの日時順(降...
-
テキストボックス中の文字列の...
-
ExcelVBAでのNZ関数について
-
PowerPointVBAでスライドマスタ...
おすすめ情報