社員番号の一覧表があります。
何千行もあるデータで、
別の部署がデータベースのエクセルと突合して
一覧票が私の部署に回ってくるのですが、
条件を満たしてない行が多数あって
データが多いため、目で確認するのが厳しいので
マクロで確認させようと思いました。
F列,G列,H列,I列にデータが記述されており
AS列に別部署が突合した結果の#が入ってます。
F列~予備社員番号
G列~社員番号
H列~社員の役職
I列~グループの構成している代表の社員番号
AS列~該当するデータに#が入ってます
H列の文言で社員の項目でAS列に#が入ってる場合で、
課長のG列の社員番号と社員のI列の社員番号が同じ事が成立しつつ
H列の文言の課長の項目でAS列に#が入っているか?
#がなければメッセージで警告を出す
マクロでIF分かCASEで条件付けで書くことが上記のやりたい事に
近いものだと思ったのですが、
条件が多岐に渡っているので書き方が上手くできません。
どなたか、上記の条件の時に動作できる
コードのアドバイス等を頂けないでしょうか?
添付で一覧表をつけます。
マクロのコードを途中まで記述しましたが
記述する担当者が退職したので途中のままになっています。
参考まで記述致します。
お忙しい中、お手数ですが
宜しくお願い致します。
Sub 課長に印あるか確認()
Dim i As Long, j As Long
For i = Cells(Rows.Count, 6).End(xlUp).Row To 2 Step -1
For j = Cells(Rows.Count, 7).End(xlUp).Row To 2 Step -1
If Cells(i, 6) = "社員" And Cells(i, 45) = "#" Then
If Cells(i, 6) = "課長" And Cells(j, 7) And Cells(j, 6) = "社員" Then
MsgBox "課長に#ありません"
End If
Next j
Next i
End Sub
No.2ベストアンサー
- 回答日時:
#1です。
補足拝見しました。わたしの想像は基本的に合っていました。
となりますと、各レコードを検索していき、「社員」の場合、その上司(課長)を
I列の代表社員番号をキーに探し、その課長のAS列に#が入っているかを見ればよい、
ということですね。
例示されているコードが、下から上にループさせているようですので、それに則ってやります。
でも、メッセージボックスの警告でいいんですかね?
何千行もの判定で、その都度、止まってしまいますが。
いちおう以下のコードでは、該当レコード(警告が出るレコード)に着色しています。
適宜改造ください。
----------------------------------------------------------------
Sub 課長に印あるか確認()
Dim i As Long, j As Long
Dim Lstrow As Long
Dim DSban As String
Lstrow = Cells(Rows.Count, 6).End(xlUp).Row ’最終行取得
For i = Lstrow To 2 Step -1
If Cells(i, 8).Value = "社員" And Cells(i, 45).Value = "#" Then
DSban = Cells(i, 9).Value '代表社員番号を格納
j = Lstrow
Do Until Cells(j, 7).Value = DSban '課長の行を検索
j = j - 1
Loop
If Cells(j, 45).Value <> "#" Then '課長の行のAS列が#ではないなら
MsgBox "警告" & Chr(13) & Chr(13) & i & "行目" '警告
Range(Cells(i, 6), Cells(i, 9)).Interior.ColorIndex = 34 '着色
End If
End If
Next i
End Sub
-----------------------------------------------------------------------
社員と課長の関係性ですが、常に、図示されているような形になっていて、ある社員の課長は必ずその
社員よりも絶対に上に来る、という配置ならば、
Do Loop の開始値「j=LstRow」は、「j=i」としてください。
わざわざ一番下から調べなくても、その社員の行よりも上を探せばいいので。
ご不明点あればお知らせください。
soixante様
上記のコードでやりたいことが出来ました!!!
ありがとうございます!!
色々と拙い説明の中、意図を組みとって
コード記述して頂きありがとうございます
ベストアンサーにさせて頂きます。
ありがとうございます
No.3
- 回答日時:
こんばんは!
すでに回答されているように、いちいちメッセージボックスを表示させていると
その都度マクロが止まってしまい、煩わしいだけですので、
セルに色を付けてはどうでしょうか?
AS列に「#」がない場合はF~I列を薄い黄色に
I列社員番号が課長の番号と違う場合はI列をピンクにしてみました。
Sub Sample1()
Dim cnt As Long, myRow As Long, myArea As Range
Dim c As Range, myFirst As Range, myFound As Range
Application.ScreenUpdating = False
Range("F:I").Interior.ColorIndex = xlNone
Set myFound = Range("H:H").Find(what:="課長", LookIn:=xlValues, lookat:=xlWhole)
If Not myFound Is Nothing Then
Set myFirst = myFound
1: myRow = myFound.Row + 1
cnt = 0
Do While Cells(myRow, "H") = "社員"
myRow = myRow + 1
cnt = cnt + 1
Loop
Set myArea = myFound.Offset(1, 1).Resize(cnt)
For Each c In myArea
If Cells(c.Row, "AS") <> "#" Then
Cells(c.Row, "F").Resize(, 4).Interior.ColorIndex = 36 '//←薄い黄色
End If
'//I列番号が課長番号と違う場合
If Cells(c.Row, "I") <> myFound.Offset(, -1) Then
Cells(c.Row, "I").Interior.ColorIndex = 7 '//←ピンク
End If
Next c
Set myFound = Range("H:H").FindNext(after:=myFound)
Do
If myFound.Address = myFirst.Address Then Exit Do
GoTo 1
Loop
End If
Application.ScreenUpdating = True
End Sub
こんな感じではどうでしょうか?m(_ _)m
tom04様
上記のコードで結果が全部出るのですね
メッセージを出すとマクロが止まるから
一遍に上記のコードで処理が出来るのか
コードの書き方やメッセージをだすことによる
作業が止まることなどの配慮ありがとうございます。
このコードを参考にさせて頂きます
No.1
- 回答日時:
一部条件で不明瞭な点があります。
>H列の文言で社員の項目でAS列に#が入ってる場合で、
>課長のG列の社員番号と社員のI列の社員番号が同じ事が成立しつつ
課長と社員の関係が良くわかりません。
同じ行のレコードにおいて、H列が「社員」と「課長」の並列はあり得ないと思いますが、
ある社員の課長はどのように判定するのですか?
その社員よりも上のレコードを見て、初めて出てくる「課長」がその社員の属する課の
課長ということですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
出戻り社員は一番下でしょ?? ...
-
職場で空気のような存在になっ...
-
先日、当社のある社員について...
-
社員各位という言葉について
-
月1くらいで休む派遣さんが、休...
-
会社の互助会費について
-
賞与のお礼メールはどう書けば...
-
Accessの参照フィールドの列が...
-
妻ですが男性と2人だけの出張が...
-
派遣社員に直接注意
-
会社の人に勝手にLINE追加され...
-
Accessのエラーメッセージについて
-
平社員の場合の役職名は?
-
社内での呼び方に困っています。
-
ブラック企業で働く人たちはな...
-
社員がPCを壊した場合の対処方...
-
巨乳の同僚
-
職場で寝不足で早退するのはど...
-
出世とかしたくないって人は中...
-
社員証
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
平社員の場合の役職名は?
-
社員名簿で家族構成書くとこあ...
-
出戻り社員は一番下でしょ?? ...
-
社員各位という言葉について
-
会社の人に勝手にLINE追加され...
-
マクドナルド社員になるのはか...
-
会社の互助会費について
-
会社の社長、創業者が死去した...
-
巨乳の同僚
-
帰り際になって急に話しかけて...
-
職場で空気のような存在になっ...
-
派遣社員に直接注意
-
社員への残業時間公開について
-
月1くらいで休む派遣さんが、休...
-
「酷いパワハラを続ける社長」...
-
大人のイジメって何をされるの...
-
自分にだけタメ口対応をされま...
-
皆さんの会社の親睦会費は社員...
-
今日、私は病み上がりでバイト...
-
悪口を本人に聞かれてしまった
おすすめ情報
色々と説明不足で申し訳ありません。
H列に課長と社員の並列は連続してある状態です。
社員がどの課長に属しているのかという判定は、
社員の代表社員番号列にその社員の課長の番号が記述されているので
それを基にグループ分けされています。
参考図を添付させて頂きます。
色々と拙い説明で申し訳ありません。
不明点有り次第、再度、概要の補足 図を追記します。
宜しくお願い致します。