
「WindowsXP」/「Office2003Professional」を使用しています。
一つのフォルダに格納された複数のテキストファイルから、指定した文字列を含んだ行だけをExcelに抽出し、一覧表にする方法を教えて下さい。
各テキストファイルの抽出したい部分は以下のようになっています。(一部抜粋)
------------------
+製造元 *NEC
+型番 *ABC-000
+メモリMAX *512GB
+スロット数 *2
+DIMM1 *256 MB *333MHz
+DIMM2 *256 MB *333MHz
------------------
文字の先頭に[+]がついているものが検索文字列で、[*]が抜き出したいデータ部分です。
(実際のテキストでは[+]や[*]は書いてありません。)
これをExcelで検索文字列を項目名に指定し、[*]部分を抜き出し全テキストファイルを一覧表にしたいと思っています。(行列反転した表)
------------------
A B C D E F G
1 ファイル名 製造元 型番 メモリMAX スロット数 DIMM1 DIMM2 …
2 aaa.txt NEC ABC-000 512MB 2 256MB 256MB
3 bbb.txt FUJITU FMV10 1024MB 2 512MB
・
・
------------------
●テキストファイルの検索文字列とデータの間には半角スペースが入っています。
●テキストファイルの検索文字列の行位置はファイルごとに異なります。
●テキストファイルの検索文字列の中にはファイルによっては存在しない文字列もあります。
●ExcelのA列にはフォルダ内のファイル名が予め全て入力されています。
もしもVBAを使用しなければならない場合は、VBAの知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
1、[Sheet1]タグを右クリックし[コードの表示(V)]をクリック。
2、メニューバーも[ツール(T)]-[参照設定(R)]をクリック。
3、Microsoft scripting runtime にレ点を付けて[OK]ボタンをクリック。
これで、コンパイルエラーは回避できます。
質問者は、単なる関数ユーザーです。
A1=DataRead("C:\Temp\test1.txt", "製造元")
と書けりゃー十分ですよ。
この回答への補足
御礼と補足が前後して申し訳ありません。
どうやらテキストファイルの中身の空白の数が行によってランダムになっている為、うまく行かないようなのですが…
これを解決する方法はありますか?
厚かましくも思いますが宜しくお願い申し上げます。
No.3
- 回答日時:
横槍ごめんなさい。
あれっ! その後どうなったのでしょう? 気になったので・・・
未だのときは、こんな感じでテストされてみては如何でしょうか。
1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.コードウィンドウに Husky2007さん 提示のコードをコピーして貼り付けます。
4.メニューから[ツール]--->[参照設定]で、「参照可能なライブラリファイル」の中から
「Microsoft Scripting Runtime」を探し、チェックを付け[OK]します。
5.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
6.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
「中」にして[OK]します。
これでVBAの設定は完了。
次にシートのセルB2に =DataRead("C:\DATA\"&$A2,B$1) の計算式を設定します。
(上の式で C:\DATA\ の部分は、実際のテキストファイルのパスを指定)
これをG列迄右にコピーし、更にそれをA列の最終データまで下へコピーします。
あと、DIMM1と2のクロックを拾ってくるかどうか。 もしかして変更必要かも。
この回答への補足
有難い横槍感謝しておりますm(u_u*)m
ご配慮頂いたお陰で何とかテストは成功しました。
>=DataRead("C:\DATA\"&$A2,B$1) の計算式を設定します。
>あと、DIMM1と2のクロックを拾ってくるかどうか。 もしかして変更必要かも。
教示頂いた式で試し、後ほど結果をご報告致します。
その後の報告です。
実際のパスで式を作りましたが…何故か空白が返ってきてしまいます(つДT)
項目名(検索文字列)が実際には英語である事は関係ありますか?
本当は「System,Vendor」「System,Model」となっているのですが、前回同じ内容で投稿した際、
「英語で書くと回答者にわかり難い」とご指摘頂いたので、回答もつかなかった為、変更して投稿したのですが…。
仕事なので諦める訳にはいかない為、色々試してみます。
No.1
- 回答日時:
VBA 初心者ならば、その手続きをコードで記述することが苦手でしょう。
ならば、非手続き的に関数一発で読み込む環境を整えるしかないでしょう。
<Test1.txt>
製造元 NEC
型番 ABC-000
これを、非手続き的に関数一発で読み込むテストをしてみましょう。
[イミディエイト]
? DataRead("C:\Temp\test1.txt", "製造元")
NEC
? DataRead("C:\Temp\test1.txt", "型番")
ABC-000
この際、実行速度とかは無視し、簡便さのみを追求するとこのようでしょう。
次の2つの関数を標準モジュールに追加すれば、このように関数一発で読み込めます。
A1=DataRead("C:\Temp\test1.txt", "製造元")
でA1には’NEC’と表示されます。
これで、VBAと無関係にデータを呼び込むことも可能かと思います。
Public Function DataRead(ByVal FileName As String, ByVal KeyWord As String) As String
On Error GoTo Err_DataRead
Dim isFound As Integer
Dim fso As FileSystemObject
Dim fil As File
Dim txs As TextStream
Dim strData As String
Set fso = New FileSystemObject
Set fil = fso.GetFile(FileName)
Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)
Do
strData = txs.ReadLine
If InStr(1, strData, KeyWord, vbTextCompare) > 0 Then
isFound = 2
Exit Do
End If
Loop Until 0
Exit_DataRead:
Set txs = Nothing
Set fil = Nothing
Set fso = Nothing
DataRead = CutStr(strData & "", " ", isFound)
Exit Function
Err_DataRead:
Resume Exit_DataRead
End Function
Public Function CutStr(ByVal Text As String, _
ByVal Separator As String, _
ByVal N As Integer) As String
Dim strDatas() As String
strDatas = Split("" & Separator & Text, Separator, , 0)
CutStr = strDatas(N * Abs((N <= UBound(strDatas))))
End Function
※Microsoft scripting runtime を参照させて下さい。
※もしくは、ダイレクトに参照させるコードに修正。
ご回答有難うございます。
意味が解らないなりにやってみたのですがやはり出来ません(T_T)
テストの段階でコンパイルエラーと表示され既に躓きました。
やはり私には無理なのでしょうか......
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
-
4
【VBA】テキストファイルから特定の文字列を抽出して、エクセルに出力する
Excel(エクセル)
-
5
複数のテキストファイルをエクセルに一括で取り込みたい
Excel(エクセル)
-
6
特定の文字を含む行だけ抽出する方法を探しています。
その他(ソフトウェア)
-
7
複数のtxtの特定部分を抽出し、一つのxlsファイルにまとめたいです。
Excel(エクセル)
-
8
テキストファイルの一部分を抽出する方法について
Visual Basic(VBA)
-
9
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
-
10
txtファイルから特定の文字列が書かれた行だけを取得や削除するソフト
フリーソフト
-
11
Excel.VBA テキストファイルを指定行数からの読み込む
Excel(エクセル)
-
12
特定フォルダ内のテキストファイルの内容を全てエクセルに書き出す方法
Visual Basic(VBA)
-
13
バッチファイル 指定行の切り出し
その他(Microsoft Office)
-
14
Winmerge ファイルの中身は同じなのに黄色くなる
その他(OS)
-
15
【VBA】複数のtxtファイルから特定区間の複数行を呼び出し、エクセルにまとめたい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
-
【マクロ】数式を入力したい。...
-
Office2021のエクセルで米国株...
-
エクセルのリストについて
-
【マクロ】【相談】Excelブック...
-
【マクロ】元データと同じお客...
-
【画像あり】オートフィルター...
-
エクセルの関数について
-
【マクロ】左のブックと右のブ...
-
他のシートの検索
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
vba テキストボックスとリフト...
-
【マクロ】【配列】3つのシー...
-
【関数】=EXACT(a1,b1) a1とb1...
-
【マクロ画像あり】❶1つの条件...
-
エクセルの複雑なシフト表から...
-
【マクロ】変数に入れるコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報