>データベース
エクセルで作ったデータは専門家には小さい声で、上役には大きな声で「データベース」という言葉を使いましょう。
さて内容だが
(1)Sheet1(異動データ)とSheet2(人事データベース)が話題になっている。
(2)Sheet1のA列には「入社」、「異動」、「退社」と何もなかった人の空白行がある。異動ない人はSheet1には乗っていないかも。
(3)Sheet1のでA列入社であればSheet2の既存社員の最後の次の行にSheet1のデータを上から詰めて足してゆく。
(4)異動であれば、Sheet1のB列にある社員コードでSheet2のB列(例)を検索し、見つかった行に現勤務先などを書き換える
(4)退社であれば、(3)と同じことをして、退社サインを立てる。
世の中では、普通は削除を行いません。退社後もデータが必要だからです。
例データSheet3
異動タイプ コード 氏名 勤務店
退社 123 山田 新宿
入社 301 近藤 四谷
異動 102 大川 有楽町
退社 231 大木 品川
異動 98 畑中 秋葉原
異動 67 木村 お茶
入社 302 川島 馬場
退社 25 海野 目黒
例データSheet4
コード 氏名 勤務店 移動日 退社
25 海野 品川
27 上野 品川
67 木村 蒲田
68 今野 大崎
98 畑中 横浜
100 丘 新宿
102 大川 浜松町
105 谷田 目黒
123 山田 新宿
231 大木 川口
233 今 目黒
245 木田 目白
246 越山 池袋
コード
Sub test01()
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Set Sh1 = Worksheets("Sheet3")
Set Sh2 = Worksheets("Sheet4")
d1 = Sh1.Range("A65536").End(xlUp).Row
d2 = Sh2.Range("A65536").End(xlUp).Row
d3 = d2 + 1
For i = 2 To d1
Select Case Sh1.Cells(i, "A")
Case "入社"
Sh2.Cells(d3, "A") = Sh1.Cells(i, "B")
Sh2.Cells(d3, "B") = Sh1.Cells(i, "C")
Sh2.Cells(d3, "C") = Sh1.Cells(i, "D")
Sh2.Cells(d3, "D") = "2005/4"
d3 = d3 + 1
Case "異動"
no = Sh1.Cells(i, "B")
s = "A1:A" & d2
n = WorksheetFunction.Match(no, Sh2.Range(s), 0)
Sh2.Cells(n, "C") = Sh1.Cells(i, "D")
Sh2.Cells(n, "D") = "2005/4"
Case "退社"
no = Sh1.Cells(i, "B")
MsgBox no
s = "A1:A" & d2
n = WorksheetFunction.Match(no, Sh2.Range(s), 0)
MsgBox n
Sh2.Cells(n, "E") = "退社"
Sh2.Cells(d2, "D") = "2005/4"
End Select
Next
End Sub
夜更けて、急いでやったので、不都合箇所があるかもしれませんが、質問者が修正できることを望んでいます。
お礼
皆さんありがとうございました。二方の作っていただいたものを元に勉強して自分らしく作りたいと思います。下の方もありがとうございました。