- ベストアンサー
マクロのコピペについての助け
- マクロのコピペについての2回目の処理について助けてください。具体的には、2回目に実行ボタンをクリックした際に特定の条件を満たす場合に、特定の行にコピーを行いたいです。
- 質問者は、マクロのコード中で2回目の処理(Action2)を実行したいとしています。具体的には、特定の行に対応する値がある場合に、その行の2行下の行にあるデータをコピーして他のシートに貼り付けたいとのことです。
- 具体的な処理の説明が不足しているため、詳細な記述方法はわかりません。しかし、条件を満たした行の特定のセルにアクセスする方法を知っている場合、そのセルに基づいてコピーと貼り付けを行うコードを作成することができます。
- みんなの回答 (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
その他の回答 (2)
- HohoPapa
- ベストアンサー率65% (455/693)
>各シートの対象セルの行 とは、A列に Sheets("様式1(作業用)").Range("L9")と同じ値が埋まっている行のことでいいですね? 更に、複写元の行の値全数を この行に上書きするんですね?
補足
早速のご連絡をありがとうございます。 何れもご認識の通りです。 よろしくお願いします。
- HohoPapa
- ベストアンサー率65% (455/693)
サンプルコードを示すのはヤブサカではないものの 突っ込みどころと不明点がありますので、それを書きます。 まず、 >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行について、行全体を複写するものと思いますが 貼り付けるのは、値ですか?、それとも罫線や背景色、フォントなども含みますか?
お礼
失礼しました。捕捉に漏れがありました。 ヒットさせるのは複数行ではなく、貼り付けるのは値です。 また、罫線や色フォントなどは含まずでお願いします。
補足
ご回答をありがとうございます。 マクロ初歩の初歩ですので色々と是非ご教示ください。 まず、シート名を 様式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つのシートのことですか? また、全角、半角文字に一貫性が無いですが、正しいですか? ありがとうございます。余計なスペースがありましたので、上記の通りシート名を変更しました。 引き続きお手数をお掛けしますがよろしくお願いします。
お礼
ありがとうございます。 試してみた所、上手くいきました。 とても助かりました。 また機会がありましたらご協力の程よろしくお願いします。 私もしっかり勉強していきます。