アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記の画像のようなシートがあります。左のシートは毎月作成します。このデータを右のシートに毎月転記するマクロを考えていますが、難しく途方に暮れています。
人は職員番号から拾えると思うのですが、その日付データを右の表のこれまでの日付データの続きに転記したいです。人ごとに作業をしたり、今までのデータの続きに転記しなければいけないことなど、初心者の私には難しいことばかりです。職員数はもっと増えます。
ご教示よろしくお願いいたします。

「Excelマクロで毎月のデータ一覧から、」の質問画像

A 回答 (7件)

以下のマクロを標準モジュールに登録してください。



Option Explicit
Public Sub 日付設定()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim maxcol2 As Long
Dim key As Variant
Dim row1 As Long
Dim row2 As Long
Dim col2 As Long
Set dicT = CreateObject("Scripting.Dictionary")
Set sh1 = worksheets("集約データ")
Set sh2 = worksheets("公休日105出社一覧")
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row 'A列最終行を求める
maxrow2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row 'A列最終行を求める
'全職員の行番号を記憶する
For row2 = 2 To maxrow2
key = sh2.Cells(row2, 1).Value
dicT(key) = row2
Next
'Sheet1を全行分処理する
For row1 = 2 To maxrow1
key = sh1.Cells(row1, 1).Value
If dicT.exists(key) = False Then
sh1.Select
sh1.Cells(row1, 1).Select
MsgBox ("職員番号:" & key & "は公休日105出社一覧に存在しません")
Exit Sub
End If
row2 = dicT(key)
maxcol2 = sh2.Cells(row2, Columns.Count).End(xlToLeft).Column '該当行行の最終列を求める
col2 = maxcol2 + 1
If col2 < 5 Then col2 = 5
sh2.Cells(row2, col2).Value = sh1.Cells(row1, 4).Value
Next
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。こういったのが作れるのは素晴らしい技術ですね。
他の方が仰っている通り、少しスタイルが変わっても使える知識があるかと言えばまだまだ力不足のところがあります。できる限り1行ずつ理解して応用できるようにしたいと思います。その中でまた質問させていただくかもしれません。ありがとうございました。

お礼日時:2021/04/23 00:07

No.6様、心配されてのご意見ありがとうございます。



お恥ずかしいですが私にはそのような立派な理由はなく、ただ単にExcelを弄っていられない時間帯であっただけなのです。
⇒確かに最初は少々知恵袋の方でやり取りはしてましたがベテラン回答者様も既に参加されていらっしゃったので、30分(知恵袋でやり取りしている間に)程で回答はついてしまって締め切られるだろうからとこちらは見ていませんでした。

>なにかエラーが出た時に修正できます?

その時にも質問を立てて回答を得るってのは他のサイトでもありがちでしょう。
利用規約違反にもありませんし。
    • good
    • 0

多分、皆さんがやり方を教えてくれず、質問ばかりしてくるのは


「なんで内容は同じの2つのファイルを作らなければいけないのか?」
「運用上無駄ではないか?」
ということだという事をご理解いただきたいと思います。

例えばもし、右のデータを社員別に管理するのであれば、左のデータは
そのままで、オートフィルタで社員別に表示すればいいと思います。

右のような内容ではなく、1社員別にデータを作るのであれば
該当行を全て取り出してくる関数を使う事で解決できます。

どうしても最初の質問にある転記にこだわるのなら、マクロですが・・・
なにかエラーが出た時に修正できます?
    • good
    • 1
この回答へのお礼

ありがとうございます。確かにおっしゃる通りですなのですが、前任者から業務を引き継ぎ、そのまま作業をしようとすると、このような感じになってしまいます。もっと経験を積んで私の意見が通るようになればもっと効率の良いシートにしていきたいと思います。

お礼日時:2021/04/23 00:09

追加で。



・左の表の人すべてを右に転記するのですか?(該当月に当たってれば)
・転記する場合は仮に既に右に存在している人でも左に古い日付があったら、右の日付欄は並び替えるのでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
右の表のD列までは事前に作っておこうと思います。
その上で左の表で該当する人が出てきたら転記するような感じを考えています。左の表の日付は古いものから並ぶ予定なので右に転記してから並び変える必要はないと思います。よろしくお願いします。

お礼日時:2021/04/21 19:56

左側のシートは毎月作成しているけど、そんなに月内に何度も右のシートに転記する必要があるのですか?


逆にお聞きしますけど、データを追加するのではなく作成していっている左のシートのデータを改めて右のシートを全て書き直す事は出来ないのですか?
そうすればどこまで処理したとか気にしなくて済むかと。

と思いきや左のシートは右に転記したらデータを削除するの?
仮に4月であれば4月中は残しておかないものなの?
それとも単に添付したデータが左右で噛み合ってないだけ?
    • good
    • 0
この回答へのお礼

ありがとうございます。
確かに、左のシートにデータをためていって、その時期毎に右のシートに転記する方法でも大丈夫です。

お礼日時:2021/04/21 19:49

左側シートのシート名はなんでしょうか。


右側シートのシート名はなんでしょうか。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
左側のシートは『集約データ』右側は『公休日105出社一覧』でお願いします。色々すみません。

お礼日時:2021/04/21 18:20

1.画像の例の通りに処理するなら、


①左側シートの田中の4月5日を右側シートのH2へ転記すれば良いのでしょうか。
②左側シートの大谷の4月2日は、右側シートのE4へ転記すれば良いのでしょうか。
2.左側のシートのひとが、右側のシートにないケースは考慮しないで良いですか。(例 左側シートに職員番号500があり、500が右側のシートにないケース)
    • good
    • 0
この回答へのお礼

ありがとうございます。その通りです。左側にない場合は考慮しなくても構わないですが、今後多少人数は増えるかもしれません。

お礼日時:2021/04/21 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!