ここから本文です

マクロで、ファイルを開いて、あるシートの範囲のみマクロブックの対象シートにコ...

ne1********さん

2017/6/2609:43:04

マクロで、ファイルを開いて、あるシートの範囲のみマクロブックの対象シートにコピペしたい。

こんにちわ。
マクロ初心者です。

スマホからの為、一部省略しています。

wbはコピー先ファイル
wb2はコピー元ファイル
SH1はThisWorkbookに設定シートを作り、
そこに左から、ファイル名、シート名、コピー範囲、シート名、貼り付け範囲の列があり、値をもっています。
ファイルの数分、開いて、コピぺしてを繰り返しています。

For i = 2 To LastRow

Set wb2 = Workbooks.Open(ThisWorkbook.Path & ”/” & SH1.Cells(i,1).Value & ”.xlsx”)
シート名で開き、


wb2.sheets(SH1.Cells(i,2).Value ).select
シート選択

aaa = SH1.Cells(i,3).Value
Activesheet.Range(aaa).Copy
対象エリアをコピー

wb.Sheets(SH1.Cells(i,4).Value).select★
コピー先ファイル対象シート選択

bbb = SH1.Cells(i,5).Value
ActiveSheet.Range(bbb).Paste
対象エリアに貼り付け

wb2.Close
Next i

デバッグすると、
★の行で、実行エラー1004アプリケーション定義またはオブジェクト定義のエラーとでます。
それまでは希望通り、開き、シート選択し、コピーしています。


★部分は、コピー元の対象シート選択する際と同じようにしたのですが、
なぜエラーとなるのか分かりません…
シート名相違がないよう、コピー元ファイルのシート名をコピーして、
マクロブックの設定シートに貼り付けました。
どうかアドバイスいただけたら嬉しいです。

補足最後の、Pasteの行で、実行エラー438がでます。オブジェクトはプロパティまたはメソッドをサポートしていませんと。
Pasteだけじゃダメということでしょうか?

閲覧数:
72
回答数:
4
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

hig********さん

2017/6/2610:26:27

wb.Sheets(SH1.Cells(i,4).Value).select★
この上に
msgbox SH1.Cells(i,4).Value
msgbox wb.name
を入れて実行してみて下さい。意図した値が出て来ますか?

  • 質問者

    ne1********さん

    2017/6/2610:30:04

    返信ありがとうございます
    早速実行してみました。
    シート名、ブック名共に、正しい名前が出ました。
    が、★部分にきたら実行エラーがでます。。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2017/6/26 13:55:31

はじめに私が書いたコードの流れで、
最後をActiveSheet.Range(bbb).PasteSpecial
と直してみたら、動きました!
まとめる方法や色々なコードを教えてくださり、ベストアンサーは皆さんにあげたいのですが…
本当に助かりました。皆さん、ありがとうございます
また質問すると思いますが、よろしくお願い申し上げます!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

ask********さん

2017/6/2613:21:38

ActivateやSelectをしなくても、コピペ処理はできます。

下記コードでは、sh1を下記のようにしています。

Set wb = ThisWorkbook
Set sh1 = wb.Sheets("Sheet1")

Set copySh = wb2.Sheets("" & sh1.Cells(i, 2).Value & "")
Set pasteSh = wb.Sheets("" & sh1.Cells(i, 4).Value & "")

Sheets("" & sh1.Cells(i, 2).Value & "")
↑のように""を連結すれば、シート名が 1 のように、数値になっている場合にも処理できます。

Application.DisplayAlerts = False
wb2.Close False

警告表示をオフにすることで、クリップボードの内容を[保存or削除]の確認メッセージ表示を省略できます。

※添付画像は、sh1です。

For i = 2 To 2
まずは、↑のようにして、処理が正しく実行されるか確認をします。

ーーーーーーーーーーーー
Sub サンプル6()
Dim wb As Workbook
Dim wb2 As Workbook
Dim sh1 As Worksheet
Dim copySh As Worksheet
Dim pasteSh As Worksheet
Dim i As Long
Dim p As String
Application.ScreenUpdating = False
Set wb = ThisWorkbook
Set sh1 = wb.Sheets("Sheet1")

'For i = 2 To sh1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To 2
p = ThisWorkbook.Path & "\" & sh1.Cells(i, 1).Value & ".xlsx"
Set wb2 = Workbooks.Open(p)
Set copySh = wb2.Sheets("" & sh1.Cells(i, 2).Value & "")
Set pasteSh = wb.Sheets("" & sh1.Cells(i, 4).Value & "")

copySh.Range(sh1.Cells(i, 3).Value).Copy _
Destination:=pasteSh.Range(sh1.Cells(i, 5).Value)

Application.DisplayAlerts = False
wb2.Close False
Application.DisplayAlerts = True
Next i
Application.ScreenUpdating = True
End Sub

ActivateやSelectをしなくても、コピペ処理はできます。...

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

vcx********さん

2017/6/2610:46:32

ne1122nr44nj1211さん

シートを Select するならブックがアクティブじゃないとダメなのでは?

wb.Activate '←この行を加えたら?
'↓ここの上に
wb.Sheets(SH1.Cells(i, 4).Value).Select '★

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

2017/6/2609:50:38

そのシート名が
・日付を表示形式を変えている
・文字列にして先頭などに"0"をつけてる
とかなら

.Value を .Textにしてみるとか?
(表示されてる通りの値を取得する)

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる