• ベストアンサー

エクセルのマクロでファイルからデータを取り込みたい

以下のような操作をするマクロを作りたいのですが、やり方を教えていただけるかあるいは文献やURLを紹介していただけないでしょうか? テキストファイルに以下のように変数と数値が並んでます。 A=1.00 B=2.00 C=1.43 変数の数は数十個あります。これをエクセルのファイルに読み込んで AA 1.00  BB 2.00 CC 1.43 などとように指定の場所に数字を記入します。テキストファイルは5個程度あり、全部について行います。読み込む先のエクセルファイルにシート別に記入したいのです。 マクロの経験は、ボタンを押してから再び押して終了するまでの間の操作をマクロ登録する方法で2,3回作ったことがある程度です。今回はファイル操作もあるのでこの方法がつかえません。

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

  • ベストアンサー
  • spnlight
  • ベストアンサー率46% (15/32)
回答No.4

一例です。 テキストファイル名は、シート名+.txtとする(Sheet3.txt等) 内容は、 A1=A列の1行目です B2=B列の2行目です C5=C列の5行目です D6=D列の6行目です E7=E列の7行目です と変数にセル番号が入ってる。(入らない場合は工夫が要ります) マクロ(モジュール)に以下の内容を登録 Sub OpenTextFileTest() Const ForReading = 1, ForWriting = 2, ForAppending = 3 Dim fs, f, Counter1, Counter2, Filename, SheetName Set fs = CreateObject("Scripting.FileSystemObject") FileToOpen = Application.GetOpenFilename("テキスト ファイル (*.txt), *.txt") If FileToOpen <> False Then Counter1 = 0: Counter2 = 0 ' 変数を初期化します。 Do Counter1 = Counter2 + 1 Counter2 = InStr(Counter1, FileToOpen, "\") Loop Until Counter2 < 1 Filename = Mid(FileToOpen, Counter1, 200) SheetName = Mid(Filename, 1, Len(Filename) - 4) Set f = fs.OpenTextFile(FileToOpen, 1, TristateFalse) Do While f.AtEndOfLine <> True s = f.ReadLine arr1 = Split(s, "=") RanG = arr1(0) Worksheets(SheetName).Range(RanG).FormulaR1C1 = arr1(1) Loop f.Close End If End Sub で、どうですか?

noname#121811
質問者

お礼

ありがとうございます。 結果が出てから追加質問等を含めてお礼を書こうと思いましたが、先になりそうなので一旦締め切ります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>マクロ登録する方法で2,3回作ったことがある でしたらマクロの記録 データ 外部データの取り込み 最初のファイルを指定 シート2を選択 データ 外部データの取り込み 次のファイルを指定 と5つのファイルを実行 マクロの記録の終了 で近いマクロが記述できると思います。

noname#121811
質問者

お礼

ありがとうございます。 結果が出てから追加質問等を含めてお礼を書こうと思いましたが、先になりそうなので一旦締め切ります。

全文を見る
すると、全ての回答が全文表示されます。
  • spnlight
  • ベストアンサー率46% (15/32)
回答No.2

AA 1.00とは、A列にA 1.00と入力したいのですか? >テキストファイルは5個程度あり、全部について行います。読み込む先のエクセルファイルにシート別に記入したいのです 5Sheetに分けてと言う意味ですか?

noname#121811
質問者

お礼

AAは私が勝手に作った名前です。テキストファイルのAの値をエクセルシートの指定の場所に読み込みたいのです。他のBもCも同じです。 テキストファイル1はエクセルのシート1に、 テキストファイル2はエクセルのシート2に、 というように5シート作ります。1シート分のマクロが出来ていれば5回同じ操作をするものでもOKです。

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

FileSystemObjectによるテキストファイルの操作法です。VBA本来の、BASICから来ている入出力方法もありますが、こちらの方が馴染みやすい気がします。他にもフォルダーやファイル操作の機能が充実しております。(多量のファイルを取り扱うには遅いとの話もありますが、5個なら問題にならないでしょう)

参考URL:
http://officetanaka.net/excel/vba/filesystemobject/textstream.htm
noname#121811
質問者

お礼

ありがとうございます。 結果が出てから追加質問等を含めてお礼を書こうと思いましたが、先になりそうなので一旦締め切ります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelのマクロを作ってもらえますか?

    こんにちは。 エクセルのマクロで、Sheet1に転々と 入力されているデータを すべてA1の列へ統一して並べ替え(2) 同じデータの数を計算してB2へ記述する(3)などという マクロができるなら作っていただけないでしょうか? もし、数の入った行のみ残して削除までできれば最良なの ですが(4) (2) AA-20 AA-20 AA-20 BB-30 CC-30 CC-30 CC-30 (3) AA-20   3 AA-20 AA-20 BB-30   1 CC-30   3 CC-30 CC-30 (4) AA-20   3 BB-30   1 CC-30   3 このようになのですが、 お時間のあるときで結構ですので宜しくお願いします。

  • エクセルファイルのセル値に特定文字列を追加して別ファイルに

    VB2008でのプログラム方法についての相談です。以下の手順を実現したいです。 (1)エクセルファイルのあるセル中にあるデータを取得 例)A1セルの値"AA"、A2セルの値"BB"、A3セルの値"CC"..... (2)決まりきった特定文字列と(1)の値を結合 例)くっつけたい文字列 " "+AA ⇒ くっつけたい文字列"AA" くっつけたい文字列 " "+BB ⇒ くっつけたい文字列"BB" くっつけたい文字列 " "+CC ⇒ くっつけたい文字列"CC" (3)テキストファイルを生成 ○○○.txt 例) くっつけたい文字列"AA" くっつけたい文字列"BB" くっつけたい文字列"CC"

  • excelのマクロ操作

    excelで以下の操作をマクロを用いて繰り返し行いたいのですがどのようになプログラムにしたらいいでしょうか? テキストファイルをexcelで読み込む            ↓         グラフの作成            ↓           excelの保存

  • エクセルでデータを自動的にコピーする方法を教えてください。

    1、AのエクセルファイルのAAの列に車体番号が入力されている。 2、BのエクセルファイルのBBの列にも車体番号が入力されている。 3、BのエクセルファイルのCCのは登録番号が記入されている。 4、AのファイルのAAの列の車体番号がBファイルのBBの列の車体番号と合致する時、CCの列の登録番号がAのエクセルファイルのDDの列にコピーされる様にしたいです。 こんなこと出来るのでしょうか??

  • アクセスでデータを集計するには

    例として、下記のデータテーブルを受け取りました。 テーブル1 ID 名前 項目 値 01 AA 住所 ○○ 01 AA 電話 ○× 01 AA 月給 ○△円(テキスト) 01 AA 手当 ○□円(テキスト) 02 BB 住所 □□ 02 BB 電話 □× 02 BB 月給 □△円(テキスト) 02 BB 手当 □○円(テキスト) 03 CC 住所 ×☆ 03 CC 電話 ×○ 03 CC 月給 ×△円(テキスト) 03 CC 手当 ×□円(テキスト)  以下続く 上記表を、下記表 テーブル2 ID 名前 住所 電話 月給    手当 01 AA ○○ ○× ○△(数値) ○□(数値) 02 BB □□ □× □△(数値) □○(数値) 03 CC ×☆ ×○ ×△(数値) ×□(数値)  以下続く のように編集された表を新たに作成したいのですが、どのようにしたらよろしいのでしょうか(質問1)。  また、テーブル2から、月給+手当が□△以上の人のIDと名前を抽出できるようにするには、どのような操作が必要なのでしょうか(質問2)。  データはテーブル1の形式で定期的に送られて来た上、データは全てテキスト形式故、テーブル2の形式に再編集したテーブルがあった方がいいと思いました。  アクセスは今まで使ったことがありません。  恐らくご回答の解説が長くなってしまうでしょうから、作り方の概要と流れだけでも構いません。もちろん詳細にご回答賜れば誠に幸いです。  以上、よろしくご回答のほど、お願い申し上げます。

  • Excelファイルからマクロを削除したい

    社内で共有しているExcelのドキュメントがあります。 ある日、そのExcelファイルを開くたびに「~.xls はマクロを含んでいます。」というダイアログが表示されるようになりました。(マクロを無効/有効にする、というボタンがでるものです。) 社内にはマクロが使える程度にExcelに詳しい者がいないので、誰かのご操作によるものなのは間違いありません。 このダイアログが表示されないようにしたいのですが、どのような操作をすればよいのでしょうか? よろしくお願い致します。

  • Excelファイルをマクロでファイルに分割したい

    資産管理のため、次のような作業を行いたいのですが、 勉強が足りず困っております。 あまえた質問で申し訳ないのですが、どうぞお知恵を貸してください。 下のようなExcelファイル(約3000行15列のもの)を 場所 資産番号 資産の種類 使用者 購入日・・・ 本社 123456 AA 東京太郎 2001/4/4 大阪 123457 BB 大阪花子 2003/1/10 福岡 123458 AA 福岡一郎 2005/3/10 京都 123459 CC 京都次郎 2006/8/1        場所ごとに分割して「場所」名のファイルを作成したいと思い、 過去の記事を探して、ここへたどり着きました。 http://okwave.jp/qa/q4361389.html 早速、mitarashiさんのマクロを使用し、ファイルの分割はできたのですが、 3列目までしか記載されておらず(これは当然のことだと思うのですが) どこを変えればいいか、試行錯誤したのですがエラーになってしまいます。 残りの列の値も出力させるには、どうしたらよいでしょうか。

  • Excel ファイル操作マクロ

    Excel で、[ファイル][名前を付けて保存]をマクロで行うようにしました。 新しいファイル名にはマクロで日付記号を付加してあります。 このあと、すぐにもとのファイルを開き、新しくできたファイルを閉じる操作を、マクロで行いたいのですが、どうしたらよいでしょうか。 あるいは、別名コピーという方法はあるのでしょうか。 教えて下さい。よろしくお願いします。

  • テキストデータをバイナリデータに変換したい

    テキストファイルに以下のデータがあるとします。 テキストデータの中身、 「 000E6D4181AA,1234567890ABCDEF 0123456789AB,0100000000000000 050505AAAAAA,0200000000000000 070707BBBBBB,0300000000000000 012345CCCCCC,0400000000000000 cdef01DDDDDD,0500000000000000  ・  ・  ・ 」 12桁の数値(16進数)と16桁の数値(16進数)を「,」で区切ります。1行の終端は改行しています。 このテキストファイルにあるデータを以下のバイナリ形式に変換させたいのです。バイナリ形式の各行の16バイト目は、テキストデータにはデータがないので、「00」とします。「,」で区切ったバイナリ形式は「2C」になると思います。 テキストデータの左上から順に「00」は以下の、左上から順の「00」に対応します。 バイナリデータの中身、 「 00 0E 6D 41 81 AA 2C 12 34 56 78 90 AB CD EF 00 01 23 45 67 89 AB 2C 01 00 00 00 00 00 00 00 00 05 05 05 AA AA AA 2C 02 00 00 00 00 00 00 00 00 07 07 07 BB BB BB 2C 03 00 00 00 00 00 00 00 00 01 23 45 CC CC CC 2C 04 00 00 00 00 00 00 00 00 CD EF 01 DD DD DD 2C 05 00 00 00 00 00 00 00 00  ・  ・  ・ 」 ソースコードでの例、 テキストデータ1行目の1つ目の「,」までのデータ「000E6D4181AA」を、メモリ領域に読み込む。2桁の数値を1バイトで格納する。 つまり、 char buf[6]とすると、 buf[0]=0xAA buf[1]=0x81 buf[2]=0x41 buf[3]=0x6D buf[4]=0x0E buf[5]=0x00 とこのようにメモリに格納したいのです。 格納するバイトオーダーはリトルエンディアン方式とします。 以上で、質問を終わりますが、質問が上手くできていないと思いますので、説明に不備があるかもしれません。その時はお手数ですが、連絡下さい。

  • VBAのパスの取得について

    excelでマクロをVBAで組み、excelが現在置かれているところのパスを取得したのですが たとえばCのaaというファイルのbbところにおいて実行すると変数aに C:\aa\bb を取得することができました。 このパスの最後に\をつけて C:\aa\bb\ にしたいのですがどの書けば変数aに\を追加できるのでしょうか?

専門家に質問してみよう