以前に勤務表で質問させていただきました。大変に活用できています。
以前に勤務表で質問させていただきました。大変に活用できています。 関数の勉強とマクロの勉強を色々していきたいです。関数の組み合わせた式がとても理解できないのでマクロも勉強したいです。マクロは初心者に毛が生えた程度ですがコードを読めばなんとか理解できる感じです。 以前の質問は https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13220550953 の内容のものでこれをマクロで表現させるとどのようになりますでしょうか? 関数が理解できていないのにマクロ??と思われるかもですが、こんな方法があるよって感じでご教授いただければ幸いです。 宜しくお願いします。
Excel・175閲覧・500
ベストアンサー
画像の様に AY1 特 AX2 以下、ローテーション AY2 以下、特日 を入力して下さい。 Option Explicit ' Sub Macro1() Dim Row1 As Integer Dim Row2 As Integer Dim Col1 As Integer Dim Col2 As Integer Dim IMonth As Integer Dim IDate As Date Dim RCnt As Integer Dim Rota As Integer ' [B6:AV35,B38:AV67].ClearContents RCnt = Cells(Rows.Count, "AX").End(xlUp).Row - 1 Rota = 2 Application.ScreenUpdating = False ' For Col1 = 2 To 42 Step 8 ' For Row1 = 6 To 38 Step 32 IMonth = IMonth + 1 Cells(Row1 - 2, Col1) = IMonth IDate = DateSerial([B2], IMonth, 1) IDate = IDate + 1 - Weekday(IDate) ' For Row2 = Row1 To Row1 + 25 Step 5 ' For Col2 = Col1 To Col1 + 6 Cells(Row2, Col2).NumberFormatLocal = "D" ' If IMonth = Month(IDate) Then Cells(Row2, Col2) = IDate ' If WorksheetFunction.CountIf([AY:AY], IDate) Then Cells(Row2 + 1, Col2) = [AY1] Else Cells(Row2 + 1, Col2) = Cells(Rota, "AX") Rota = (Rota - 1) Mod RCnt + 2 End If End If IDate = IDate + 1 Next Col2, Row2, Row1, Col1 End Sub
ありがとうございます! 完璧すぎて感動です。 [B6:AV35,B38:AV67]の表現も初めてみました。Rangeを省略できるのですね。 コードはこれから勉強したいのですが関数の式をVBAで表現するのと一緒でしょうか? MODというのは割り算という認識なのですがローテを何かを基に計算しているのでしょうか?
質問者からのお礼コメント
以前にご回答いただき、今回も回答いただき何かのご縁を感じました。 またご丁寧にコードも提示いただき助かります。まだコードの理解がまだですが勉強していきます。 ありがとうございました。
お礼日時:1/17 11:40