
VBAの従業員の固定休を求めるプログラムを教えていただきたいご質問になります。
添付した画像を例とします。
シートの名前を勤務管理表とし、A3セルから下にAさん、Bさん、Cさんと入力されています。
ここでは3名とします。
例えば別シートのA1セルにAさん。A2セルに休みの「金」、A3セルに「月」の文字を入力。
それを勤務管理表のAさんのB3セルから左のセル欄に「休」を出力し、またBさん、Cさんも同じ様に入力したい内容になります。
勤務管理表で従業員を50名程作成しなくてはならず作業効率向上の為、一括で入力したいと思いましたので、どなたか詳しい方のご回答をお待ちしております。
よろしくお願い致します。


No.6ベストアンサー
- 回答日時:
以下のマクロを標準モジュールへ登録してください。
休みの指定は、添付図のようにB~H迄の列に指定します。
1,2行はマクロ実行前に既に作成されていることが前提、A列の3行以降の従業員名も実行前に作成されていることが前提です。
-----------------------------------------------
Option Explicit
Public Sub 休日割当()
Dim sh1, sh2 As Worksheet
Dim dicT As Object
Dim row, col, maxrow As Long
Dim key, wk As String
Dim i As Long
Set dicT = CreateObject("Scripting.Dictionary")
Set sh1 = Worksheets("休日表")
Set sh2 = Worksheets("勤務管理表")
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).row 'Sheet1 A列最大行
'従業員の休みの曜日を取得
For row = 1 To maxrow
key = sh1.Cells(row, "A").Value
wk = ""
'B列からH列まで休みの曜日を取得
For col = 2 To 8
If sh1.Cells(row, col).Value = "" Then Exit For
wk = wk + sh1.Cells(row, col).Value
Next
dicT(key) = wk
Next
maxrow = sh2.Cells(Rows.Count, "A").End(xlUp).row 'Sheet2 A列最大行
'休みの設定領域をクリア
sh2.Range("B3:AF" & maxrow).Clear
For row = 3 To maxrow
key = sh2.Cells(row, "A").Value
If dicT.exists(key) = False Then
MsgBox (key & "は休日表に未登録です。処理を打ち切ります。")
Exit Sub
End If
wk = dicT(key)
For i = 1 To 31
col = 2 + i
If sh2.Cells(2, col).Value = "" Then Exit For
If InStr(wk, sh2.Cells(2, col).Value) > 0 Then
sh2.Cells(row, col).Value = "休"
sh2.Cells(row, col).Interior.ThemeColor = xlThemeColorDark1
sh2.Cells(row, col).Interior.TintAndShade = -0.249977111117893
End If
Next
Next
MsgBox ("完了")
End Sub

tatsu99さんありがとうございます!
正に私が求めていたプログラムです!
色々触って勉強させていただきます。
この度はありがとうございました。
またこちらで質問をさせて頂くと思いますが、ご機会がございましたらよろしくお願い致します。

No.5
- 回答日時:
No4です。
別シートの記入方法ですが、人の並びが同じになるので、図1よりは図2のほうが良いかと思いますが、いかがでしょうか。
図1があなたが提示された方法です。


No.4
- 回答日時:
マクロで作成するとして、いくつか不明点があります。
1)B1は必ず12日から始まるのですか。
2)1行目(日付)と2行目(曜日)は、既に作成済みという前提で良いのですか。
それとも、マクロで1行目も2行目も作るのですか。
3)これは、横に一か月分ですか、1年分ですか。
4)1人の休みの曜日は、2日分で固定ですか。
Aさんが、月
Bさんが、火、金
Cさんが、水、木、土
のようなケースはあるのですか。
5)50人分つくる場合は、Cさんの次の行から、Dさん、Eさんと続くと考えて良いですか。
tatsu99さん回答ありがとうございます。
ご質問に回答致します。
1)B1は前回のtatsu99さんに教えていただいたVBAのコードを参考に「s_date = sh1.Cells(4, "A1").Value」 (※ A1に2017/5/10と入力します)
2)1行目は「sh1.Cells(1, col).Value = wdate」、日付2行目は「sh1.Cells(2, col).Value = WeekdayName(wkday, True)」のコード記述になります。
3)この管理表では横に1ヵ月分としています。
4)1人の休みの曜日は2日分で固定ではありません。3日の方もいれば4日の人もいます。
5)はい、Cさんの下にDさん、Eさんと続きます。
図2の方が使い易いと思いました!
こちらでお願い致します。
よろしくお願い致します。
No.3
- 回答日時:
こんにちは!
一例です。
↓の画像のように別シートに個人の「固定休」の表を作成しておきます。
そして、Sheet1のB3セルに
=IF(ISNUMBER(FIND(B$2,VLOOKUP($A3,Sheet2!$A:$B,2,0))),"休","")
という数式を入れフィルハンドルで列・行方向にコピーすると
画像のような感じになります。
※ Sheet1の2行目(曜日行)はシリアル値で表示形式を「aaa」としているのではなく
文字列で日~土が入っているとします。m(_ _)m

No.2
- 回答日時:
=if(or(b2="月",b2="金"),"休"," ")
この式をAさんの行にペーストし、Bさんには月→水、金→土、と改良して、ペーストすればVB使わなくても出来ませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) exel 漢字・英数字混在セルの入力規則 5 2022/04/03 11:08
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。 5 2022/11/20 09:48
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Visual Basic(VBA) 翌日にお休み予定の従業員がいる場合にアラートを出したい 1 2023/07/11 11:18
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
エクセルのVBAコードと数式につ...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【VBA】 結合セルに複数画像と...
-
vbsでのwebフォームへの入力制限?
-
算術演算子「¥」の意味について
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
ダブルクリックで貼り付けた画...
-
VBAの「To」という語句について
-
VBAでユーザーフォームを指定回...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報
要塞まほろぼさん回答ありがとうございます。
いえ火曜日は定休日ではありません。
ここでは例として従業員を3名とし、その際に火曜日が全員出勤になってしまったものになります。
Aさんの固定休は金、月。
Bさんは土、水。
Cさんは日、木。
仮にDさんがおり、固定休が火、金。
となる可能性もあるのでその場合はどの様にプログラムを組めばよろしいのか教えていただきたいです。
よろしくお願い致します。