Excel VBA 質問スレッド №2062 (解決済)
一致したら転記
投稿者 : 初心者 投稿日時 : 2024/12/15(Sun) 01:27:57 OS : Windows 11 EXCEL : Office 365
初心者で試行錯誤しながらマクロを作ってみましたが、うまくいかず、こちらで質問させてください。
作りたいマクロなのですが、
シートAのA列日付とシートBの1行目の日付、シートAのB列名前とシートBのC列名前の両方が一致したら、
シートAのG列の値をシートBの5行目に転記する。
(例)「1(水)」「田中」で両シート一致したら、シートBのE5セルに10を転記。
日付と名前をひとつひとつ一致させたい理由は、画像3のように不規則に勤務記録が入力されているからです。
お手数おかけしますが、教えていただけると幸いです。
よろしくお願いします。
画像1(シートA):https://ibb.co/pfyQrbb
画像2(シートB):https://ibb.co/jvRs02Y
画像3:https://ibb.co/gg0ZM45
初心者で試行錯誤しながらマクロを作ってみましたが、うまくいかず、こちらで質問させてください。
作りたいマクロなのですが、
シートAのA列日付とシートBの1行目の日付、シートAのB列名前とシートBのC列名前の両方が一致したら、
シートAのG列の値をシートBの5行目に転記する。
(例)「1(水)」「田中」で両シート一致したら、シートBのE5セルに10を転記。
日付と名前をひとつひとつ一致させたい理由は、画像3のように不規則に勤務記録が入力されているからです。
お手数おかけしますが、教えていただけると幸いです。
よろしくお願いします。
画像1(シートA):https://ibb.co/pfyQrbb
画像2(シートB):https://ibb.co/jvRs02Y
画像3:https://ibb.co/gg0ZM45
スポンサーリンク
[返信 1] Re : 一致したら転記
投稿者 : てらてら 投稿日時 : 2024/12/15(Sun) 06:57:28
こんにちは。
参照してください。
こんにちは。
参照してください。
Sub macro() Dim i As Long, r As Long, c As Long Dim lastRowA As Long, lastRowB As Long Dim lastColB As Long Dim shA As Worksheet, shB As Worksheet Set shA = Worksheets("シートA") Set shB = Worksheets("シートB") lastRowA = shA.Cells(Rows.Count, 1).End(xlUp).Row lastRowB = shB.Cells(Rows.Count, "D").End(xlUp).Row lastColB = shB.Cells(1, Columns.Count).End(xlToLeft).Column Dim d As Long Dim name As String Dim 実績 For i = 5 To lastRowA d = Day(shA.Cells(i, "A")) name = shA.Cells(i, "B") 実績 = shA.Cells(i, "G") For c = 5 To lastColB If Day(shB.Cells(1, c)) = d Then For r = 5 To lastRowB Step 2 If shB.Cells(r, "C") = name Then shB.Cells(r, c) = 実績 GoTo LABEL End If Next r End If LABEL: Next c Next i End Sub
[返信 2] Re : 一致したら転記
投稿者 : 初心者 投稿日時 : 2024/12/15(Sun) 12:56:57
てらてら様、ありがとうございます。
いただいたマクロ使わせてもらいました。
結果をご相談させてください。
画像1:https://ibb.co/vxYWJmZ
シートBへの転記が1日ずれてしまいました。
画像2:https://ibb.co/2ZGnRGw
あえて消した日付の部分にも転記されてしまいました。
上記のような結果で、こちらの使い方などが間違っていますでしょうか?
最初の説明不足などありましたらご容赦ください。
お手すきのときにご教授頂けると幸いです。
どうぞよろしくお願いいたします。
てらてら様、ありがとうございます。
いただいたマクロ使わせてもらいました。
結果をご相談させてください。
画像1:https://ibb.co/vxYWJmZ
シートBへの転記が1日ずれてしまいました。
画像2:https://ibb.co/2ZGnRGw
あえて消した日付の部分にも転記されてしまいました。
上記のような結果で、こちらの使い方などが間違っていますでしょうか?
最初の説明不足などありましたらご容赦ください。
お手すきのときにご教授頂けると幸いです。
どうぞよろしくお願いいたします。
[返信 3] Re : 一致したら転記
投稿者 : てらてら 投稿日時 : 2024/12/15(Sun) 13:39:53
>シートBへの転記が1日ずれてしまいました。
こちらで試しましたが、このようなズレは起こっていません。
>あえて消した日付の部分にも転記されてしまいました。
転記されたのではなく、前の値が残っているのだと思います。
もし、同じデータが2つあると後から出てきた値に上書きされますので注意してください。
「1(水)」「田中」「10」
「1(水)」「田中」「0」 → 前の値は上書きされる。
>シートBへの転記が1日ずれてしまいました。
こちらで試しましたが、このようなズレは起こっていません。
>あえて消した日付の部分にも転記されてしまいました。
転記されたのではなく、前の値が残っているのだと思います。
もし、同じデータが2つあると後から出てきた値に上書きされますので注意してください。
「1(水)」「田中」「10」
「1(水)」「田中」「0」 → 前の値は上書きされる。
[返信 4] Re : 一致したら転記
投稿者 : 初心者 投稿日時 : 2024/12/15(Sun) 15:58:37
てらてら様。
ずれる原因がわかりました。
シートAの日付はDATE関数で取得した日付で、シートBは数字を入力した日付でした。
シートBの日付をシートAと同じにすると、ずれなく転記でき、あえて日付を消した部分には転記しなくなりました。
この日付の根本的な違いは私にはわかりませんが解決しました。
ご迷惑おかけして申し訳ありませんでした。
ご対応いただきありがとうございます。
てらてら様。
ずれる原因がわかりました。
シートAの日付はDATE関数で取得した日付で、シートBは数字を入力した日付でした。
シートBの日付をシートAと同じにすると、ずれなく転記でき、あえて日付を消した部分には転記しなくなりました。
この日付の根本的な違いは私にはわかりませんが解決しました。
ご迷惑おかけして申し訳ありませんでした。
ご対応いただきありがとうございます。
[返信 5] Re : 一致したら転記
投稿者 : てらてら 投稿日時 : 2024/12/15(Sun) 17:09:19
>この日付の根本的な違いは私にはわかりませんが
Excelでは日付型が鬼門です。(初心者にはですが,,,)
要は、日付型はシリアル値と書式設定でできているという事です。
以下を参考にしてみてください。
https://help-vba.com/use-date/
解決したら、「□ この質問を解決済みにする」にチェックを入れましょう。
>この日付の根本的な違いは私にはわかりませんが
Excelでは日付型が鬼門です。(初心者にはですが,,,)
要は、日付型はシリアル値と書式設定でできているという事です。
以下を参考にしてみてください。
https://help-vba.com/use-date/
解決したら、「□ この質問を解決済みにする」にチェックを入れましょう。
[返信 6] Re : 一致したら転記
投稿者 : 初心者 投稿日時 : 2024/12/15(Sun) 20:28:14
大変お世話になりました。
ありがとうございました。
大変お世話になりました。
ありがとうございました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-01-25 12:10:16 )