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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル マクロ テキストファイルを取り込む 複数の区切り文字で別々のセルに格納するには? 3 2022/08/10 21:10
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/07/14 12:49
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
VBAで既に開いている別アプリケ...
-
実行時エラー 3265「要求された...
-
Excelでフィルタをかけると警告...
-
エクセルマクロエラー「'Cells'...
-
エクセルのVBAの標準モジュール...
-
VBAについてです。 初心者です...
-
EXCEL VBA オートシェイプナン...
-
UserForm1.Showでエラーになり...
-
テキストボックス中の文字列の...
-
ある文字列が全て数字であるか...
-
エクセルVBAでFor each文
-
横軸ラベルの追加に関するエラ...
-
メモリ解放について(ASP)
-
VBA (Row とRowsの違いについて)
-
VBで引数にDictionaryオブジェ...
-
PowerPointVBAでスライドマスタ...
-
EDINETの情報をEXCELにダウンロ...
-
VBScriptでExcelのグラフを貼り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
テキストボックス中の文字列の...
-
PowerPointVBAでスライドマスタ...
-
エクセルマクロエラー「'Cells'...
-
VBAからPDFファイルにパスワー...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
ある文字列が全て数字であるか...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBAについてです。 初心者です...
-
VBA:オートシェイプの線の長...
-
VBで引数にDictionaryオブジェ...
-
AccessVBAで「dim dbs as datab...
おすすめ情報