プロが教える店舗&オフィスのセキュリティ対策術

下記のマクロは先日教えていただいたマクロで
作業ブックの指定セル値を別ブックの指定セルにコピー出来るマクロですが
コピー元のセル値を複数指定し、コピー先のセル値も同じく複数指定したいのですが、
コードを下記のように設定しても上手く行きませんでした。
Book1の値をコピー
ThisWorkbook.Sheets("1").Range("F10,F12").Copy
'Book2に値貼り付け
Workbooks("【連動版】行政報告チェックリスト(戸建て).xlsm").Sheets("建築物(確認申請)(第1号様式)").Range("C1,E4") = ThisWorkbook.Sheets("1").Range("F10,F12").Value

解決方法を教えてください。
現行のマクロ
Sub 新行政報告にコピー()
'コピー先のファイルを開く
Workbooks.Open ThisWorkbook.Path & "\【連動版】行政報告チェックリスト(戸建て).xlsm"


'Book1の値をコピー
ThisWorkbook.Sheets("1").Range("F10").Copy

'Book2に値貼り付け
Workbooks("【連動版】行政報告チェックリスト(戸建て).xlsm").Sheets("建築物(確認申請)(第1号様式)").Range("C1") = ThisWorkbook.Sheets("1").Range("F10").Value

Workbooks("【連動版】行政報告チェックリスト(戸建て).xlsm").Save
Workbooks("【連動版】行政報告チェックリスト(戸建て).xlsm").Close
End Sub

質問者からの補足コメント

  • コードをコピペして指定セルを変更する方法が1番良い方法ですか?
    よろしくお願いします

      補足日時:2024/04/06 11:19

A 回答 (4件)

直接、本件の質問とは関係ありませんが、


ブック名、及びシート名で長い名前があると、それを何回も使う場合などは
マクロが横に長くなり、冗長的になってしまいます。

以下のようにすると、マクロがすっきりし、簡単になります。
Sub 新行政報告にコピー2()
'コピー先のファイルを開く
Dim wbk2 As Workbook
Set wbk2 = Workbooks.Open(ThisWorkbook.Path & "\【連動版】行政報告チェックリスト(戸建て).xlsm")
'Book2に値貼り付け
Dim wsh1 As Worksheet
Dim wsh2 As Worksheet
Set wsh1 = ThisWorkbook.Sheets("1")
Set wsh2 = wbk2.Sheets("建築物(確認申請)(第1号様式)")
wsh2.Range("C1") = wsh1.Range("F10").Value
wsh2.Range("E4") = wsh1.Range("F12").Value
wbk2.Save
wbk2.Close
    • good
    • 0
この回答へのお礼

回答ありがとうございます
早速試させていただきます
感謝感謝です♪

お礼日時:2024/04/06 16:34

コードを記載する際に、



コード中の改行
https://ribbit.konomi.app/vba/line-break/

Withって何ですか?
http://officetanaka.net/excel/vba/beginner/16.htm

などで見易さや簡素化も役立つものです。
    • good
    • 0
この回答へのお礼

色々と教えて頂きありがとうございます

お礼日時:2024/04/06 19:43

状況が良くわかりませんので補足部分だけ。



多分コードが異常に増えるでしょうから、変更したい箇所についてFor Eachで行なうか別途関連リスト表を作成したシートから情報を得るのが楽じゃないかな?
    • good
    • 0

素直に



Workbooks("【連動版】行政報告チェックリスト(戸建て).xlsm").Sheets("建築物(確認申請)(第1号様式)").Range("C1") = ThisWorkbook.Sheets("1").Range("F10").Value
Workbooks("【連動版】行政報告チェックリスト(戸建て).xlsm").Sheets("建築物(確認申請)(第1号様式)").Range("E4") = ThisWorkbook.Sheets("1").Range("F12").Value

と2行分(2つのセル分)、書くのが良いかと思います。
もし、転記元、転記先のセルが10以上とかで、かなり多いなら
以下の方法でも可能です。(例では2つのセルの場合)
Dim rg1str As Variant: rg1str = "C1,E4"
Dim rg2str As Variant: rg2str = "F10,F12"
Dim rg1tbl As Variant: rg1tbl = Split(rg1str, ",")
Dim rg2tbl As Variant: rg2tbl = Split(rg2str, ",")
Dim i As Long
For i = 0 To UBound(rg1tbl)
Workbooks("【連動版】行政報告チェックリスト(戸建て).xlsm").Sheets("建築物(確認申請)(第1号様式)").Range(rg1tbl(i)).Value = ThisWorkbook.Sheets("1").Range(rg2tbl(i)).Value
Next

尚、以下の
ThisWorkbook.Sheets("1").Range("F10").Copy
は、この場合意味がないので、削除しても問題ありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
詳しく教えて頂き感謝します
早速試させて頂きます

お礼日時:2024/04/06 14:08

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A