|
▼にしもり さん:
>このようにしたら出来たみたいです。
>ありがとうございました。
思い通りに位置指定できてコピペできていれば、それでよいのですが、
自分だったら、こう書くというサンプルです
Sub Ck_Test()
Dim Files, i As Long
Dim cBook As Workbook, pBook As Workbook
Dim rCopyTo As Range
Dim m As Long
Files = Application.GetOpenFilename _
(FileFilter:="CsvFile, *.csv", MultiSelect:=True)
If IsArray(Files) Then
Set pBook = Workbooks.Add(xlWBATWorksheet)
For i = 1 To UBound(Files)
Set cBook = Workbooks.Open(Files(i))
With pBook.Worksheets(1) 'コピー先シート最終セル
Set rCopyTo = .Cells(.Rows.Count, 1).End(xlUp)
End With
m = IIf(i = 1, 0, 1) 'iが1のとき Offsetは無し
cBook.ActiveSheet.UsedRange.Offset(m).Copy _
rCopyTo.Offset(m)
cBook.Close False
Next i
End If
pBook.SaveAs Filename:="D:\Test.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
pBook.Close True
MsgBox "終了しました。"
End Sub
《修正点》
◆シートの最終行はマジックナンバー65536 を用いないほうがよい _
Set rCopyTo = .Cells(.Rows.Count, 1).End(xlUp)
◆ Workbooks.Open Files(i)
Set cBook = ActiveWorkbook
これは
Set cBook = Workbooks.Open(Files(i))
と一行で 変数にセットできます。(そのまえのpBookも同じ)
◆1つ目とそれ以降で Offset(1)するかしないか 変数mにi=1のとき _
0, それ以上 1 としておけば、コピー処理は1行で記述できる
◆CopyしてPasteSpecial貼り付け xlPasteAll → Copy と同じ
> m = IIf(i = 1, 0, 1) 'iが1のとき Offsetは無し
> cBook.ActiveSheet.UsedRange.Offset(m).Copy _
> rCopyTo.Offset(m)
◆ActiveWorkbook.Close よりせっかく変数に格納しているのだから _
pBook.Close としたほうがよい
◆また、pBook.Close の第1引数は SaveChanges ではないか?
|
|