テキストファイルの抽出について2点教えてください。
スペック
・Excel2013
・Windows10
①
テキストファイルの内容をコピーするコピー元ファイルを
起動エクセルを置いたフォルダ内のすべてのフォルダから.txtファイルを
抽出したいのですが、下記のコードをどのように変えればいいでしょうか。
Sub TextFiles()
Const DirName = "C:\\\\"
Dim fs, dir, fc, f1, stream As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set dir = fs.GetFolder(DirName)
Set fc = dir.Files
For Each f1 In fc
If LCase(fs.GetExtensionName(f1.Name)) = "txt" Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Name = f1.Name
Set stream = f1.OpenAsTextStream
Do While stream.AtEndOfStream <> True
Cells(stream.Line, 1) = stream.ReadLine
Loop
stream.Close
End If
Next
End Sub
②
テキストファイルの抽出部分をユーザーフォームで指定したいのですが可能でしょうか?
例
15行目~20行目
”。”から”。”
VBAについてはまだまだ勉強中なのでご迷惑と思いますが
詳しく教えて頂ければ有難いです。
宜しくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
繰り返すようですが、基本的に、私は、自分の書いたVBAのコードの解説はしません。
全体的なコードの流れ以外には、よほど、自分のスタイルやパターンにあったコードを書く人出ない限りは、理解しないものだと思います。このご質問になったコードは、もともと、VBA(for Excel)ではなく、VBScript のコードです。
私がこのテクニックを知ったのは、ずいぶん昔なのですが、それを自分なりに、VBAに移植できたのは、それを知ってから、4~5年経ってからです。
このコードはVBA由来ではありません。
VBAがどのぐらいのレベルにあるのかは分かりませんが、こういうものは、説明してどうにかなるというものではないと思うのです。もとより、VBAから一足飛びに、VBScript を理解するということが本当に可能かどうか、私には分かりかねます。VBScript自体は、もう消えつつある言語でもあるにも関わらず、それを極めている人は少ないと思います。
個々の分からない部分は、教えることはできても、全体的に詳しくは教えられませんので、悪く思わないでください。決して意地悪をしているわけではありません。ただし、あまりスッキリとした内容ではないということは間違いありません。
それと、UserFormに組み込む場合は、VBA由来のコードで行ったほうが遥かに簡単だと思います。
ところで、剣道と居合道の違いをご存知ですか?私は、耳学問というか、学生時代の友人の聞きかじりなのですが、剣道は、自分の身体で覚えなくてはなりませんが、居合道は、刀が教えてくれるといいます。VBScript とVBAも同様で、VBAは、VBA自身が教えてくれるものなのです。デバックをしながら、進んでいけば分かるはずです。
No.2
- 回答日時:
>コードを書いて頂いたのに自分では難しくて
>なかなか内容が把握出来ず動かせない状態です。
構造的なことしか説明はできません。
・最初の登録フォルダーのファイルを探す
次に、再度
・フォルダーを探す
ループして、
・フォルダーのサブフォルダーを検索
・その一つの中のファイルを探す
ループに戻る
ただ、他人の作ったものというのは、よほど、同じようなスタイルを身に着けていない限りは説明しても、よくわからないはずです。ここで掲げたコードは、まだ、検証されていません。
http://oshiete.goo.ne.jp/qa/10249285.html
こちらで、同じ性質を持つコードをアップロードしました。こちらのものに修正を加えています。参考にしてみてください。
No.1
- 回答日時:
こんにちは。
最初に、余計なことを書くようですが、このご質問に、なかなかレスが付かないのは、VBAでありながら、VBAではないテクニックが必要だからです。別の外部オブジェクトを利用したマクロというのは、それなりにむつかしさがあります。
①
Option Explicit
Dim objFS As Object
Dim i As Long
Sub FileSearch()
Dim objFolder As Object
Dim dest As String
i = 0
ThisWorkbook.Activate
ActiveSheet.UsedRange.Clear
Dim DirName: DirName = Application.DefaultFilePath & "test\" 'ユーザー設定
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.getfolder(DirName)
Call ShowFiles(objFolder.Files) '親
Call ShowFolder(objFolder)
MsgBox "終了", vbInformation
End Sub
Sub ShowFiles(ByRef objFiles)
Dim f
For Each f In objFiles
If LCase(f) Like "?*.txt" Then
Cells(1 + i, 1).Value = f
i = i + 1
Call FSReadLine(f)
End If
Next
End Sub
Sub FSReadLine(ByVal fName As String)
Dim objText As Object
Dim cnt As Long
Set objText = objFS.OpenTextFile(fName)
cnt = i + 1
Do While objText.AtEndOfLine <> True
Cells(cnt, 2).Value = objText.ReadLine
cnt = cnt + 1
Loop
i = cnt
objText.Close
End Sub
Sub ShowFolder(ByVal objFolder)
Dim objSubs As Object, oSb '子
Dim eaFiles As Object
Set objSubs = objFolder.Subfolders
For Each oSb In objSubs
Set eaFiles = oSb.Files
Call ShowFiles(eaFiles)
Call ShowFolder(oSb)
Next
End Sub
②
グローバル変数の fstL, endL を標準モジュールに設けて
ユーザーフォームで指定すればよいはずです。
Sub FSReadLineR(ByVal fName As String)
Dim objText As Object
Dim cnt As Long
Dim j As Long
Set objText = objFS.OpenTextFile(fName)
cnt = i + 1
j = 1
Do While objText.AtEndOfLine <> True
If j >=fstL and j <=endL then
Cells(cnt, 2).Value = objText.ReadLine
cnt = cnt + 1
End if
Loop
i = cnt
objText.Close
End Sub
わざわざ
ご指摘ありがとうございます。
コードを書いて頂いたのに自分では難しくて
なかなか内容が把握出来ず動かせない状態です。
もし、ご迷惑でなければ内容を教えて頂けないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCでMOUSEORG関数が上手く処...
-
なぜシフトJISにロシア語がある...
-
PreviewKeyDownイベントが2回...
-
Nullの使い方が不正です。
-
フィルターかけた後、重複を除...
-
QRコードの印刷
-
ワークシートチェンジで曜日を...
-
1日に1人がこなせるプログラム...
-
1、Rstudioで回帰直線を求める...
-
MIPSコードへの変換
-
ゲームのアルゴリズム
-
変数名「cur」について
-
JavaScriptの定数名が取り消し...
-
Objective-Cの繰返しアニメーシ...
-
access2021 VBA メソッドまたは...
-
VBA:テキストファイルの抽出に...
-
ACCESSユニオンクエリでORDER B...
-
木偏に「久」
-
sinカーブの表示のさせ方
-
アクセスで桁数を増やしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
sinカーブの表示のさせ方
-
access2003 クエリSQL文に...
-
access2021 VBA メソッドまたは...
-
変数名「cur」について
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
Exel VBA 別ブックから該当デ...
-
Excel VBA素人です。VBAで図形...
-
ACCESSユニオンクエリでORDER B...
-
VBAでファイルオープン後にコー...
-
Nullの使い方が不正です。
-
COBOLの文法
-
PreviewKeyDownイベントが2回...
-
SQL
-
VB6のComboBox関連の書き方をVB...
-
【VB6】実行ファイルとした後、...
-
エクセルに見えない文字(JISX0...
おすすめ情報