ちょっと先の未来クイズ第4問

複数のブックを新しいブックのSheetにまとめたいのですが、複数のブックのデータをコピーして値貼り付けにしたいのです。
過去の記事を参考にして、下記のvbaがあるのですが、これを値貼り付けにするにはどこを変更.したらいいでしょうか。教えてくださいませ。

Sub Sample1()
Dim buf As String, i As Long
Dim j
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Do While buf <> ""
Workbooks.Open Worksheets("Sheet1").Range("A1").Value & "\" & buf
Sheets("Sheet1").Range("A2:J1000").Copy
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Workbooks(buf).Activate
Application.CutCopyMode = False
Workbooks(buf).Close SaveChanges:=False
buf = Dir()
Loop
End Sub

A 回答 (1件)

こんにちは



>値貼り付けにしたいのです
値貼り付けって、こういうことでしょうか?
 Range(貼り付け先範囲).Vlue = Range(参照元範囲).Vlue


ご提示のコードで、コピー&ペーストしている部分は

' (開いたブックの)シート1!A2:J1000をコピー
>Sheets("Sheet1").Range("A2:J1000").Copy

' (ペーストのため、元のブックをアクティブにする)
>ThisWorkbook.Activate

' A列の最下行を選択
>Range("A65536").End(xlUp).Offset(1, 0).Select

' (コピーした内容を)ペースト(※)
>ActiveSheet.Paste

となっています。

コピーの範囲等は質問者様が調整なさるものとして…
これを上記のような「.Value = .Value」のような記述方法に書き換えるても良いのですが、ブック間の値参照になるので、Range指定の際にブック、シートなども併せて明記しておく必要があります。

あるいは、上記のコードをほぼそのまま利用するなら、普通のペーストの代わりに「形式を選択して貼り付け」-「値」を用いても良いです。
その場合は、上記の(※)の1行を
  Selection.PasteSpecial Paste:=xlPasteValues
のように変えることで可能になります。
https://msdn.microsoft.com/ja-jp/library/office/ …
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
Selection.PasteSpecial Paste:=xlPasteValues に変えて、値貼り付けができました!
ご丁寧にありがとうございました。

お礼日時:2017/06/30 10:19

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


おすすめ情報