• 締切済み

VBAでの構築の質問

VBAの初心者ですが、データの抽出をしたいと考えています。 フォルダの中に、複数のテキストファイル形式のデータがあり、 その中にあるファイル毎の一部データのみ抽出できないかと考えております。 元データ(1)(テキストファイル形式) 10行目にあるデータ A TOKYO 20行目にあるデータ 100 200 1000 2000 (データの間には、スペースがあります。) 元データ(2)(テキストファイル形式) 10行目にあるデータ B Fukuoka 20行目にあるデータ 300 400 3000 4000 (データの間には、スペースがあります。) 編集後のデータは、それぞれのテキストデータ ・10行目データの2番目の抽出 ・20行目データの2番目の抽出 ・20行目データの4番目の抽出 を抽出できないかと考えています。 編集後データ(エクセルファイル形式に出力)は、下記のような感じできないかと考えてます。     (A列) (B列) (1行目)TOKYO Fukuoka (2行目)200 400 (3行目)2000 4000 皆さんからのご回答、 よろしくお願いいたします。

みんなの回答

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

VBAの応用として必要なのは 1、テキストファイルの読み込 と 2、指定したフォルダ内のファイルの指定では ないでしょうか。 1については http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110.html 等を参考にしてください。 2について、DIR関数を使用してみました。方法はいくつかあります。 dir関数で検索してみてください。 サンプルですが Sub ボタン1_Click() Dim intFF As Integer Dim strREC As String Mypath = "テキストファイルのあるフォルダーへのパス" Filename = Mypath & Dir(Mypath & "*.txt") RETU = 1 intFF = FreeFile Do While Len(Filename) > Len(Mypath) Open Filename For Input As #intFF GYO = 1  Do Until EOF(intFF) Line Input #intFF, strREC If GYO = 10 Then   Temp = Split(strREC, " ")   Cells(1, RETU).Value = Temp(1) End If If GYO = 20 Then   Temp = Split(strREC, " ")   Cells(2, RETU).Value = Temp(1)   Cells(3, RETU).Value = Temp(3) End If GYO = GYO + 1 Loop Close #intFF Filename = Mypath & Dir() RETU = RETU + 1 Loop End Sub こんな感じではないでしょうか。

回答No.1

何が判らなくて、質問されているのかは判断できませんが、 ・フォルダー操作やファイル操作は、FileSystemObject を使うと思いますので、  自分で調べてください。検索すればサンプルを含めて沢山見つかります。 ・スペースで区切られたデータの分割は Sprit 関数を使えば簡単です。 ・指定した位置のセルへのデータ書き込みは  worksheets("sheet1").cells(aa,bb).value = zzzz  という感じでできます。(aa=行番号, bb=列番号) このくらいの知識があれば、できるでしょう。 ガンバってみてください。

関連するQ&A

  • 初めて質問させていただきます

    初めて質問させていただきます テキストファイル形式で、特定の文字数の区間を抽出したいのですが 良い方法はないでしょうか? 例えば、以下のような数字の列を取り扱っています 011110854684632 66632 016359563163565636323 01649266489 65264656 数列には全く規則性がないのですが、 数列の以下のような領域 0111「1085」4684632 「666」32 0163「5956」31635656「363」23 0164「9266」489 652「646」56 5-8番目の領域と17-19番目の領域のみ抽出したいです スクリプトでどうにかできるかもしれないのですが 知識がなく、困っています 数列の中にはランダムで半角スペースも含まれており それも1字とカウントして、目的の番目から何番目かを抽出したいです 各行に関しては同じ長さ(文字数)で、すべての行に対して○~○番目の抽出を行います お力添えを頂けると助かります よろしくお願いします

  • 【Excel VBA】並べ替え

    Excel2003を使用しています。 あるテキストファイルから必要なデータを抽出し、予めExcelで作成してある表に、抽出したデータをコピーするという作業をマクロで処理しています。 Excelの表は、A列→4桁の番号(数値)、C列→文字列、D列→数値で、A列の番号順(昇順)に表示されています。 抽出されたデータは、2行目以下に表示されるので、まず、A2セルに『0000』、C2セルとD2セルにそれぞれ該当のデータがコピーされ、以下、順番にコピーされます。このA2セル『0000』の行データをコピーされたデータの一番最後にもっていき、下記のように上方向へシフトさせたいのですが、このようなことはコードを追加することで可能でしょうか?    A列  C列  D列 2  0000  あ  100 3  1200  い  200 4  1500  う  300        ↓ 2  1200  い  200 3  1500  う  300 4  0000  あ  100 データ元のテキストファイルは、会社で使用しているシステムの機能を使って、テキストファイルにしたものです。このデータが昇順で表示されているので、こちらを並べ替えてマクロを実行すればいいかと思ったのですが、数値と文字列が混在しているので、Excelの表にコピーした後(数値と文字列の混在がなくなった後)に、上記のように並び替えることができればと思い、質問させていただきました。 よろしくお願いします。

  • VBAのコードを教えていただけないでしょうか。

    VBAのコードを教えていただけないでしょうか。 概要はリスト形式のデータの複数の条件に合うデータをオートフィルタで抽出して、その結果を別ファイルにする、というものです。用途は建設業のデータ入力です。 リスト形式のシート「記入用」は次のようになっています。 ・B5:Qはデータを記入する領域。(Qの下の行はどれだけになるかわかりませんが、今は500ぐらいまです) ※5行目は見出し行です。 ・C3に仕入れ先の会社を入力 ・E3・F3はそれぞれ年月日を入力して、検索するときに何月何日から何月何日の間、というようにするためのセルです。E3が調べたい年月日の始めの日、F3は調べたい年月日の終わりの日です。 ・「支払い月」の列はB列 上記の調べたい年月日の対象となるデータです。 ・「仕入先」はF列 エクセルは2003を使っていますが、2007でも使用します。 以上の条件ですが、実現したいことは、 (例) ●2010/4/1から2010/7/31までの間で、仕入先が〇〇工務店のデータを抽出 ●その抽出結果に名前をつけて別ファイルで保存。その保存名は検索した年月日(from to)+仕入先名  この例の場合、[20100401~20100731 〇〇工務店]というファイル名 こんな夢のことができるコードを教えていただけないでしょうか。周りにはエクセルができる人はいますが、このようなVBAのコードが書ける人はおらず、なかなか進みません。 どなたかよろしくお願い致します。

  • Excel VBA テキストファイルからの抽出

    Excel VBAにて、テキストファイルから文字列を選別して、それをエクセルファイルのテキストボックスに張り付けるコードの記述をご教授いただけますでしょうか。 環境はWindows7 Pro Excel2010 下記テキストファイルです。 test.txt IDENTIFICATION DIVISION. PROGRAM-ID. sample AUTHOR. XXX * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT A ASSIGN TO B SELECT C ASSIGN TO D DATA DIVISION. FILE SERECTION. この FILE-CONTROL.と DATA DIVISIONの間に挟まれている SELECT A ASSIGN TO B SELECT C ASSIGN TO D この2行を取り出して、エクセルファイル上にあるテキストボックス張り付ける処理です。 よって、FILE-CONTROL.と DATA DIVISION.の間にある不特定多数の行を抽出するロジックです。 テキストボックスに張り付ける前の行を抽出するだけでも、ご教授頂けたら幸いです。 よろしくお願いします。

  • VBAで「,」⇒「.」へ置換後、タグ区切りでテキスト保存したい。

    VBAで「,」⇒「.」へ置換後、タグ区切りでテキスト保存したい。 お世話になっております。 VBAで下記を行いたいと考えております。 全体の流れとしては、テキストを読み込み⇒エクセル上で編集⇒テキスト保存です。 そのエクセル上で編集⇒テキスト保存で悩んでおります。 編集した複数のシートを、個別にタブ区切りのテキストファイルに保存したいと考えております。 出力する際に、小数点の「,」⇒「.」に変換します。 ※小数点を「,」として利用しています(海外対応) 編集するシートは全てのセルが文字列形式になっており、列も行も読み込むテキストによって可変なので、統一されているわけではありません。 最終行はA列ではなくB列でカウントします。 全てのセルに値が入っているわけではなく、空白もあります。 また、各セルには「0.00000」や「02.24」等の数値も入っており、数値形式にしてしまうと0が消えてしまうので、全てのセルを文字列形式として編集しています。 なお、小数点以下の桁数も可変です。 つまり、小数点が「,」となっているのを「.」になおし、タブ区切りのテキストファイルとして保存したいのです。 出力する際に、いったん別ブックに保存⇒不要なシートを削除⇒タブ区切りで保存はできたのですが、自分があまりVBAに詳しくないせいか、これでは文字列形式で保存されなかったため、シートを新規ブックにコピー⇒タグ区切りで保存に変更しました。 しかし、これではcells.replace ~で置換すると、「00,000」が「0」になってしまいました。 ※「22,222」等は問題ないのですが……何故かは分かりませんでした。 ファイルとしては20000万行~25000行程度です。 列としては40列前後になります。 あまりVBAには詳しくないので、まとはずれな事を言っているかもしれません。 何か良い方法はありますでしょうか? 宜しくお願いいたします。

  • excelのVBAを利用し検索抽出を行う方法

    検索というよりデータの抽出の方が正しいかもしれません。 現在、顧客情報を種類別でシートに分けて表で管理しています。 情報には名前などの文字列、日付、時間などが含まれます。 この表の形式を説明すると、 ・列 … B~AI まで項目があります。(A列は使用していません) ・行 … 1行で1つのデータとなります。 ・行数…シートにより行数は異なります。 この形式の表が全部で14シートあります。 このシートのB列に「未・済」のステータスがあるのですが、 すべてのシートの「未」である行のデータを"Sheet1"に抽出させたいと考えています。 さらに、抽出されたデータの"D"列の日付にソートされるようにしたいのですが、 説明がわかりづらかったら申し訳ありません。 VBA初心者のためご教授いただければと思います。 よろしくお願いします。

  • Excel VBA 2つの条件を満たした行を削除

    Excel2003を使用しています。 CSVファイルを元にデータを作りたく、まずは不要なデータを削除しています。 J列=0の行とJ列=0の行のA列の値と同じ値がA列に入力されている行を削除したく、J列=0のA列の値を一旦別シートに抽出し、その抽出したデータとA列のデータをループして、一致したら削除というコードを書きました。 もし可能であれば、一旦別シートに抽出せずに処理したいのですが、その場合、どのようにコードを書けばいいでしょうか? よろしくお願いします。

  • [VBS] テキストファイルから任意の値を抽出する

    規則性のあるテキストから、1行づつ処理を行い ある文字列の設定値を抽出したいです。 例:Bの値だけを抽出したい。(AとBの間は半角スペース) 【テキストファイルの中身】 ---------------------------------------- 1行目| A="あ" B="あ" A="い" B="い" A="う" 2行目| A="え" B="う" A="お" B="え" A="か" 3行目| A="き" B="お" A="く" B="か" A="け" ---------------------------------------- 【出力結果】(Bの値だけ) --------------------- 1行目| あ,い 2行目| う,え 3行目| お,か --------------------- 色々方法はあると思いますが、どうしても複雑になってしまうので 簡単に出来る方法(観点)があれば、ご教示頂きたいです。

  • vbaで特定の番号から番号の表データを抽出

    任意の範囲で表からデータを抽出することができるのでしょうか? 行は100行で列は7列、1行めは項目行で、1列目の2行目から1番から99番までが割り当てられています。1行目の2列目から7列目まで項目が割り当てられています。その他のセルには数値や文字データが入力されています。 こんな表から、任意に、例えば10行目から35行目までのセルデータ全てを別シートに取り出すそんな抽出方法があるのでしょうか?皆目検討がつきません。もし可能ならどなたかお教え頂けませんか?

  • VBAにて文字列の数字を抽出(スペース含まれる)

    例(B3セル) ○○商店 1号店 京都 2001/3/24 価格 '07~'08  の「2001/3/24」部分をC3に抽出 *文字列にはスペースを含み、B3からデータのある所(約300行)までの結果をC列に抽出したいと思います。  セル内の並び順はまちまちです。 参考にできるWebなどありましたら宜しくお願い致します。

専門家に質問してみよう