• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロのコピペについて)

マクロのコピペについての助け

このQ&Aのポイント
  • マクロのコピペについての2回目の処理について助けてください。具体的には、2回目に実行ボタンをクリックした際に特定の条件を満たす場合に、特定の行にコピーを行いたいです。
  • 質問者は、マクロのコード中で2回目の処理(Action2)を実行したいとしています。具体的には、特定の行に対応する値がある場合に、その行の2行下の行にあるデータをコピーして他のシートに貼り付けたいとのことです。
  • 具体的な処理の説明が不足しているため、詳細な記述方法はわかりません。しかし、条件を満たした行の特定のセルにアクセスする方法を知っている場合、そのセルに基づいてコピーと貼り付けを行うコードを作成することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

こんなコードでいかがでしょうか。 Sub Action1or2()  Static ChkNext As Boolean    Dim WS1 As Worksheet  Dim WS2 As Worksheet  Dim WS3 As Worksheet  Dim WS4 As Worksheet    With ThisWorkbook      Set WS1 = .Sheets("様式1(作業用)")   Set WS2 = .Sheets("様式2(管理表)")   Set WS3 = .Sheets("様式3(チェック表)")   Set WS4 = .Sheets("様式4(22F倉庫用)")     If ChkNext = False Then    ChkNext = True    MsgBox "1回目の押下です。"    WS2.Range("C10").Value = WS1.Range("L9").Value    WS3.Range("B9:J15").Value = WS1.Range("C3:K9").Value    WS4.Range("D9").Value = WS1.Range("L9").Value   Else    ChkNext = False    Call Action2(WS1, WS2, WS1.Range("L9").Value)    Call Action2(WS1, WS3, WS1.Range("L9").Value)    Call Action2(WS1, WS4, WS1.Range("L9").Value)   End If    End With End Sub   Sub Action2(WSGet As Worksheet, WSPut As Worksheet, KeyWord)    MsgBox "2回目の押下です。"    Dim LastRow As Long  Dim r As Long    LastRow = WSPut.Cells(Rows.Count, 1).End(xlUp).Row  For r = 1 To LastRow   If WSPut.Cells(r, 1).Value = KeyWord Then    WSPut.Rows(r).Value = WSGet.Rows(11).Value   End If  Next r End Sub

dokidoko
質問者

お礼

ありがとうございます。 試してみた所、上手くいきました。 とても助かりました。 また機会がありましたらご協力の程よろしくお願いします。 私もしっかり勉強していきます。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

>各シートの対象セルの行 とは、A列に Sheets("様式1(作業用)").Range("L9")と同じ値が埋まっている行のことでいいですね? 更に、複写元の行の値全数を この行に上書きするんですね?

dokidoko
質問者

補足

早速のご連絡をありがとうございます。 何れもご認識の通りです。 よろしくお願いします。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

サンプルコードを示すのはヤブサカではないものの 突っ込みどころと不明点がありますので、それを書きます。 まず、 >Sheets("様式1-1(作業用) ").Select >Range("C9:K9").Select >Application.CutCopyMode = False >Selection.Copy >Sheets("様式3(チェック表)").Select >Range("B9").Select >Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ >:=False, Transpose:=False といった記述は、 Sheets("様式3(チェック表)").Range("B9:J9").Value = _ Sheets("様式1-1(作業用) ").Range("C9:K9").Value と書いたほうが、読みやすく、また効率もいいです。 コードの9行目に >Range("L9").Select とありますが、これは、どのシートでしょうか? 次に、 >Sheets("様式1-1(作業用) ")のアクティブセル これは、コードを読む限り、 Sheets("様式1-1(作業用)").Range("L9") のように思えますが、それでいいですか? (シート名の末尾に半角スペースがありますか?) 続いて >("Sheets様式2(管理表"))&"様式3(チェック表)")&"様式4(22F倉庫用) ") これは、 Sheets("様式2(管理表)") Sheets("様式3(チェック表)") Sheets("様式4(22F倉庫用)") これら3つのシートのことですか? また、全角、半角文字に一貫性が無いですが、正しいですか? また、 >イコールの値がある場合 複数行ヒットする可能性がありますか? 更に、 >アクティブセルの2行下の行を選択してコピーを行い、各シートの対象セルの行へ貼り付けをする これは、指摘の2行について、行全体を複写するものと思いますが 貼り付けるのは、値ですか?、それとも罫線や背景色、フォントなども含みますか?

dokidoko
質問者

お礼

失礼しました。捕捉に漏れがありました。 ヒットさせるのは複数行ではなく、貼り付けるのは値です。 また、罫線や色フォントなどは含まずでお願いします。

dokidoko
質問者

補足

ご回答をありがとうございます。 マクロ初歩の初歩ですので色々と是非ご教示ください。 まず、シート名を 様式1(作業用) 様式2(管理表) 様式3(チェック表) 様式4(22F倉庫用) と揃えました。 コードの9行目に >Range("L9").Select とありますが、これは、どのシートでしょうか? ・こちらは、様式1(作業用)の("L9")です。 次に、 >Sheets("様式1-1(作業用) ")のアクティブセル これは、コードを読む限り、 Sheets("様式1-1(作業用)").Range("L9") のように思えますが、それでいいですか? ・はい。仰る通りです。(シート名を様式1(作業用)と変更しています) (シート名の末尾に半角スペースがありますか?) ・余計なスペースがありましたので、上記の通りシート名を変更しました。 続いて >("Sheets様式2(管理表"))&"様式3(チェック表)")&"様式4(22F倉庫用) ") これは、 Sheets("様式2(管理表)") Sheets("様式3(チェック表)") Sheets("様式4(22F倉庫用)") これら3つのシートのことですか? また、全角、半角文字に一貫性が無いですが、正しいですか? ありがとうございます。余計なスペースがありましたので、上記の通りシート名を変更しました。 引き続きお手数をお掛けしますがよろしくお願いします。