プロが教えるわが家の防犯対策術!

EXCELのマクロを使って、テキストファイル(タブ区切り)の行列の一部分をコピーし、それを別の一つのシートに貼り付けていくことはできますでしょうか?

(複数のテキストファイルの行列を一つのシートにまとめたい、ということです)

現在やり方がわからないので、手動でEXCELを使って全てのファイルを開き、コピー、貼り付けをしています。
インポート元のファイル名はいつも異なるため、自動記録ではうまくいかなそうです。

複数のインポートファイル名を選択し、ボタン一つでコピー、ペーストが終了するのが理想的です。

よろしくお願いいたします。

A 回答 (3件)

#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, ",") 'カンマ区切り
    • good
    • 0

これは、あくまでも、タブ区切りファイルのみですから、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
    • good
    • 0

http://officetanaka.net/excel/vba/file/file02.htm

上記のページを参考に複数のファイルを開く部分を作成して、あとはループでコピーペーストの部分を作成してください。

自動記録をしてファイル名を、上記のページで参考にしたファイル名取得方法で得たファイル名に変更すれば殆ど出来上がるでしょう。

感じとして(ファイルを複数選択したらあとは自動でコピーペーストされるとしたら)


ファイルを開く部分

For i = 1 To UBound(OpenFileName)

ここにコピーペーストの部分を作成します。
OpenFileName(i)が個々のファイル名になります。

Next i


こんな流れになるでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!