日付が一致した行に別シートに入力されているデータを転記する。
やりたいことは、入力データ1シートのE3から入力してある社員番号の一致したシートに入力データ1シートのB列からD列に入力されているデータを日付が一致した行のD列からF列に転記を行いたいです。
自分で書いてみたコードは以下の通りで入力データ1の社員番号から該当のシートをアクティブにすることまではできたのですが(見つけた場合の処理内容としてメッセージボックスが出るようにしてあります。)、入力データ2に入力されている日付を各社員番号の一致したシートから検索することがいろいろ試してもできませんでしたのでアドバイスをお願いします。日付行だけが取得できれば転記の作業はこれでできると思います。
※・シートは実際には1000枚もありません。後の修正で最終行までループさせるようにするつもりです。
・入力シート1には入力シート2に入力された日付のB列:シフト番号、C列:出勤時間、D列:退勤時間が入 力されています。
・入力シート2にはマクロで組んだボタンを配置するつもりです。
vba
1Sub 個人別シートへ出力() 2Dim ws As Worksheet 3Dim 社員番号 As Long 4Dim b As Long 5For b = 3 To 1000 6社員番号 = Worksheets("入力データ1").Range("E" & b).Value 7 For Each ws In Worksheets 8 ws.Activate 9 If ws.Name Like "*" & 社員番号 & "*" Then 10 Range("D" & 日付行).Value = Worksheets("入力データ1").Range("B" & b).Value 11 Range("E" & 日付行).Value = Worksheets("入力データ1").Range("C" & b).Value 12 Range("F" & 日付行).Value = Worksheets("入力シート1").Range("D" & b).Value 13 14 MsgBox "ありました" 15 End If 16 Next ws 17Next b 18End Sub
↑入力データ1
↑入力データ2
↑各社員の個人シート
> いろいろ試してもできませんでした
具体的には何を試されたのでしょうか?
WorksheetFunction.Matchのコードを書いたのですがエラーになってしまったりしました。他にも以下のコードを書いてみたのですが、社員番号の該当するシートの行番号を拾ってこなかったので質問に書いてあるコードの処理欄で処理を行おうと思っています。
※このコードでは入力シート1A1に日付を入れてあるのでメッセージボックスでは1を拾ってきてしまいました。
【コード】
Sub a()
Dim c As Range
Dim ws As Worksheet
Set ws = Worksheets("入力シート1")
With ActiveSheet
Set c = .Range("A:A").Find(What:=DateValue(ws.Range("A1")), LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
MsgBox c.Row
End If
End With
End Sub
上記コードで「行番号」は取得できている、ということですか?であれば、後は必要な列を指定してデータをコピーすれば良いのでは?(Cells(行番号,列番号)でセル指定すれば良いです)
上記コードでは入力シート1に入力されている日付の行番号を取得しています。本来取得したい行番号は入力シート2に入力してある日付と個人別シートのB列に入力されている日付が一致した行番号です。