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

スポンサーリンク
[返信 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
あえて消した日付の部分にも転記されてしまいました。

上記のような結果で、こちらの使い方などが間違っていますでしょうか?
最初の説明不足などありましたらご容赦ください。
お手すきのときにご教授頂けると幸いです。
どうぞよろしくお願いいたします。

[返信 3] Re : 一致したら転記
投稿者 : てらてら     投稿日時 : 2024/12/15(Sun) 13:39:53
>シートBへの転記が1日ずれてしまいました。
こちらで試しましたが、このようなズレは起こっていません。

>あえて消した日付の部分にも転記されてしまいました。
転記されたのではなく、前の値が残っているのだと思います。

もし、同じデータが2つあると後から出てきた値に上書きされますので注意してください。
「1(水)」「田中」「10」
「1(水)」「田中」「0」 → 前の値は上書きされる。

[返信 4] Re : 一致したら転記
投稿者 : 初心者     投稿日時 : 2024/12/15(Sun) 15:58:37
てらてら様。
ずれる原因がわかりました。
シートAの日付はDATE関数で取得した日付で、シートBは数字を入力した日付でした。
シートBの日付をシートAと同じにすると、ずれなく転記でき、あえて日付を消した部分には転記しなくなりました。
この日付の根本的な違いは私にはわかりませんが解決しました。
ご迷惑おかけして申し訳ありませんでした。
ご対応いただきありがとうございます。

[返信 5] Re : 一致したら転記
投稿者 : てらてら     投稿日時 : 2024/12/15(Sun) 17:09:19
>この日付の根本的な違いは私にはわかりませんが

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 )
タイトルとURLをコピーしました