テキストファイルからデータ読み込みに関して

このQ&Aのポイント
  • テキストファイルのデータをエクセルに自動的に読み込む方法について質問します。
  • マクロを使用してテキストファイルのデータをエクセルに変換する方法について教えてください。
  • Windows7とExcel2007の環境で、テキストファイルからエクセルにデータを読み込む方法を知りたいです。
回答を見る
  • ベストアンサー

テキストファイルからデータ読み込みに関して。

皆さん、始めまして。 テキストファイルのデータからエクセルへ読み込むエクセルマクロを構築したく質問させて頂きました。 テキストデータでリストの一覧をExportできるのですが、その整理が非常に手間なので自動化したく マクロを作成する事を検討しております。 環境はデータ内容を下記に記載させて頂きます。 [環境] Windows7 / Excel2007 [テキストデータサンプル] 下記に貼り付けたように条件によって出力方法が違うデータがあります。 ・レコードが1つのものは項目がたてに並んでいる。 ・レコードが2つ以上になると項目が横にならぶ。 処理番号 : 001-H20120910001 処理記録 ---------------------- 記録 日時    年齢   地域 0 20120712 63 東京 1 20120912 63 東京 (結果数 = 2) --- END 処理番号 : 001-H20120919999 処理記録 ---------------------- 記録 = 0 日時 = 20120909 年齢 = 19 地域 = 神奈川 (結果数 = 1) --- END [実行後に得たい情報] 処理番号で検索し、その中のデータを下記ならびでエクセルデータに変換したいと考えています。 001-H20120910001 0 20120712 63 東京 001-H20120910001 1 20120912 63 東京 001-H20120919999 1 20120909 19 神奈川 エクセルのマクロは勉強をし始めたばかりで初心者程度の知識ですが、 もしよろしければご回答、ご助言いただければと存じます。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

Excelに文字列としてA列に取り込んだとして(1行目を挿入し) B2セルに =IF(LEFT(A2,4)="処理番号",RIGHT(A2,16),IF(ISNUMBER(LEFT(A2,1)*1),INDEX(B:B,ROW()-LEFT(A2,1)-1)&" "&A2, B1&REPT(" 1",LEFT(A2,4)="記録 =")&REPT(RIGHT(A3,9),LEFT(A3,4)="日時 =")& REPT(RIGHT(A3,3),LEFT(A3,4)="年齢 =")&REPT(SUBSTITUTE(A2,"地域 =","",1),LEFT(A2,4)="地域 ="))) 下へオートフィル C3セルへ =IF(B3=B2,"",IF(LEN(B3)>32,B3,"")) 下へオートフィル C列でオートフィルタ 空白以外のセル 画像添付 たたき台

Kakurenbo555
質問者

お礼

CoalTar様、 お忙しい中回答ありがとうございます。 関数でここまで作りこめるとは目からうろこです。早速試してみました。 26行目以降で"記録 = 0"の場合も私のサンプル結果で1としていた為、 そちらの処理まで入れていただきありがとう御座います。 実際には0ですので、「REPT(" 0",」として使用させていただきました。 こちらのデータは10000レコード以上あり、頻繁にリスト化を実施する為こちらの処理もVBAで記述できれば と考えました。 出力もDBに落としやすい形がいいとアドバイスももらった為、各項目を1Cellに割り当てるような つくりにしていきたいと考えています。 A B C D E 001-H20120910001 0 20120712 63 東京 001-H20120910001 1 20120912 63 東京 001-H20120919999 0 20120909 19 神奈川 当面は頂いた関数を駆使して整形し、再度張りなおす事で対応させて頂きます。 本当にありがとうございました!!

関連するQ&A

  • テキストデータをエクセルVBAで読み込む方法

    皆さん、始めまして。 関連[QNo.7692303] 上記にて関数を使って整形する方法をご回答いただきました。 今回は当時よりも便利性をあげ、エクセルのVBAを使ったものを作成したく質問させて頂きます。 テキストファイル(サンプルは下記参照)を読み込み、使いやすいようにエクセルへはめ込むのが目標です。 VBAは初心者なので、お忙しい中恐縮では御座いますが、ご教授いただければと存じます。 少ないデータで作成できたら、本番データへ拡張していきながらさらに理解を深められればと考えております。 [環境] Windows7 / Excel2007 [テキストデータサンプル] 下記に貼り付けたように条件によって出力方法が違うデータがあります。 ・処理番号内でレコードが1つのものは項目がたてに並んでいる。 ・処理番号内でレコードが2つ以上になると項目が横にならぶ。 ・記録、日時、年齢、地域の値はすべて可変 ・本来のデータは10項目以上あるが、サンプルデータとして4つ抜粋して下記に表記しています。 処理番号 : 001-H20120910001 処理記録 ---------------------- 記録 日時    年齢   地域 0 20120712 63 東京 1 20120912 63 東京 (結果数 = 2) --- END 処理番号 : 001-H20120919999 処理記録 ---------------------- 記録 = 0 日時 = 20120909 年齢 = 19 地域 = 神奈川 (結果数 = 1) --- END 処理番号 : 001-H20110910009 処理記録なし --- END 処理番号 : 001-H20109190022 処理記録 ---------------------- 記録 = 3 日時 = 20101109 年齢 = 26 地域 = 茨城 (結果数 = 1) --- END 処理番号 : 001-H20120910022 処理記録 ---------------------- 記録 日時    年齢   地域 0 20120712 63 東京 1 20120912 63 栃木 5 20120917 63 和歌山 (結果数 = 3) --- END [実行後に得たい情報] 処理番号で検索し、その中のデータを下記ならびでエクセルデータに変換したいと考えています。 A列      B列 C列    D列 E列 001-H20120910001 0   20120712 63   東京 001-H20120910001 1   20120912 63   東京 001-H20120919999 0   20120909 19   神奈川 001-H20110910009 001-H20109190022 3   20101109 26  茨城 001-H20120910022 0  20120712 63 東京 001-H20120910022 1  20120912 63 栃木 001-H20120910022 5 20120917 63 和歌山 エクセルのマクロは勉強をし始めたばかりで初心者程度の知識ですが、 もしよろしければご回答、ご助言いただければと存じます。 よろしくお願いいたします。

  • テキストからの読み込みについて質問です

        エクセルでマクロ機能でテキストデータを参照から選び、   クリックするとエクセルの表に値がきれいに入るマクロ機能   つきのシートがあるんですが、   あれの作り方が気になりまして投稿しました   通常のファイル読み込みから→スペース、カンマとかメニューバー   からでなくマクロつきのシートでテキストデータが   エクセルのセルにきれいに並ぶあの機能のソースは   難しいものなのですか? それともコマンド名で読み込めるのが   あるのか気になります   忙しい中すいませんがどなたか教えてください。

  • Excel2010 VBAでテキストファイル読込

     初めて質問させていただきます。  Excel2010のVBAで下記のようなマクロを組み、テキストファイルを読込したところ、データの一部が誤変換されてしまいます。  誤変換内容  11/12/29 →2029/11/12  マクロを使用せず、Excelから直接テキストファイルウィサードを使って読み込んだ場合には、正しく「2011/12/29」となります。  (お恥ずかしい話ですが、Excelシートのセルに直接「11/12/29」と打ち込むと自動的に「2011/12/29」に変換されることを今回初めて知りました。)  同一項目には「11/12/29」形式と「20111229」形式が混在しており、「11/12/29は2011/12/29」、「20111229はそのまま」セルに格納するよう依頼されています。  従って、Array(1, 2)で文字列やArray(1, 5)でYMD形式の日付へ同一項目のデータを固定することはできなくなっております。  テキストデータは「カンマ区切り」の35項目です。  データはネットワーク内の他のPCドライブに保存されています。  因みに「 Workbooks.OpenText Filename:=」以下は、Excelのマクロ記録で取得したものです。  お忙しいところ恐縮ですが、よろしくお願いいたします。 【作成したマクロ】 Sub 読込() With CreateObject("WScript.Shell") .currentdirectory = "\\コンピューター名\c\フォルダ名\" End With Const cnsTITLE = "テキストファイル読み込み処理" Const cnsFILTER = "全てのファイル (*.*),*.*" Set xlAPP = Application xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _ Title:=cnsTITLE) If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub Workbooks.OpenText Filename:=strFILENAME, Origin:=932, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _ , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _ Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _ Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _ 16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _ Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array( _ 29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1)) _ , TrailingMinusNumbers:=True End Sub

  • ExcelデータをPPTの指定したテキストボックスに自動エクスポートも

    ExcelデータをPPTの指定したテキストボックスに自動エクスポートもしくはインポートしたい 1列が1レコードになっているExcelデータを、 1レコード=1スライドで、 指定したセルデータをPPTの指定したテキストボックスに入れて Excelのレコード数だけスライドが自動でできるようにしたいのですが 何か方法はありますか。 VBAは初心者ですよろしくお願いします。 例 <Excel>   A   B   C    1 田中 神奈川  A型  2 山田 東京 B型   ・   ・   ・ <PPT> スライド1  テキストボックス1 に「田中」と表示  テキストボックス2 に「神奈川」と表示  テキストボックス3 に「A型」と表示  スライド2  テキストボックス1 に「山田」と表示  テキストボックス2 に「東京」と表示  テキストボックス3 に「B型」と表示  ・  ・  ・

  • Excel VBAにてtextファイルの読み込み

    全くのド素人です。記録マクロやちょっとした手直ししかしたことがないため、簡単に回答頂けたらうれしいです。 やりたいこと: txtファイルをExcelで開き、データを直してSaveasで保存する。 と簡単なことなのですが、私にはまずファイルを開くことができません。。ファイルは特定ではなく、その時その時で違うファイルを自分で選ぶ様にしたいのですが、そこが分かりません。。 よろしくお願い致します。

  • テキストデータをエクセルに変換したい!

    改行されていない連続したテキストデータをエクセルに変換したいのですがどうしたらいいのでしょう? 普通、レコード毎に改行されたテキストデータならば、エクセルから該当のテキストファイルを読み込めば区切ってやればいいと思うのですが、改行されていないため、縦に並ばずにすべてのデータが横に並んでしまっています。 すいません、教えてください。

  • データのテキストファイル抽出

    データの抽出に困っています。 エクセルデータにてA~Lのフィールドに値が入っていて、1000レコード程のデータを ・1レコードずつ ・A列のフィールドをファイル名に ・テキストファイルに出力 ・テキストファイルには1レコードを縦に、フィールドごと改行して並べる 上記のようにして作成する必要があります。 今までは、 A B C...K L となっているデータの列と行を入れ替えて A B C . . K L としてテキストファイルを作成し、セルAのフィールドをファイル名にして、 手作業で1列ごとにコピー&ペーストして行っていました。 非常に効率が悪いので、全自動化もしくは一部自動化出来ないかと試行錯誤していますが 良い方法が見つけられません。 何か良い方法をご存知の方がおりましたら教えて下さい。

  • 行数の多いテキストデータから、任意の部分のみを読み込むには?

    以下について、どなたかアドバイスをお願いします。 1.行数の多いテキストデータ(拡張子:prn)があります。この中の一部をExcel VBAでエクセルシートに貼付る事が目的です。 2.行いたいことののフローとしては、下記の様なデータprnファイルがあり、   :   : *** 節点データ 節点    X-座標    Y-座標    Z-座標 番号    (m)    (m)    (m) 101    0.0   0.0   0.0 105    4.0    0.0    0.0 201    0.0    0.0    0.0 205    4.0   0.0    2.0 *** 部材データ   :   :   (1)エクセルで「開く」→「**.prn」を選択   (2)「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」を選択   (3)「タブ」と「スペース」を選択して「完了」     (ここまでで、各数値を一つ一つのセルに入力したい)   (4)開いたファイルの中で“ある文字から、ある文字”までを目的のシートに貼付る     (***節点データ から ***部材データの上までをコピー)   といった内容です。 3.自分ではマクロの記録を使って作成してみたのですが、「行数の多い」というのがネックとなり、シートの65536行までにデータが収まりきらないのです。 4.一度、シートに貼付けせずに、テキストファイルから直接必要な部分のみを読みこむ等の方法がありませんでしょうか。 5.なお、このテキストファイルのデータは、固定長では無いです。 内容がややこしいかもしれませんが、宜しくお願いします。

  • エクセルマクロでのテキスト振り分け

    エクセルのマクロを利用してテキストファイルのデータを振り分けてブックを作成したいのですが、テキストデータは下記の内容になります。 番号,名前,都道府県 0001,あああ,北海道 0002,いいい,東京都 0003,ううう,大阪府 ↓ 2998,わわわ,奈良県 2999,ををを,石川県 3000,んんん,福岡県 このテキストデータを都道府県名別にブックを作成して、都道府県名.xls(北海道.xls、青森県.xls ・・・沖縄県.xls)の名前で保存したいのでよろしくお願いいたします。

  • ブックをひらかずにテキストファイルを取り込む

    エクセルのブックを開かずにテキストファイルを取り込みたいのですが、対象のテキストファイルは タブで分かれています。 本を見て 下記のプロシージャを使用したいのですが、 テキストが取り込まれるブックに郵便番号と言うシートを作成してもうまく取り込めません。 テキストはタブで区切られたテキストで 7列のデータです。 下記のものを開こうとすると、7列でデータが入るのですが、タブでデータが区切られてこないのです。 データが続いて一つのセルに入ってしまい、 うまく設定できません。 何がいけないのでしょうか? 宜しくお願いします。 Sub ReadTxt() Dim myTxtFile As String Dim myBuf(7) As String Dim i As Integer, j As Integer Application.ScreenUpdating = False myTxtFile = ActiveWorkbook.Path & "\Fuji.txt" Worksheets("郵便番号").Activate Open myTxtFile For Input As #1 Do Until EOF(1) Input #1, myBuf(1), myBuf(2), myBuf(3), myBuf(4), _ myBuf(5), myBuf(6), myBuf(7) 'データをセルに展開する i = i + 1 For j = 1 To 7 Cells(i, j) = myBuf(j) Next j Loop Close #1 End Sub

専門家に質問してみよう