

例えば
テキストファイルは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)
-
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
テキストファイルの途中行から読み込む方法について
Visual Basic(VBA)
-
-
4
【VBA】テキストファイルから特定の文字列を抽出して、エクセルに出力する
Excel(エクセル)
-
5
テキストファイルの一部分を抽出する方法について
Visual Basic(VBA)
-
6
【VBA】複数のtxtファイルから特定区間の複数行を呼び出し、エクセルにまとめたい。
Visual Basic(VBA)
-
7
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
8
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
9
テキストファイルから指定行をExcelに抽出したい。
Excel(エクセル)
-
10
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
11
ReadLineでの読み出し行を指定する
Visual Basic(VBA)
-
12
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
13
VBAでCSVファイルを途中行まで読んだ後で最初の行から読み直す方法はありますか?
その他(プログラミング・Web制作)
-
14
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
15
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
-
18
テキストファイル読み込みにおける開始行および開始列指定
Visual Basic(VBA)
-
19
ExcelVBA テキストファイルから特定行を抽出し、エクセルファイルのテキストボックスに張り付ける
その他(コンピューター・テクノロジー)
-
20
複数のテキストファイルをエクセルに一括で取り込みたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの中身を操作し...
-
VBAで任意のフォルダ内のファイ...
-
VBAでPowerPointからExcelにデ...
-
ある文字列を含む行の抽出
-
VB6側からテキストファイルをク...
-
unicode文字列(日本語)のファイ...
-
正規表現を使って、日英の2行...
-
複数行の文字列を変数として使...
-
BCPユーティリティの使用法_...
-
C言語でのファイルの読み込み方
-
特定フォルダ内のテキストファ...
-
fortranでのcsvファイルを出力...
-
A列をテキストファイル名に、B...
-
時間短縮のために、テキストフ...
-
VBSを用いてIPアドレスを取得し...
-
VBAで新しい日付順にファイルを...
-
batファイルで設定ファイル読み...
-
RandomとBinaryモードの違い
-
Excel.VBA テキストファイルを...
-
大量のフォルダからひとつのフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ある文字列を含む行の抽出
-
特定フォルダ内のテキストファ...
-
VBAでPowerPointからExcelにデ...
-
VB6側からテキストファイルをク...
-
BCPユーティリティの使用法_...
-
Excel.VBA テキストファイルを...
-
unicode文字列(日本語)のファイ...
-
テキストファイルの行頭に文字...
-
access vbaでCSVファイルを文...
-
複数行の文字列を変数として使...
-
バッチでiniファイルの編集
-
excelにテキストファイルの指定...
-
RandomとBinaryモードの違い
-
時間短縮のために、テキストフ...
-
テキストファイルを直接置換す...
-
VB.NETでテキストファイルからH...
-
C#でのファイル編集と上書き保...
-
ExcelVBAで以下のマクロを作成...
-
VBSを用いてIPアドレスを取得し...
-
VBAで新しい日付順にファイルを...
おすすめ情報