• 締切済み

テキストファイル読み込みにおける開始行および開始列指定

最近VBAを始めた者です。 コンマ区切りのテキストファイルの内容をシート上に読み込むプログラムを 書きたいのですが、テキストファイル内に不要な部分があるため、必要な部分のみ 抜き出して読み込みたいと考えています。 具体的なテキストの内容は以下の通りです。 AAA,BBB,CCC,DDD EEE,FFF,GGG,HHH 111,222,333,444 111,222,333,444 111,222,333,444  ・  ・  ・  ・  ・  ・  ・  ・ 行数は特に決まっていませんが1000行程度です。 アルファベットは文字列、数字は数値データです。 このうちの222にあたる列のみを読み取りたいのですが、そのための 読み取り開始行、および開始列の指定方法がわかりません。 クエリを用いた方法でできないことはなかったのですが、クエリテーブルに 残るデータは必要なく、後で消す必要が出てくるためクエリを用いない方法を探しています。 使用ソフトはExcel2007です。 宜しくお願いします。

みんなの回答

  • a987654
  • ベストアンサー率26% (112/415)
回答No.5

NO1です。 >しかしこの方法では、あらかじめ用意しておいた・・・・ 前回のに続けて 3.A列を選択(領域選択でもよい) 4.右クリックでコピー 5.貼り付けたいブックのシートの列(3.で領域の場合はセル)を選択 6.値指定で貼り付け 7.csvファイルを取り込んだブックを保存せずに終了 8.マクロ記録終了 これだけのことでしょう。 質問者さんの技量を推定してこれくらいの応用は可能と判断して 前回は敢えて省きました。 すべての事をここの質問に頼ってばかりでは、あなたのスキルアップ には繋がりません。 ここでの質問はあくまでも、問題解決のためのヒントを得て、ご自分 で、問題解決する事を考えるべきと思います。

  • sekkii
  • ベストアンサー率50% (13/26)
回答No.4

こんにちは。 私も無知なのですが、ちょっとやってみました。 データリボン→外部データの取り込み→テキストファイル→ ファイルを指定して[インポート]   ↓ テキストファイルを開いた時と同じ要領で列を指定して[完了]   ↓ 「データの取り込み」という窓が現れるので データを格納したい場所を指定する …と、こういうことでいいのかな? 私が勉強させていただきました!

4989Man
質問者

お礼

私も当初そのようにしていたのですが、この方法ですとクエリテーブルに データが残る形になると思います。 私の場合このクエリデータは必要ないのでクエリを用いない方法を 探していたのです。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

参考に SubTest()   Dim FSO, TextFile   Set FSO = CreateObject("Scripting.FileSystemObject")   Set TextFile = FSO.OpenTextFile("C:\てすと.txt")   With TextFile     Do Until .AtEndOfStream       MsgBox .Line & "行目-2列目" & vbCr & Split(.ReadLine, ",")(1)     Loop     .Close   End With   Set FSO = Nothing: Set TextFile = Nothing End Sub

  • kote551
  • ベストアンサー率0% (0/0)
回答No.2

カンマが1つ目と2つ目のデータを抜き出すなら FIND関数、MID関数を使ったらどうでしょう。 以下の数式をデータの件数分繰り返しては? no1 = FIND(",",テキストデータ,1) no2 = FIND(",",テキストデータ,no1 + 1) 答 = =MID(テキストデータ,no1 + 1,no2 - no1 - 1)

  • a987654
  • ベストアンサー率26% (112/415)
回答No.1

>このうちの222にあたる列のみを読み取りたいのですが、 要するに普通に読み込んだ場合B列に当たる部分のみを 取り込みたいということでしょうか? だとすれば、通常の操作で 1.”開く”で”テキストファイルを指定”して開く 2.A列,C~E列を削除 この、1.2.の操作を”マクロ記録”で行い出来たマクロの 中身を現在作成しているマクロのにコピーするのが、一番楽な 方法だと思います。

4989Man
質問者

お礼

早速のご回答有難うございます。 実はこの方法でマクロ記録をしたことがあるのですが、この方法だと勝手に クエリを使用した方法として記録されてしまいました。 Excel2007だからでしょうか?よくわかりません。 他に方法がございましたらご教授お願いしたいと思います。

4989Man
質問者

補足

質問者です。 お礼ではこの方法でクエリを使用した方法で記録されたと書きましたが、 「開く」と「外部データを取り込む」を勘違いしていました。 「開く」でテキストファイルを指定してマクロ記録してみたところ、クエリを使用することなく テキストファイルの内容を取り込んだエクセルファイルを得ることができました。 しかしこの方法では、あらかじめ用意しておいたワークシート上の指定個所にデータを 取り込むことはできないようです。 最初の質問が言葉足らずだったため回答者を混乱させる結果となってしまいましたが、 クエリを用いることなく、あらかじめ用意しておいたワークシート上の指定個所に、 コンマ区切りのデータの指定した個所(列)だけを取り込む方法を探しています。 良い方法がありましたらご教授お願いしたいと思います。

関連するQ&A

  • C言語による「テキストファイルの読み書き(fprintf)」について

    C言語による「テキストファイルの読み書き(fprintf)」について質問です ずぶの初心者ですが、既知のファイルの1行目に指定した文字列を付加させるプログラムを作りたいと思っています。 以下のように作りました。 ------------------------------------------------------------ #include <stdio.h> int main(void) { FILE *fp; fp = fopen("test.csv","r+"); fprintf(fp,"コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56\n"); fclose(fp); return 0; } ------------------------------------------------------------ このとき「test.csv」の内容が以下のようであったとします。(容量は1MBくらいです。) 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj この状態でプログラムをコンパイルして実行すると、「test.csv」の内容が以下のようになってしまいます。(一行目が消える) AAA,BBB,CCC,DDD,EEE 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj またcsvの行が増える度に妙な挙動になっていきます・・・(一行あいたり、先頭行が5行ほど消えたり) 希望する動作としては コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj のようになるようにしたいのですがどのようにすればよいのでしょうか。 よろしくお願いします。 (使用ソフト:Borland C++ Compiler, Cpad) 参考にしたサイトの項目:http://homepage3.nifty.com/mmgames/c_guide/17-01.html

  • sedで文字列の抜き出し

    ある一部分の文字列を抜き出したく、sedを使用したいと思って試行錯誤しております。 ↓あるファイル内の文字列 aaa bbb=ccc:ddd=eee:fff=ggg: aaa bbb=hhh:ddd=iii:fff=jjj: ※aaaとbbbの間はスペースです。 ※bbb,ddd,fffはある一定のキーワードです。 ※ccc,eee,ggg,hhh,iii,jjjはバラバラの文字列で長さも一定ではありません。 【質問】 上記の文字列の中でddd=の後の文字列(eee,iii)のみを抜き出したいです。 以下のようなsedを試してみましたが、 eee:fff=ggg iii:fff=jjj が抜き出されてしまいます。 sed 's/.*:ddd=\(.*\):\(.*\)$/\1/' 恐れ入りますが、皆様の知恵をお貸し下さい。

  • 外部ファイルからの指定行と指定文字の削除

    perlで、外部のCSVファイル(01_01.csv)を読み込み、「先頭の9行」とその行以降の「先頭9文字」を削除したものを [01_01_out.csv]として保存したいのですがどのようにしたらいいのでしょうか。 ご回答、よろしくお願い致します。 例) 読込ファイル:01_01.csv ---------------------------------------- AAA BBB CCC DDD EEE FFF GGG HHH 00:00:00,1 00:01:00,2 00:02:00,3 00:03:00,4 00:04:00,5 00:05:00,6 (略) 10:00:00,101 10:01:00,102 10:02:00,103 10:03:00,104 10:04:00,105 10:05:00,106 ---------------------------------------- 出力ファイル:01_01_out.csv ---------------------------------------- 1 2 3 4 5 6 (略) 101 102 103 104 105 106 ----------------------------------------

  • 配列の移動

    TEXTファイルに文字列を書き込んだり削除したり移動したりするプログラムを作成していますが、 aaa bbb ccc ddd eee fff ggg hhh iii このような内容を 1,aaa bbb ccc 2,ddd eee fff 3,ggg hhh iii のように上から順番に配列化して番号を指定して移動させたいのですが、 3の配列を2の上(配列1と配列2の間)や下(配列2と配列3の間)に移動するのにはどのようにしたら良いのでしょうか?

    • ベストアンサー
    • Perl
  • 大量データの一括変換

    aaa.bbb ccc.ddd eee.fff ggg.hhh 上記のようなデータが約1万行程度あるのですが、これを下記のようなユーザ名・メルアドに変換するコマンド等、お分かりになる方教えてください。ユーザ名・メルアドの間は半角スペースです。 ある程度自分で調べた結果awk等で出来そうな気がするのですが。。。 ユーザ名  メルアド   ↓     ↓ aaa.bbb aaa.bbb@hoge.com ccc.ddd ccc.ddd@hoge.com eee.fff eee.fff@hoge.com ggg.hhh ggg.hhh@hoge.com

  • EXCEL VBA 行列操作

    どなたか教えてください。 下記の様にA1からH5までの範囲に値がある行とない行があります。 空白セルを無視しA10に行列を操作し(行列入れ替え?)、さらに上詰め でコピーしたいのです(上にある行から列順に)。 よろしくお願いします。 例です  A   B   C   D   E   F  G   H 1 2                   aaa bbb 3 ccc ddd eee fff ggg 4 5 hhh ~ 10 aaa 11 bbb 12 ccc 13 ddd 14 eee 15 fff 16 ggg 17 hhh

  • perlでのcsv形式のテキストファイルの変換

    perlを使用してcsv形式のテキストファイルを下記のように変換したいと思っています。 【変換前】 10, abc , def , ghi ,jkl    ----1行目 10, abc , def , aaa, bbb   ----2行目 10, abc , def , ccc , ddd  ----3行目 11, abc , def , eee , fff   ----4行目 11, abc , def , aaa , ggg ----5行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 【変換後】 10, abc , def , ghi ,jkl    ----1行目 11, abc , def , eee , fff   ----4行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 変換内容はcsv形式のテキストファイルで、”,”で区切った先頭3列が 前の行の先頭3列と同じならその行は出力しない、といった 変換をしたいと思っております。 (例えば2行目ですと先頭3列は10, abc ,defになっており、  1行目の先頭3列と同じ文字列になっているためこの行は出力しない) 当方、Perl初心者で上記のようなことがPerlでできるかも よくわかっておりません。 そこで、上記のような変換はPerlで可能なのか、そしてもし可能であるのなら どのようにPerlで記述すればできるのか教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • VBAでCSV内にある改行を取る方法

    あるシステムが吐くcsvファイルの項目の中に改行が入っているものがあります。 例) 01,aaa,bbb(改行)bbb,ccc(改行) 02,ddd,eee,fff(改行) 03,ggg(改行)ggg,hhh,iii(改行) このCSVファイルをエクセルのマクロで読み込んでシートに展開したい のですが、項目中にある改行で別レコードを認識してしまいます。 結果) A B C D ---+---+---+--- 01 aaa bbb  bbb ccc 02 ddd eee fff 03 ggg ggg hhh iii これを以下のようにしたいのですが・・・ A B C D ---+------+------+---- 01 aaa bbbbbb ccc 02 ddd eee fff 03 gggggg hhh iii どうやればよいでしょうか? ご教授お願いいたします。

  • [VBA]改行入りのセルの値を配列に格納したい

    EXCELのA列に下記のような値が入っています。 ----------- "aaa bb cccc" ----------- "ddd" ----------- "" ----------- "eee fff ggg hhh" ----------- といったようにセルの中の値に改行があったり、 なかったり、値すらなかったりといった感じです。 これを改行区切りで配列に入れたいんですが、いい方法ありませんか? 上の内容を下記のような配列にしたいんです。 arrValue=Array("aaa","bb","cccc") arrValue=Array("ddd") arrValue=Array("") arrValue=Array("eee","fff","ggg","hhh") よろしくお願いします。

  • エクセル 関数 対象を全て抽出する

       列A  列B 行1  1   AAA 行2  2   BBB 行3  2   CCC 行4  1   DDD 行5  1   EEE 行6  2   GGG 行7  2   HHH 列Aが2であるものすべて抽出する方法? 結果が 検索値↓(手入力) 2 ↓ この表を作りたい 2 BBB 2 CCC 2 GGG 2 HHH