検索して、詳しい人が作成した以下のマクロをみつけて、これを使わせていただこうと思ったのですが、
この例だと、指定したフォルダー内の複数あるテキストファイルから、データを取得する際に、見本は見出しとデータが1行分だけで、その2行目のデータのみを取得しています。
私はテキストデータの10行めから、7行ずつ取得したいのですが、このVBAの変更方法がわかりません。
詳しい方に教えていただきたく、どうかよろしくお願いいたします。
'指定フォルダの全テキストの任意行を取得
Sub GetAllTextData()
'フォルダ指定用のダイアログを表示します
With Application.FileDialog(msoFileDialogFolderPicker)
'カレントディレクトリを指定します
.InitialFileName = ThisWorkbook.Path
'設定しなかったら終了します
If .Show = False Then Exit Sub
'設定したフォルダを表示します
Dim Fname
Fname = .SelectedItems(1)
End With
'参照設定
Dim FSO As Object, Folder As Variant, File As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim FilePath As Variant
ReDim FilePath(1 To 100) As Variant
'指定フォルダ内の.txtファイルを探索します
i = 0
For Each File In FSO.GetFolder(Fname).Files
If InStr(File.Name, ".txt") > 0 Then
i = i + 1
FilePath(i) = File.Path 'ファイルのフルパスを取得
End If
Next
'配列の大きさは状況に応じ変更してください
Dim Hozon, GetData As Variant
ReDim GetData(1 To 100, 1 To 100) As Variant
'全テキストファイルの任意行のデータを取得する
m = 0
For k = 1 To UBound(FilePath, 1)
'テキストファイルが存在する場合に実行
If IsEmpty(FilePath(k)) = False Then
'保存する配列を空にする
ReDim Hozon(1 To 100, 1 To 100) As Variant
'テキストを開いて配列にデータを保存
Open FilePath(k) For Input As #1
i = 0
'テキストをすべて取得する
Do Until EOF(1)
Line Input #1, buf
i = i + 1
'コンマ区切りでデータを取得する
a = Split(buf, ",")
For j = 0 To UBound(a, 1)
Hozon(i, j + 1) = a(j)
Next
Loop
Close #1
'▼取得したいデータに応じ変更してください
'任意行の値を取得する
i = 2 '2行目のデータを取得
m = m + 1
For j = 1 To UBound(Hozon, 2)
GetData(m, j) = Hozon(i, j)
Next
End If
Next
'データ貼り付け
With ActiveSheet
.Range(.Cells(2, 1), .Cells(2, 1).Offset(UBound(GetData, 1) - 1, UBound(GetData, 2) - 1)) = GetData
End With
End Sub
No.7ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
元のマクロの使える部分のみ流用しています。
Option Explicit
'指定フォルダの全テキストの任意行を取得
Sub GetAllTextData()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
'フォルダ指定用のダイアログを表示します
With Application.FileDialog(msoFileDialogFolderPicker)
'カレントディレクトリを指定します
.InitialFileName = ThisWorkbook.Path
'設定しなかったら終了します
If .Show = False Then Exit Sub
'設定したフォルダを表示します
Dim Fname
Fname = .SelectedItems(1)
End With
'参照設定
Dim FSO As Object, Folder As Variant, File As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim FilePath As Variant
ReDim FilePath(100) As Variant
'指定フォルダ内の.txtファイルを探索します
Dim fcount As Long
fcount = 0
For Each File In FSO.GetFolder(Fname).Files
If Right(File.Name, 4) = ".txt" Then
FilePath(fcount) = File.Path 'ファイルのフルパスを取得
fcount = fcount + 1
End If
Next
ws.Cells.ClearContents
Dim i As Long
Dim line_no As Long
Dim wrow_st As Long
Dim wrow As Long
Dim buf As String
Dim elm As Variant
Dim no_elm As Long
'全テキストファイルの任意行のデータを取得する
For i = 0 To fcount - 1
wrow_st = 8 * i + 2
wrow = wrow_st
'テキストを開いて配列にデータを保存
Open FilePath(i) For Input As #1
line_no = 0
'テキストをすべて取得する
Do Until EOF(1)
Line Input #1, buf
line_no = line_no + 1
If line_no >= 10 And line_no <= 16 Then
'コンマ区切りでデータを取得する
elm = Split(buf, ",")
no_elm = UBound(elm) + 1
If line_no = 10 Then
ws.Cells(wrow, 1).Value = "テキストNo" & (i + 1)
End If
ws.Cells(wrow, 2).Resize(, no_elm).Value = elm
wrow = wrow + 1
End If
Loop
Close #1
Next
MsgBox ("完了")
End Sub
No.5
- 回答日時:
Noです。
ファイルの処理順序ですが、エクスプローラで表示されている順番通りには処理されませんが宜しいでしょうか。
例えば、添付図には、data1.txt~data10.txtが表示されていますが、
data1.txt,data2.txt,data3.txt・・・data10.txt
の順番に処理されません。よろしいでしょうか。
No.4
- 回答日時:
補足ありがとうございました。
出力先ですが、"Sheet1"へ以下のように設定します
1.A列は「テキストNo1」+1からの連番 で良いですね。
(10行目のみ)
2.B列は「T1」で良いですね。
3.C列、D列、E列は、項目1,項目2,項目3を設定します。以降の列も同様
上記でよろしいでしょうか。
No.3
- 回答日時:
補足要求です。
1.今回のテキストファイルの実際の列は4列ということですか。
2.出力結果のA2に「テキストNo1」とありますが、これは固定文字ですか。(A10等も同様)
3.出力結果のB2,C2,D2,E2は、テキストファイルの1行目の1,2,3,4列の内容を設定するのですか。
それとも、商品名、色、値段、在庫数の固定文字ですか。
4.テキストファイルの10行目から7行取得する場合は、最低でも16行必要になります。
全てのテキストファイルは16行以上ありますか。
No.2
- 回答日時:
こんにちは
ご質問の文章では明示されていませんけれど、添付図を見ると
・1列目にはファイル名を入れる
・ファイルとファイルの間は1行分空行を入れる
みたない感じがしますけれど、そちらでよいでしょうか?
元のコードが全体の行数や項目数に限定が設けられていますけれど、それはそのままでよいものとして、部分修正でできる方法として、
「'▼取得したいデータに応じ変更してください」
のところを以下のように変更すればできます。
GetData(m + 1, 1) = FSO.getfilename(FilePath(k)) ' ファイル名を追加
For i = 10 To 16 ' 取得する行数を設定
m = m + 1
For j = 1 To UBound(Hozon, 2) - 1
GetData(m, j + 1) = Hozon(i, j)
Next j
Next i
m = m + 1 ' ファイル間で1行分空ける
No.1
- 回答日時:
こんばんは
方法はいくつかありそうですが、、
ざっくりコードを読んだ感じ、GetData配列を作るところで
操作すれば良いと思います。
多分、該当部分
'▼取得したいデータに応じ変更してください
'任意行の値を取得する
i = 10 '2行目のデータを取得
While i < 17
m = m + 1
For j = 1 To UBound(Hozon, 2)
GetData(m, j) = Hozon(i, j)
Next
i = i + 1
Wend
End If
Next
'データ貼り付け
試していないのでステップ実行などでデバッグしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
【VBA】テキストファイルから特定の文字列を抽出して、エクセルに出力する
Excel(エクセル)
-
複数のテキストファイルをexcelでそれぞれ別シートに書き出したい
Excel(エクセル)
-
特定フォルダ内のテキストファイルの内容を全てエクセルに書き出す方法
Visual Basic(VBA)
-
-
4
エクセルマクロで同じフォルダ内のテキストファイルをメモ帳で開く方法
Excel(エクセル)
-
5
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
6
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
7
VBAでテキストファイルを複数開いて順番に処理する方法がわからないです。
Visual Basic(VBA)
-
8
【VBA ・ エクセル】 テキストファイルから特定情報をぬきだすには
Visual Basic(VBA)
-
9
テキストファイルから指定行をExcelに抽出したい。
Excel(エクセル)
-
10
複数のテキストファイルを一括でエクセルに取り込みたい。
Excel(エクセル)
-
11
【VBA】複数のtxtファイルから特定区間の複数行を呼び出し、エクセルにまとめたい。
Visual Basic(VBA)
-
12
マクロを使ってフォルダー内にあるtxtデータをエクセルにデータに変換する方法をご教授願います
Excel(エクセル)
-
13
同一フォルダにある複数のテキストファイル(メモ帳)を一括でエクセルに取り込みたいです。
Visual Basic(VBA)
-
14
複数のテキストファイルをエクセルに一括で取り込みたい
Excel(エクセル)
-
15
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
16
vbsでテキストファイル内の文字列検索
Visual Basic(VBA)
-
17
テキストファイルの一部分を抽出する方法について
Visual Basic(VBA)
-
18
split関数で区切り文字がない場合
Visual Basic(VBA)
-
19
テキストファイルの途中行から読み込む方法について
Visual Basic(VBA)
-
20
VBAでCSVファイルを途中行まで読んだ後で最初の行から読み直す方法はありますか?
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
C# DataTableに最後に追加した...
-
「Nullの使い方が不正です」の...
-
VBAコンボボックスの内容が反映...
-
【C#】textBoxの指定行のデータ...
-
Web画面のTableから数字を取得...
-
VB6のMsFlexGridコントロールに...
-
COBOL数値転記の仕様
-
【VB.NET】Excelの最終行までの...
-
エクセルのマクロ コンボボッ...
-
VBAでアクセスDBからデータの取...
-
ExcelVBAで戻り値を返すには
-
【エクセルVBA】DBのデータをCSVに
-
VB2010で、選択した系列を最前...
-
エクセルのCSV読み込みについて
-
oo4oによるBLOBデータ取得
-
矩形グラフ(オシロやロジアナ...
-
VBとアクセスでSQL文に変...
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
VBAコンボボックスの内容が反映...
-
C# DataTableに最後に追加した...
-
COBOL数値転記の仕様
-
「Nullの使い方が不正です」の...
-
ListViewで表示されたデータの...
-
アクセスでウェブ上のデータを...
-
クリスタルレポートでレコード...
-
非同期のプロセス間通信(パイプ...
-
【ExcelVBA】値を変更しながら...
-
MSFlexGrid 行選択状態
-
【VB.NET】Excelの最終行までの...
-
Excel VBA で日付を4ケタの数値...
-
エクセルのCSV読み込みについて
-
エクセルVBA WEBからデータ取...
-
Excel VBAでグループ毎に集計す...
-
Excel VBAで1週間毎にカテゴリ...
-
【エクセルVBA】DBのデータをCSVに
おすすめ情報
補足させていただきます。
テキストファイルは、10行目に
「T1」,項目1,項目2,項目3,項目4,項目5,項目6,項目7,項目8,と40くらいまであります。この項目名と項目数はすべてのテキストファイルで同じです。
11行目は、「T1」,10,55,45,85,62,44,33,20・・・・と項目ごとの数値がカンマ区切りで続きます。12行目も11行目と同じです。
テキストファイルの行数と列数はすべて同じで、17行あり17行めは「/」で終わります。
今は、テキストファイルを1つずつ開いて、10行から16行をコピーして、Excelに貼り付け、区切り位置ウィザードで区切って使用しています。
テキストファイルが40くらいあることもあり、これがマクロでできれば本当に助かります。よろしくお願いいたします。m(__)m
いろいろ考えてくださり、ありがとうございます。
出力先はSheet1です。項目の設定もおっしゃるとおりです。
丁寧な資料を添付してくださり、ありがとうございます。