- ベストアンサー
エクセルのマクロで特定の条件に基づいて値を貼り付ける方法
- エクセルのマクロを使用して、特定の条件に基づいて値を貼り付ける方法について質問です。
- 具体的には、マクロを発動すると、あるセルに入力してある数値を参照し、その行の特定の列に数値を張り付ける処理を作成したいと考えています。
- 例えば、シート1のA1に日付を入力し、B1に任意の数字を入力した場合、シート2のA列には日付が1日から31日まで連続して入力されているとします。その場合、マクロを発動すると、シート1のA1と一致する日付の行に、シート1のB1の値をシート2の特定の列に貼り付ける処理を実行したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問のとおりなら、日にちで検索する必要はありませんね。 '--------------------------- Sub test() Dim D as Integer D=Sheets("Sheet1").Range("A1").Value Sheets("Sheet2").Cells(D, "B").Value = Sheets("Sheet1").Range("B1").Value End Sub '--------------------------- 尚、変数Dは使う必要はありませんが代入部分のコードが長くなると見にくいので。 以上です。
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 外していたらごめんなさ。 Sheet1とSheet2のA列の行の並びは同じということですかね? それだとA列は無視しても大丈夫だと思います。 一例です。 質問に「X列目」とありますので、敢えて「X」を変数にしています。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 Sub test1() Dim i, X As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = 1 To 31 X = 2 If ws1.Cells(i, 2) <> "" Then ws2.Cells(i, X) = ws1.Cells(i, 2) End If Next i End Sub 尚、余計なお世話かもしれませんが、もし、Sheet1とSheet2のA列の並びが違う場合のコードも載せておきます。 Sub test2() Dim i, j, X As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = 1 To 31 For j = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row X = 2 If ws2.Cells(j, 1) = ws1.Cells(i, 1) Then ws2.Cells(j, X) = ws1.Cells(i, 2) End If Next j Next i End Sub コード内にある、「X]は好みによって変更してみてください。m(__)m
お礼
ありがとうございます。 素晴らしい動作をしておりますが、、、、今の私には理解できない高レベルな回答でした。 理解力がなく申し訳ありません。
お礼
お礼に書いたつもりが捕捉に入力してしまっておりました。 申し訳ございません。
補足
とてもシンプルな構文ありがとうございます。 正常で希望通りの動作をしております。 私にも理解でき、かつ応用の幅の広い素晴らしい回答です。 本当にありがとうございます。