No.5ベストアンサー
- 回答日時:
こんばんは。
シートの状態が分かりませんので、では、こちらで、想像で割り振らしていただきます。
ただ、本来は、こういう具体例をご質問者から、出していただきたいのです。
Sheet1
A B C
1 処遇 コード 名前....
2 退社 3 あ
3 異動 4 か
4 入社 20 さ
Sheet2
A B C
1 コード 名前 データ1...
2 3 あ
3 4 か
4
Sub testsample()
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim r As Range, c As Range
Set Sh1 = Worksheets("Sheet1")
Set Sh2 = Worksheets("Sheet2")
For Each c In Sh1.Range("A2", Sh1.Range("A65536").End(xlUp))
Select Case c.Value
Case "入社"
c.Offset(, 1).Resize(, 255).Copy Sh2.Range("A2").End(xlDown).Offset(1)
'B列より、右端255行を、シート2のA列の最後尾の次にコピーする。
Case "異動"
Set r = Sh2.Columns(1).Find(c.Offset(, 1).Value, , xlValues, xlWhole)
If Not r Is Nothing Then c.Offset(, 1).Resize(, 255).Copy r
'コードを検索して、その見つかったものを上書き
Case "退社"
Set r = Sh2.Columns(1).Find(c.Offset(, 1).Value, , xlValues, xlWhole)
If Not r Is Nothing Then r.EntireRow.Delete
'コードを検索して、その見つかったものを削除
End Select
Next
End Sub
こういうコードを参考にして作ってみてください。
なお、こういうのは、データベースとはかなり違ったものです。Excel自体で本格的なデータベースが使えますが、プロのプログラマの知識が必要な技術のひとつです。Excelで本当にデータベースを使える人は、Access も使えますが、Accessのほうがはるかに便利で易しいです。
No.6
- 回答日時:
>データベース
エクセルで作ったデータは専門家には小さい声で、上役には大きな声で「データベース」という言葉を使いましょう。
さて内容だが
(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
夜更けて、急いでやったので、不都合箇所があるかもしれませんが、質問者が修正できることを望んでいます。
皆さんありがとうございました。二方の作っていただいたものを元に勉強して自分らしく作りたいと思います。下の方もありがとうございました。
No.4
- 回答日時:
こんにちは。
#2 で書き込みした、Wendy02 です。
私の書き込みには反応がないようですが、一応、もう一度だけ書かせていただきます。
Sheet1 で
>A列の中で文字検索を行い「入社」
とあれば、
>検索でかかった行ごとコピーしデータベースの一番下の行に貼り付ける。
ということですが、「入社」という文字も書き込まれてしまいます。
>「異動」であればB1の「社員コード」から検索し、新しい上書き。
こちらも、そのまま、上書きしたら、「異動」という文字まで含めることになります。
もしかしたら、B列から、最終列までなのかな?
データの状態が今ひとつ見えませんね。
この回答への補足
返信遅くなりました。
出来ればA列でデータの追加・上書き・削除を判断し、sheet2には入社などの文字は入れたくないです。
まだこの仕事は手を付け始めたばかりで大まかな考えしかなくて・・・。しかもVBEは初心者。勉強中です。
よろしくお願いします。
No.3
- 回答日時:
Sheet1 が人事の履歴データで Sheet2 が現在の人事データのシート。
履歴データから現在の人事データを作成したい、ということですか?
つまり、Sheet1 は履歴だから同一人物について入社・異動・退社の
複数のデータが在り得るが、Sheet2 は現在の人事データであるから
1人1データとなる、、、ということ?
A列は入社・異動・退社のデータ種別を表す?
この回答への補足
書き込みありがとうございます。
sheet1では人事異動、入社がある際に人事担当が必要情報(社員コードや氏名、部署など)を書き込み左端(A列)に入社か異動、退社)を区別するように書き込みます。人事命令がある際にsheet1は作るため履歴としては残しません。ちなみにsheet2は現在の人事データになります。
よろしくお願いします。
No.2
- 回答日時:
こんばんは。
お話の様子では、Excelを本格的なデータベースでは使っていないようですね。
本格的なものになれば、Access もExcelもあまり変わらなくなってしまいますから、使いやすいほうで使えばよいのですが、ADO やDAO の知識が必要です。一応、VBAでは上級クラスになりますが、そういうレベルまでは必要ないようにお見受けしました。
ただ、ひとつずつお話を吟味しなければなりませんね。
現状で、どのぐらいのところまで出来ているのですか?
A列の中の文字検索は、どのようにしたのですか?それとも、どのようにするのですか?
人事データベースの構造は、どのようなものですか?単に、データ・テーブルになっているだけですか?検索システムは、何をお使いになるのですか?Query ですか?それとも、単に、関数なのですか?
ひとつ、アドレスを含めた具体例を提示していただいて、そこからマクロのコードを組むという形なら、ここのカテゴリでVBAを専門とする人たちなら、お話の程度なら、わけなく作ります。
ただし、DAO とか ODBCで行いたいとかおっしゃられると、少なくとも、プライベートで書いている私には、少し手を余します。悔しいかな、まだ至りませんが、こういうのを企業で専門にする人たちもいらっしゃいますし、VBA専門掲示板ではすぐにレスがつきます。
No.1
- 回答日時:
こんにちは。
社員数、部署数、組織構造etc.にもよると思いますが、
Excel よりも Access、もしくはもっと上位の
何かで管理されたらどうでしょう。
Access より上位のことは門外漢なんでわかりませんが、
例えば、異動もただ上書では、異動の履歴が残りませんし、
かなり凝ったデータ構造になると思います。
(Access でデータベース構築した場合のはなし。)
全然アドバスになってませんね。ごめんなさい (^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) エクセルでこのようなことはできますか? 3 2022/07/10 19:57
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- 英語 Method: A systematic literature search comprised t 1 2022/12/29 17:26
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- 英語 Method: A systematic literature search comprised t 3 2022/12/29 21:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
公務員で異動が多い人と少ない...
-
寺門さん
-
彼女と同棲するので地元に異動...
-
国税専門官の方 配属先について
-
「株式移動」でしょうか「株式...
-
アルバイトは、他の店舗へ異動...
-
たらい回し? 会社員の異動に...
-
異動の内示を受けて。。ショッ...
-
生理的に駄目な人が居るのは異...
-
30年近く異動しない人
-
初めての異動でまったく経験の...
-
教員異動で名前が新聞、ネット...
-
公務員として放射線技師になる...
-
営業担当者の移動が多いのはな...
-
異動の打診への返事
-
引っ越しを伴う異動=期待され...
-
【Access クエリ】レコード内の...
-
国家公務員の異動について、転...
-
小学校の教員に仲間が多いんで...
-
商社系の管理職の方で 管理職お...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
公務員で異動が多い人と少ない...
-
教員異動で名前が新聞、ネット...
-
彼女と同棲するので地元に異動...
-
異動の内示を受けて。。ショッ...
-
ヤマト運輸ドライバーの異動
-
生理的に駄目な人が居るのは異...
-
国税専門官の方 配属先について
-
アルバイトは、他の店舗へ異動...
-
たらい回し? 会社員の異動に...
-
商社系の管理職の方で 管理職お...
-
小学校の教員に仲間が多いんで...
-
30年近く異動しない人
-
国家公務員の異動について、転...
-
ヤマト運輸のドライバーさんは...
-
人事異動のパターン
-
「株式移動」でしょうか「株式...
-
異動した医療者の方に手紙を出...
-
住宅メーカーの担当変更
-
公務員の部署異動は人事課が決...
-
塾講師は何年位で異動ですか?
おすすめ情報