例えば
テキストファイルは100個あります。
内容の書式は全部同じです。
100個のファイルの中に50行目と80行目のデータが欲しいです。
ファイル名はDATA1~DATA100
ファイル名もほしいです。
中身は:
...
あいうえおかきくけこ '50行目
...
...
らりるれろやゆよ '80行目
...
↓↓↓↓
ファイル名 50行目 80行目
DATA1 あいうえおかきくけこ らりるれろやゆよ
DATA2 あいうえおかきくけこ らりるれろやゆよ
DATA3 あいうえおかきくけこ らりるれろやゆよ
DATA4 あいうえおかきくけこ らりるれろやゆよ
こういうようにExcel に入れてほしいです。
色んな方法でやってみましたが、うまく行きませんでした。
VBAの知識が不足の為、勝手を申しますが詳しくご教示頂けると幸いです。
No.1ベストアンサー
- 回答日時:
手持ちのコードが改造できそうでしたのでアドバイスと言うより、作成しました。
コードに付いては少々長いので、各コードなどの説明は、省略させていただきます。
テキストファイルに80行満たないものがあるとエラーになり(一応Nextしている)ファイル名のみ
出力されます。
出力先は、アクティブシートのABC列です。
100ファイル位なら問題はないと思います。
プロセスは、対象が入っているフォルダを選択
フォルダ内のtxtファイルを配列に入れ、名前順にソート
順番に対象を開き FSOでターゲットLine迄SkipLineで飛ばし目的に達したら
Variant配列に書き込みSplitでセルに出力しています。
スタートプロシージャは手持ち改造の為、 Sub FileIn_Sort() です。
必要に応じ変更してください。
Option Explicit
'ソートのためのAPI読み出し宣言
Declare PtrSafe Function StrCmpLogicalW Lib "SHLWAPI.DLL" _
(ByVal lpStr1 As String, ByVal lpStr2 As String) As Long
Sub bubble_sort_API(ByRef StrArr() As String) 'APIでのソート
Dim i As Long, j As Long
Dim tmp As String
For i = LBound(StrArr) To UBound(StrArr)
For j = i To UBound(StrArr)
If StrCmpLogicalW(StrConv(StrArr(i), vbUnicode), StrConv(StrArr(j), vbUnicode)) > 0 Then
tmp = StrArr(i)
StrArr(i) = StrArr(j)
StrArr(j) = tmp
End If
Next j
Next i
End Sub
Sub FileIn_Sort() ’スタート
Dim i As Long, ix As Long
Dim Folder_path As String
Dim MergeWorkbook As String, FileType As String
Dim fileName() As String
i = 1
If Application.FileDialog(4).Show = True Then
Folder_path = Application.FileDialog(4).SelectedItems(1)
FileType = "\*.txt"
End If
MergeWorkbook = Dir(Folder_path & FileType)
'---ファイル抽出 start
Do
ReDim Preserve fileName(i)
fileName(i) = MergeWorkbook
i = i + 1
MergeWorkbook = Dir()
Loop Until MergeWorkbook = ""
'---ファイル抽出 stop
Call bubble_sort_API(fileName()) 'ソート呼び出し
'API昇順ファイル名(配列)で処理
For ix = 1 To UBound(fileName)
' メイン処理
Call Trg_ReadLine(Folder_path, fileName(ix))
Next
MsgBox ("終了しました")
End Sub
Sub Trg_ReadLine(filepath As String, fileName As String) ’メイン処理
'ファイルの指定行を読込
Dim searchLineMax As Long: searchLineMax = 80
Dim TargetLine1 As Long: TargetLine1 = 50
Dim TargetLine2 As Long: TargetLine2 = 80
Dim i As Long, cellRow As Long
Dim fso As Object, ts As Object
Dim StrDate As Variant
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(filepath & "\" & fileName) ' ファイルを開く
StrDate = fileName
On Error Resume Next '行数がない場合の対策
For i = 1 To searchLineMax
If i = TargetLine1 Then StrDate = StrDate & "," & ts.ReadLine
If i = TargetLine2 - 1 Then
StrDate = StrDate & "," & ts.ReadLine
Exit For
End If
ts.SkipLine
Next i
With ActiveSheet
cellRow = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A" & cellRow + 1).Resize(, 3) = Split(StrDate, ",")
End With
ts.Close
Set ts = Nothing
End Sub
No.3
- 回答日時:
文字化けする場合は
i = 2
For Each myF In CreateObject("Shell.Application").Namespace(ActiveWorkbook.Path & "\").Items
If Right(myF.Name, 4) = ".txt" Then
Range("A" & i) = myF.Name
With CreateObject("ADODB.Stream")
.Charset = "SHIFT_JIS"
.Open
.LoadFromFile (ActiveWorkbook.Path & "\" & myF.Name)
textline = .readText(-1)
splitt = Split(textline, vbCrLf)
Range("B" & i) = splitt(49)
Range("C" & i) = splitt(79)
.Close
End With
i = i + 1
End If
No.2
- 回答日時:
エクセルと同じ場所にtxtを置きます
i = 2
For Each myF In CreateObject("Shell.Application").Namespace(ActiveWorkbook.Path & "\").Items
If Right(myF.Name, 4) = ".txt" Then
Range("A" & i) = myF.Name
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile (ActiveWorkbook.Path & "\" & myF.Name)
textline = .readText(-1)
splitt = Split(textline, vbCrLf)
Range("B" & i) = splitt(49)
Range("C" & i) = splitt(79)
.Close
End With
i = i + 1
End If
ご回答ありがとうございます。
やってみましたが、うまく行きませんでした。
subとnextを補足しましたが、データは全然入れません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) VBAで自動集計(特定セルコピー月ごとに値貼り付け)したい。 6 2023/06/25 11:37
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) Excel使用前提 同じフォルダ内にあるファイルの集約等をマクロでできますか 4 2022/09/06 19:03
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
テキストファイルの途中行から読み込む方法について
Visual Basic(VBA)
-
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
-
4
ExcelVBA テキストファイルから特定行を抽出し、エクセルファイルのテキストボックスに張り付ける
その他(コンピューター・テクノロジー)
-
5
ReadLineでの読み出し行を指定する
Visual Basic(VBA)
-
6
VBAでCSVファイルを途中行まで読んだ後で最初の行から読み直す方法はありますか?
その他(プログラミング・Web制作)
-
7
【VBA】テキストファイルから特定の文字列を抽出して、エクセルに出力する
Excel(エクセル)
-
8
EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法
Visual Basic(VBA)
-
9
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
-
10
マクロを使ってフォルダー内にあるtxtデータをエクセルにデータに変換する方法をご教授願います
Excel(エクセル)
-
11
Excel VBAでフォルダ内の全テキストファイルの任意データを取得について
Visual Basic(VBA)
-
12
ある文字列を含む行の抽出
Excel(エクセル)
-
13
VBAで巨大なファイルの途中からの読み込み
Visual Basic(VBA)
-
14
テキストファイルの一部分を抽出する方法について
Visual Basic(VBA)
-
15
VBAでCSVの1行目だけを書き換える方法
Excel(エクセル)
-
16
【VBA】複数のtxtファイルから特定区間の複数行を呼び出し、エクセルにまとめたい。
Visual Basic(VBA)
-
17
同一フォルダにある複数のテキストファイル(メモ帳)を一括でエクセルに取り込みたいです。
Visual Basic(VBA)
-
18
エクセルでエラーが出て困っています。
Excel(エクセル)
-
19
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
20
テキストファイルから指定行をExcelに抽出したい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6側からテキストファイルをク...
-
fortranでのcsvファイルを出力...
-
BCPユーティリティの使用法_...
-
iniファイルとの比較(iniファイ...
-
複数行の文字列を変数として使...
-
VBAでPowerPointからExcelにデ...
-
秀丸の正規表現
-
fortranでファイルから数値を読...
-
VBAで任意のフォルダ内のファイ...
-
Rubyで外部ファイル内の文字列...
-
Excel.VBA テキストファイルを...
-
テキストファイルの1行目のみを...
-
コマンドプロンプトの「%1」と...
-
バッチでテキストファイルから...
-
コマンドプロンプトのエラーに...
-
大量のフォルダからひとつのフ...
-
カシミール3D 無料インストール
-
バッチ終了時にDOS窓を閉じるコ...
-
exeファイルを実行するとコマン...
-
アクセス 壊れた? 「ファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6側からテキストファイルをク...
-
VBAで新しい日付順にファイルを...
-
VBAでPowerPointからExcelにデ...
-
特定フォルダ内のテキストファ...
-
BCPユーティリティの使用法_...
-
ある文字列を含む行の抽出
-
access vbaでCSVファイルを文...
-
テキストファイルを直接置換す...
-
複数行の文字列を変数として使...
-
テキストファイルの行頭に文字...
-
A列をテキストファイル名に、B...
-
バッチでiniファイルの編集
-
Excel.VBA テキストファイルを...
-
fortranでのcsvファイルを出力...
-
unicode文字列(日本語)のファイ...
-
RandomとBinaryモードの違い
-
ソースコードの差分がある行番...
-
c言語の問題です
-
C#でのファイル編集と上書き保...
-
VBAで任意のフォルダ内のファイ...
おすすめ情報