- 締切済み
EXCELのマクロを使って、テキストファイル(タブ区切り)の行列の一部
EXCELのマクロを使って、テキストファイル(タブ区切り)の行列の一部分をコピーし、それを別の一つのシートに貼り付けていくことはできますでしょうか? (複数のテキストファイルの行列を一つのシートにまとめたい、ということです) 現在やり方がわからないので、手動でEXCELを使って全てのファイルを開き、コピー、貼り付けをしています。 インポート元のファイル名はいつも異なるため、自動記録ではうまくいかなそうです。 複数のインポートファイル名を選択し、ボタン一つでコピー、ペーストが終了するのが理想的です。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
#2の修正・補足 #開いたときのエラーに対するエラー処理はされていませんせ。 最後の「せ」は余分でした。 今のところ、On Error Goto ErrorHandler 程度ぐらいしか思いつきません。 拡張子の間違いなどの処理は考えていなません。 一応、 If FileLen(Fname) = 0 Then Exit Sub は、空のファイルは実行しない、ということです。 CSVに変更するには、 "TSVファイル(*.txt),*.txt", MultiSelect:=True ↓ "CSVファイル(*.csv),*.csv", MultiSelect:=True Ar = Split(TextLine, vbTab) 'Tab区切り ↓ Ar = Split(TextLine, ",") 'カンマ区切り
- Wendy02
- ベストアンサー率57% (3570/6232)
これは、あくまでも、タブ区切りファイルのみですから、CSVには変更が必要です。 ファイルを開いたときのエラーに対するエラー処理はされていませんせ。 '// Sub CSVMultiImport() Dim FileNames As Variant Dim f As Variant Dim i As Long Dim num As Long '初期行(0 が、1行目) Const nSTART As String = "A1" 'スタートセル FileNames = Application.GetOpenFilename("TSVファイル(*.txt),*.txt", MultiSelect:=True) If VarType(FileNames) = vbBoolean Then Exit Sub End If For Each f In FileNames CSV2Sheet f, Range(nSTART), num i = i + 1 Next If num > 0 Then MsgBox CStr(i) & " 個のファイルを処理しました。", vbInformation End If End Sub Sub CSV2Sheet(ByVal Fname As String, rng As Range, ByRef num As Long) '引数 Fname:CSVファイル名,スタートセル,数字-ユーザー設定不要 Dim FNumber As Integer Dim TextLine As String Dim Ar As Variant Dim i As Long, j As Long FNumber = FreeFile() If FileLen(Fname) = 0 Then Exit Sub Application.ScreenUpdating = False Open Fname For Input As #FNumber Do Until EOF(FNumber) Line Input #FNumber, TextLine If TextLine <> "" Then Ar = Split(TextLine, vbTab) 'Tab区切り j = UBound(Ar) + 1 rng.Offset(num).Resize(, j).Value = Application.Transpose(Ar) On Error GoTo 0 End If num = num + 1 Loop Close #FNumber Application.ScreenUpdating = False num = num + 1 '次のファイルのインポート時に一行空ける End Sub
- kmetu
- ベストアンサー率41% (562/1346)
http://officetanaka.net/excel/vba/file/file02.htm 上記のページを参考に複数のファイルを開く部分を作成して、あとはループでコピーペーストの部分を作成してください。 自動記録をしてファイル名を、上記のページで参考にしたファイル名取得方法で得たファイル名に変更すれば殆ど出来上がるでしょう。 感じとして(ファイルを複数選択したらあとは自動でコピーペーストされるとしたら) ファイルを開く部分 For i = 1 To UBound(OpenFileName) ここにコピーペーストの部分を作成します。 OpenFileName(i)が個々のファイル名になります。 Next i こんな流れになるでしょう。