出勤表の自動作成マクロについて | |
---|---|
[196522] 出勤表の自動作成マクロについて- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ マクロ初心者 -(2025/04/20(19:31)) □U R L/ 初めまして。マクロ初心者です。 スタッフさんの出勤日程を、マクロで自動化する術を、教えていただきたいです。 【やりたいこと】 ・一行ごとにスタッフ名、出勤日数、1日〜31日分出勤の〇等を入れるセルがあり、 @スタッフごとに出勤日数と一致するよう、〇の数を自動で増減 A同じ週で4連続や5連続勤務を回避させる B日にちセルの上に、その日ごとの最低出勤人数(アルファベットで表記)を入れるセルがあり、 そこを下回らないようにしたいです ※初期状態は、平日のセルに出勤を表す〇、 同じく出勤扱いになる数字(1〜9、有給休暇の種類を意味する)、 非出勤を表すブランクのいずれかが入力されています。 土日祝日やブランク、数字が入力されている日は触らず、 〇の数だけを増減し、出勤日数と=になるようにしたいです。 シート内容の当初と結果 aの当初シート(実行前) A B C D E F G H I・・・ AH AI AJ 1 2025/3/1 A B A C B B A・・・ 2 名 出勤日数 1日 2日 3日 4日 5日 6日 ・・・31日 A 40人 3 Aさん 15日 〇 1 〇 ・・・〇 B 42人 4 Bさん 14日 2 〇 〇 ・・・ C 45人 5 cさん 16日 〇 〇 〇 〇 〇・・・ ・ ・ ・ 83 AAAさん ・・・ aの当初シート(実行後) A B C D E F G H I・・・ AH AI AJ 1 2025/3/1 A B A C B B A・・・ 2 名 出勤日数 1日 2日 3日 4日 5日 6日 ・・・31日 A 40人 3 Aさん 15日 〇 1 〇 ・・・〇 B 42人 4 Bさん 14日 2 〇 〇 ・・・ C 45人 5 cさん 16日 〇 〇 〇 〇・・・ ・ ・ ・ 83 AAAさん ・・・ ↑実行後のCさんの6日の〇を消しただけですが、やりたいこととして、 スタッフさんの出勤日数=〇と数字の数になるよう調整する、 なおかつ、4や5連続出勤を予防し、一日単位の最低出勤人数以上にしたいです。 ++++++++++++++++++++ OS ⇒Windows 11 Version⇒Office365 ++++++++++++++++++++ |
[196524] Re[1]: 出勤表の自動作成マクロについて- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2025/04/23(09:17)) □U R L/ 多分質問だけになりますが、 >土日祝日やブランク、数字が入力されている日は触らず、 >〇の数だけを増減し、出勤日数と=になるようにしたいです。 減は解りますが増はする余地が無いのでは? 初期状態で土日祝日はブランクでは無く〇もあり得るのですか? 初期状態で日々の出勤者数はどの程度の余裕があるのですか? 必ず解は有りますか? |
[196528] Re[2]: 出勤表の自動作成マクロについて- ■ ![]() □投稿者/ マクロ初心者 -(2025/04/25(07:43)) □U R L/ kazuoさん、質問ありがとうございます。 減は解りますが増はする余地が無いのでは? →そうですね。減ることが前提です。増えはしないと思います。表現を間違えました失礼しました。 初期状態で土日祝日はブランクでは無く〇もあり得るのですか? →土日祝日はブランクです。〇はありえないです。 初期状態で日々の出勤者数はどの程度の余裕があるのですか? →全員の人数が80人程度で、だいたい一日あたり40前後程の人が欲しい想定なので、最初はほぼ〇がついていて余裕がないため、〇を半分くらいに減らしたいです。 必ず解は有りますか? →毎月いままで人力で仕上げてきたので何通りか解はあると思います。 ただ、ものすごく時間がかかっていたので、なんとかマクロで自動化したいと思い、質問させていただきました。 もしお力を貸していただけたら、幸いです。 |
[196530] Re[3]: 出勤表の自動作成マクロについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2025/04/25(09:48)) □U R L/ 1.出勤日数と〇の数は同じですか? それとも、〇は本人の出勤可能日を表し、 出勤日数は本人の出勤希望日数を表しているのですか? (つまり、〇の数>=出勤日数 の関係にあるのですか?) 2.○印は、「記号の○」ですか? それとも「漢字の〇」ですか? 3.A1セルの日付は、必ず月初ですね(祝祭日であろうがなかろうが) 4.アルファベットのA,B,Cは、ホントのデータですか? それとも、別の文字だったり、3つとは限らなかったり(月によって変動したりとか)しますか? 5.祝祭日のリストは、どこかに作成されているんですか? 通常だと、タイトルを除く日付範囲が名前定義されているものなのですが(「祝日」とか)。 6.連続勤務回避は、同じ週内で判断するらしいので、 切り口を変えると、火曜または木曜が祝日だったら 全く問題にならないと理解していいですね? (それとも、祝日は連続を中断しないものとして扱うのですか?) |
[196532] Re[4]: 出勤表の自動作成マクロについて- ■ ![]() □投稿者/ マクロ初心者 -(2025/04/25(19:15)) □U R L/ 半平太さん、コメントありがとうございます。 1.出勤日数と〇の数は同じですか? それとも、〇は本人の出勤可能日を表し、 出勤日数は本人の出勤希望日数を表しているのですか? (つまり、〇の数>=出勤日数 の関係にあるのですか?) →出勤日数=〇+数字(有給休暇)の数、となってほしいです。 マクロ実行前の状態は、本人が非出勤を希望する日(ブランクセル)と有給休暇(数字)の日を何日か入れて、それ以外の平日に〇がついています。 そこから、本人の非出勤希望と有給休暇の日は考慮したうえで、〇の数を微調整(4連や5連続出勤をなくす、〇の数+数字の数=15日の出勤日数となるようにする、1日あたりに出勤してほしい最低人数を満たすようにする)をします。ここが、今回マクロで実行したいことです。 2.○印は、「記号の○」ですか? それとも「漢字の〇」ですか? →「まる」と入力して出てきた物を使用していますが、たぶん、記号の「〇」だと思います。漢字の「〇」がどのようなものかわかっておらず、すみません。 どちらを使用したほうが良いとかあれば、教えていただけると幸いです。 3.A1セルの日付は、必ず月初ですね(祝祭日であろうがなかろうが) →そうですね。必ず1日で設定してあります。 4.アルファベットのA,B,Cは、ホントのデータですか? それとも、別の文字だったり、3つとは限らなかったり(月によって変動したりとか)しますか? →本当のデータです。数字が最低出勤人数を表していますが、だいたい3通り程度(38人、40人、42人)なので、A〜Cまでで足りています。 5.祝祭日のリストは、どこかに作成されているんですか? 通常だと、タイトルを除く日付範囲が名前定義されているものなのですが(「祝日」とか)。 →祝祭日のリストは、別シートに作成してあります。 名義定義についてよくわかっておらず申し訳ございませんが、その祝日リストをもとに、土日祝日の判定をして、セルに表示させています。 6.連続勤務回避は、同じ週内で判断するらしいので、 切り口を変えると、火曜または木曜が祝日だったら 全く問題にならないと理解していいですね? (それとも、祝日は連続を中断しないものとして扱うのですか?) →その通りです。火曜〜木曜のいずれか一日でも祝日があれば、その週は五連続や4連続を避けられているので、全く問題ないです。 こちらの説明不足、大変申し訳ございません。 マクロどころかエクセルのこともあまり詳しくなく、不慣れで申し訳ないですが、何卒宜しくお願い致します。 |
[196548] Re[5]: 出勤表の自動作成マクロについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2025/04/27(09:40)) □U R L/ >〇の数+数字の数=15日の出勤日数 数字(有休)も出勤日数にカウントするとは思わなかったです。 15日というのは、本当に目標なのですか? (通例それくらいになると言う話ではないんですか?) ※A,B,Cに基づく当月の○数はほぼ決まっているハズである所に 流動的な有休数と職員数を加味した場合 有休が増えれば、出勤日数は増加気味になるし、 職員が増えれば、出勤日数は減少傾向になるハズなので 15日きっちり合わせに行くのは無理な気がするんですが・・ |
[196550] Re[6]: 出勤表の自動作成マクロについて- ■ ![]() □投稿者/ マクロ初心者 -(2025/04/27(19:30)) □U R L/ 半平太さん、 15日や13日出勤など、非常勤社員の派遣会社との契約によるもので、日数は厳守となっております。 ただ、月に有給休暇等で出勤扱いにしてよい日数は決まっているので、皆さん2日程度しか有給休暇をとらないです。 また、A,B,Cなどの最低出勤人数はあくまで最低なので、 各個人の出勤日数を確保する&一日の最低出勤人数より多くなるようにすることは可能だと思います。 |
[196551] Re[7]: 出勤表の自動作成マクロについて- ■ ![]() □投稿者/ マクロ初心者 -(2025/04/27(19:36)) □U R L/ マクロやエクセルについて不勉強で申し訳ございませんが、 マクロの自動化をするにあたり足りない情報や必要な情報など、コメントいただければ幸いです。 |
[196552] Re[8]: 出勤表の自動作成マクロについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2025/04/27(20:52)) □U R L/ >日数は厳守となっております。 分かりました。 >マクロの自動化をするにあたり足りない情報や必要な情報など、コメントいただければ幸いです。 祝祭日のリスト(セル範囲)には「祭日」という名前をつけてください。 (日付データの範囲のみです。 タイトルによくある「祝祭日」とか言う様な文字データ部分は含めないように。 ただし、後日祝日を追加できるように、未入力セルを多めに含めるのは差支えありません) >A 40人 文字データは処理の邪魔なので、 「人」と言う文字データは入れないでください。 セルの書式で、そう見えるようにしてください。 >Aさん 15日 出勤日数の「日」も上と同様、セルの書式でそう見せてください。 (実体は15のみとする) > A B C ・ AH AI AJ > 1 2025/3/1 A ・ > 2 名 出勤日数 1日 ・31日 A 40人 > 3 Aさん 15日 ・〇 B 42人 > 4 Bさん 14日 ・ C 45人 1日がC2セルなら、31日はAG2となるハズなのですが、実態はどうなっていますか? 付随する懸念ですが、「A 40人」のセル位置は「AI2、AJ2」で正しいですか? >出勤扱いになる数字(1〜9、有給休暇の種類を意味する) これは、厳密に言うと数値ですね。 (エクセルでは、数字は文字の一種と扱われます→Count関数ではカウントできない) |
[196564] Re[9]: 出勤表の自動作成マクロについて- ■ ![]() □投稿者/ マクロ初心者 -(2025/04/29(18:47)) □U R L/ 半平太さん ・祝祭日のリスト(セル範囲)には「祭日」という名前をつけてください。 (日付データの範囲のみです。 タイトルによくある「祝祭日」とか言う様な文字データ部分は含めないように。 ただし、後日祝日を追加できるように、未入力セルを多めに含めるのは差支えありません) →わかりました。 ・文字データは処理の邪魔なので、 「人」と言う文字データは入れないでください。 ・セルの書式で、そう見えるようにしてください。 出勤日数の「日」も上と同様、セルの書式でそう見せてください。 (実体は15のみとする) →わかりました。 > A B C ・ AH AI AJ > 1 2025/3/1 A ・ > 2 名 出勤日数 1日 ・31日 A 40人 > 3 Aさん 15日 ・〇 B 42人 > 4 Bさん 14日 ・ C 45人 1日がC2セルなら、31日はAG2となるハズなのですが、実態はどうなっていますか? 付随する懸念ですが、「A 40人」のセル位置は「AI2、AJ2」で正しいですか? →31日はAG2、A 40人のセル位置はその隣の、AH2、AI2でした。間違った情報、失礼しました。 >出勤扱いになる数字(1〜9、有給休暇の種類を意味する) これは、厳密に言うと数値ですね。 (エクセルでは、数字は文字の一種と扱われます→Count関数ではカウントできない) →そうなんですね。文字の一種だと認識しておりませんでした。ありがとうございます。 |
[196566] Re[10]: 出勤表の自動作成マクロについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2025/04/29(20:30)) □U R L/ 1.今までのシフト表を「原本」と云うシート名にしてください。 2.新規シートを一枚挿入して、シート名を「実行後」としてください。 3.その「実行後」シートの「シート見出し」を右クリックして、「コードの表示(V)」を選ぶ。 するとVBE画面が出ますので、画面中央の白いエリアに後記マクロコードを貼り付けてください。 ※見た目は「標準モジュール」と同じですが、シートモジュールです (これ重要:間違っても「標準モジュール」を追加して、そっちに貼り付けないようにしてください) 以上で準備完了です。 原本シートの希望データが揃ったら、上記マクロの「Main」を実行してください。 結果は、「実行後」シートに出ます。 採用しなかった「○」を完全に消すと「非出勤を表すブランク」と区別がつかず、 その後の作業がやりにくくなるので、「可」に変えてあります。 完全に問題が解消した後で「可」を空白に変換してください。(手作業) ※実データサンプルがないので、このマクロでどんな結果になるのか、 現状こちらでは分かりません。簡単に修正できるレベルになっていればいいのですが・・ Private lastRow As Long, maxStaffs As Long, maxDays As Long Private holdys As Range, LimitEachDay, msg1, msg2, App As Application Sub Main() initialize App.ScreenUpdating = False データ転記 '事前処理 単純割り振り '単純割り振り 列平準化 'A,B,Cパターン列平準化 連続4回避 '連続4回避 連続4残チェック '連続4残チェック(回避漏れの週をチェック) 最終チェック '出勤可能日にズレが無いかチェック App.ScreenUpdating = True If msg1 & msg2 <> "" Then MsgBox msg1 & msg2 Else MsgBox "完了" End If End Sub Private Sub initialize() Set App = Application msg1 = "" msg2 = "" lastRow = Cells(Rows.Count, "A").End(xlUp).Row maxStaffs = lastRow - 2 maxDays = Day(App.EoMonth(Range("A1"), 0)) Set holdys = App.Range("祭日") LimitEachDay = App.XLookup(Range("C1:AG1"), Range("AH2:AH4"), Range("AI2:AI4"), "") End Sub Private Sub データ転記() 'オリジナルシートを温存する() Me.UsedRange.Clear With Sheets("原本") '念のため、原本シートの「漢数字の〇」を「記号の○」に変換 Intersect(.UsedRange, .Columns("C:AG")).Replace "〇", "○", xlWhole .UsedRange.Copy End With Range("A1").PasteSpecial xlPasteValuesAndNumberFormats, xlNone, False, False Range("AL2").Value = "4連続以上" Range("AM2").Formula2R1C1 = "={""確定数"",""有給"",""可能残"",""出勤日数""}" '「○」を「可」に変更 Intersect(Me.UsedRange, Columns("C:AG")).Replace "○", "可", xlWhole '日付シリアル値を2行目に入力 Range("A1").Copy Range("C2") With Range("C2") .AutoFill Destination:=.Resize(1, maxDays), Type:=xlFillDefault End With Range("C2:AG2").NumberFormatLocal = "d" Range("C2").Resize(maxStaffs + 6, 31).HorizontalAlignment = xlCenter With Cells(maxStaffs + 4, "C").Resize(1, maxDays) .Formula = _ "=IF(NETWORKDAYS(C$2,C$2,祭日),XLOOKUP(C$1,$AH$2:$AH$4,$AI$2:$AI$4),"""")" .Value = .Value End With Dim 勤務可能, CL msg1 = "" For CL = 3 To maxDays + 2 勤務可能 = App.CountIf(Cells(3, CL).Resize(maxStaffs), "可") If 勤務可能 < Cells(maxStaffs + 4, CL) Then msg1 = msg1 & "," & CL - 2 & vbCrLf End If Next CL If msg1 <> "" Then MsgBox "以下は、○不足の日です。" _ & vbCrLf & msg1 & vbCrLf & "処理を中止します。" End End If End Sub Private Sub 単純割り振り() '勤務日数だけ合わせるのみ Dim RW, CL, orderAry, Limit For RW = 3 To maxStaffs + 2 orderAry = getRndAry(maxDays) '乱数配列を取得する(2次元→maxDays x 1) '当人の所要○数を算出 Limit = Cells(RW, "B") - App.Count(Cells(RW, "C").Resize(1, maxDays)) For CL = 3 To maxDays + 2 If Cells(RW, orderAry(CL - 2, 1) + 2) = "可" Then Cells(RW, orderAry(CL - 2, 1) + 2) = "○" Limit = Limit - 1 If Limit = 0 Then Exit For End If End If Next CL If Limit > 0 Then msg1 = msg1 & Cells(RW, "A") & _ "さんは、〇の数が絶対的に不足しています。" & vbCrLf End If Next RW DisplayResult False '中間状況を表示 End Sub Private Sub 列平準化() 'A,B,C列の平準化 Dim i, k, rRank As Range, MinCL As Long, maxCL As Long Dim kFromBack As Long, CL, TooLittle, RW Dim rd rd = getRndAry(maxDays) '入れ替え調整用の乱数を埋める Cells(maxStaffs + 9, "C").Resize(1, maxDays) = App.Transpose(rd) Cells(maxStaffs + 10, "C").Resize(1, maxDays).FormulaR1C1 = _ "=N(R[-4]C)*1000000-N(R[-3]C)*1000+R[-1]C" Set rRank = Cells(maxStaffs + 11, "C").Resize(1, maxDays) Cells(maxStaffs + 11, "C").Formula2 = _ "=RANK(" & rRank.Offset(-1).Address & "," & rRank.Offset(-1).Address & ",1)" For k = 1 To 100 'とりあえず100回繰り返す If Val(Cells(maxStaffs + 6, App.Match(maxDays, rRank, 0) + 2)) - _ Val(Cells(maxStaffs + 6, App.Match(1, rRank, 0) + 2)) < 2 Then Stop Exit For Else For i = 1 To maxDays - 1 MinCL = App.Match(i, rRank, 0) + 2 If Cells(maxStaffs + 7, MinCL) <> "" Then If Cells(maxStaffs + 7, MinCL) > 0 Then '可能枠あり For kFromBack = maxDays To i + 3 Step -1 maxCL = App.Match(kFromBack, rRank, 0) + 2 For RW = 3 To maxStaffs + 2 If Cells(RW, MinCL) = "可" Then '当該行に○があれば入れ替え If Cells(RW, maxCL) = "○" Then Cells(RW, MinCL) = "○" Cells(RW, maxCL) = "可" GoTo tryNextSet End If End If Next RW Next kFromBack End If End If Next i tryNextSet: End If Next k DisplayResult True End Sub Private Function series4(RW) As String '1行の4連続勤務の存在チェック Dim COL, Cnt, Msg Cnt = 0 For COL = 3 To maxDays + 3 '1列余分にセットする If Cells(RW, COL) = "○" Then Cnt = Cnt + 1 Else If Cnt >= 4 Then Msg = Msg & "," & COL - Cnt & "-" & COL - 1 End If Cnt = 0 End If Next COL If Msg <> "" Then series4 = Msg End If End Function Private Sub 連続4回避() '4連続勤務回避処理 Dim RW, COL, Msg, Cnt, i, Detail, ckCL, colDetail, Cont4, isFive For RW = 3 To maxStaffs + 2 Cont4 = series4(RW) If Cont4 <> "" Then 'Cells(RW, "AL") = Cont4 Detail = Split(Cont4, ",") ',12-15,26-30 For COL = 1 To UBound(Detail) colDetail = Split(Detail(COL), "-") '(1)12-15,(2)26-30 isFive = IIf(colDetail(1) - colDetail(0) = 4, 1, 0) '12-15、27-29(5日連続は頭尾は除く) For i = colDetail(0) + isFive To colDetail(1) - isFive If Exchage(RW, i) = "Done" Then Exit For End If Next i Next COL End If Next RW End Sub Private Sub 連続4残チェック() '全行について4連続勤務書き出し Dim RW, Msg Cells(3, "AL").Resize(maxStaffs).ClearContents For RW = 3 To maxStaffs + 2 Msg = series4(RW) If Msg <> "" Then Cells(RW, "AL") = Msg End If Next RW End Sub Private Function Exchage(自r, 自c) '可と○を入れ替え Dim i, k, 相手R For i = 3 To maxStaffs + 2 If i <> 自r And Cells(i, 自c) = "可" Then '自r,相手R 相手R = i For k = 3 To maxDays + 2 If k <> 自c And Cells(自r, k) = "可" And Cells(相手R, k) = "○" Then Cells(自r, 自c) = "可" 'テストのため仮変更(○→可) Cells(相手R, 自c) = "○" 'テストのため仮変更 If isAvailableDay(相手R, 自c) And isAvailableDay(自r, k) Then Cells(自r, k) = "○" Cells(相手R, k) = "可" Exchage = "Done" Exit Function Else '仮変更をキャンセル Cells(自r, 自c) = "○" Cells(相手R, 自c) = "可" End If End If Next End If Next i End Function Private Sub DisplayResult(All As Boolean) '結果表示 If Not All Then With Cells(maxStaffs + 4, "B") .Resize(8, 1).ClearContents .Formula2 = _ "={""所要○数"";""実○数"";""差異"";""可残数"";" & _ """過少列"";""乱数"";""合成"";""RANK""}" Dim tmp tmp = .Resize(8, 1).Value .Resize(8, 1).Value = tmp End With With Cells(maxStaffs + 5, "C").Resize(1, maxDays) .FormulaR1C1 = "=IF(R[-1]C="""","""",COUNTIF(R3C:R[-3]C,""○""))" End With With Cells(maxStaffs + 6, "C").Resize(1, maxDays) .FormulaR1C1 = "=IF(R[-1]C="""","""",N(R[-1]C)-N(R[-2]C))" End With With Cells(maxStaffs + 7, "C").Resize(1, maxDays) .FormulaR1C1 = "=IF(R[-1]C="""","""",COUNTIF(R[-85]C:R[-5]C,""可""))" End With Else '最終結果表示 '数式入力(出勤可能日数算出/各人) With Range("AM3").Resize(maxStaffs) .Formula2R1C1 = "=COUNTIF(RC[-36]:RC[-6],{""○"","">0"",""可""})" End With Range("AP3").Resize(maxStaffs).FormulaR1C1 = "=SUM(RC[-3]:RC[-2])" Rows(maxStaffs + 9).Resize(3).ClearContents End If End Sub Private Function isAvailableDay(RW, COL) 'ある日の前後○連続性をチェック Dim i, Cnt For i = COL - 1 To 3 Step -1 If Cells(RW, i) = "○" Then Cnt = Cnt + 1 Else Exit For End If Next For i = COL + 1 To 33 If Cells(RW, i) = "○" Then Cnt = Cnt + 1 Else Exit For End If Next isAvailableDay = Cnt < 3 End Function Private Function getRndAry(n As Long) '乱数生成 Dim i As Long, myRnd() As Double, randomOrder, Check Randomize ReDim myRnd(1 To n) Do For i = 1 To n myRnd(i) = rnd '乱数を格納 Next i Check = App.Frequency(App.Frequency(myRnd, myRnd), Array(1)) '重複の有無を確認 Loop While Check(2, 1) <> 0 '重複が無くなるまで randomOrder = App.Small(myRnd, App.Sequence(n)) '乱数を昇順に並べ替え getRndAry = App.Match(randomOrder, myRnd, 0) '乱数の順位配列 End Function Sub 最終チェック() initialize Dim i, k With Sheets("原本") '出勤可能日と決定出勤日の齟齬 For i = 3 To maxStaffs + 2 For k = 3 To maxDays + 2 If Cells(i, k) <> .Cells(i, k) Then Select Case True Case Cells(i, k) = "○" msg2 = msg2 & vbCrLf & "シート間に齟齬:" _ & Cells(i, k).Address(0, 0) & "セル" Cells(i, k).Interior.Color = vbRed Cells(i, k).Font.Color = vbYellow Case IsEmpty(Cells(i, k)) And .Cells(i, k) = "○" Cells(i, k).Interior.Color = vbYellow End Select End If Next k Next i End With For i = 3 To maxStaffs + 2 '出勤日数と希望日数の齟齬 If Cells(i, "B") <> Cells(i, "AP") Then Cells(i, "B").Interior.Color = vbRed Cells(i, "B").Font.Color = vbYellow End If Next i Dim RW, COL, Detail, colDetail For RW = 3 To maxStaffs + 2 '4日以上連続に色付け If Cells(RW, "AL") <> "" Then Detail = Split(Cells(RW, "AL"), ",") ',12-15,26-30 For COL = 1 To UBound(Detail) colDetail = Split(Detail(COL), "-") '(1)12-15,(2)26-30 For i = colDetail(0) To colDetail(1) Cells(RW, i).Interior.Color = vbBlue Cells(RW, i).Font.Color = vbWhite Next i Next COL End If Next RW End Sub |
[196586] Re[11]: 出勤表の自動作成マクロについて- ■記事引用/メール受信=ON■ □投稿者/ マクロ初心者 -(2025/05/04(07:45)) □U R L/ 半平太さん、返信が遅くなりすみませんでした。 EXCELに不慣れでなかなかマクロが出来ませんでしたが、 とりあえず実行までやりましたが、パソコンが固まったまはまになってしまう場合は、どうしたら良いでしょうか?(マウスに丸いグルグルが表示されます) |
[196587] Re[12]: 出勤表の自動作成マクロについて- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2025/05/04(16:18)) □U R L/ >(マウスに丸いグルグルが表示されます そちらで使ったデータがどんなものか分からないと、 当方でトラブルを再現するのはむずかしいです。 なので、そちらの原本シートのAL1セルに下式を入れ、 出てきた結果1列(AL1:AL83)をコピーして、この掲示板に貼り付けて貰えませんか? =BYROW(B1:AI83,LAMBDA(r,TEXTJOIN(",",FALSE,r))) 結果例: ,A,B,A,C,B,B,A,A,B,A,C,B,B,A,A,B,A,C,B,C,A,A,B,A,C,B,B,A,A,B,A,, 出勤日数,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,11,21,22,23,24,25,26,27,28,29,30,31,A,40 13,,,○,1,○,○,○,,,○,,1,○,○,,,○,○,○,○,○,,,,○,○,○,○,,,,B,52 : : : :: : 83行目まで |
[196588] Re[13]: 出勤表の自動作成マクロについて- ■ ![]() □投稿者/ マクロ初心者 -(2025/05/09(07:33)) □U R L/ 半平太さん、返信遅くなり申し訳ありませんでした。 別のパソコンでやってみたら、マクロ無事実行できました。 自分のやりたかった結果がでたので、一旦この質問は解決にさせていただきます。 色々とアドバイスいただけて、本当に助かりました。ありがとうございます。 またマクロを追加したり変更したりしたい時に、ご質問させていただくかもしれないですが、宜しくお願い致します。 |
このトピックに書きこむ |
---|