• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAの繰り返し構文について)

Excel VBAの繰り返し構文について

このQ&Aのポイント
  • Excel VBAの繰り返し構文について初心者が理解するのは難しいかもしれません。特に、セルの値を繰り返し処理する場合には注意が必要です。
  • A列に日付、B列に曜日、C列に休、D列に1直、E列に2直、という形の年間シフトを作成するためには、VBAの繰り返し構文を使用する必要があります。
  • 具体的には、C列が空白の行のD列に指定された数値を入力するマクロを作成する必要があります。しかし、初級者には理解しづらい部分もあるかもしれません。

質問者が選んだベストアンサー

  • ベストアンサー
  • don9don9
  • ベストアンサー率47% (299/624)
回答No.3

私は ・休みをはさまない連続した出勤日をひとかたまりとして、全てに同じ番号を振る ・休みをはさんだ次の出勤日から、+1した番号を振る(ただし上限は6で、それを越えたら1に戻る) ・連続した休みもひとかたまりとする(2日連続で休みがあったとしても、その次の出勤日で+2されるわけではない) という意味だと解釈した(一部勝手な憶測も混じっていますが)ので、なるべく元のコードを残す方向で以下のように修正してみました。 ご質問の意図を読み違えていたら申し訳ありません。 Sub C列のセルが空白の行のD列に数値を入力() Dim 行 As Long Dim 下端行 As Long Dim 値 As Integer 値 = Range("A2").Value '初期値をA2セルの値とする 下端行 = Range("A" & Rows.Count).End(xlUp).Row Range("D3:D" & 下端行).Value = "" 'D列を一旦クリアする For 行 = 3 To 下端行 If 行 = 3 Then '最初(3行目)のデータは、現在行が空白でない場合にカウントアップ If Range("C" & 行).Value <> "" Then 値 = 値 + 1 End If Else '2番目(4行目)以降のデータは、一つ前の行が空白で、かつ現在行が空白でない場合にカウントアップ If Range("C" & 行 - 1).Value = "" And Range("C" & 行).Value <> "" Then 値 = 値 + 1 End If End If 'カウントアップした結果6を越えてしまった場合、1に戻す If 値 > 6 Then 値 = 1 End If If Range("C" & 行).Value = "" Then Range("D" & 行).Value = 値 End If Next End Sub

coccoachu
質問者

お礼

あああ!! ありがとうございます~!! つたない質問文で的確な判断をしていただけて…。 まさにdon9don9さんのおっしゃる通りの作業がしたかったのです!! 書いていただいたコードをもう一度しっかり見直して、勉強させていただきます!! 他のお二方もアドバイスありがとうございました!

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 Dim 行 As Long, 直 As Integer, flg As Boolean 直 = Range("A2").Value - 1 flg = False For 行 = 3 To Range("A" & Rows.Count).End(xlUp).Row If Range("C" & 行).Value = "" Then If flg = False Then 直 = 直 + 1: flg = True Else flg = False Range("D" & 行) = 直 Mod 6 + 1 End If Next

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ふむ? >要するに1~6の繰り返しです これは間違いで、+0~+6を繰り返すことにします。 わざわざマクロで繰り返し計算をしなくても、簡単に数式で求まります。 sub macro1()  dim r as long  r = range("A65536").end(xlup).row  with range("D2:D" & r)   .formula = "=$A$2+MOD(COUNTBLANK($C$2:C2),7)"   .value = .value  end with end sub

関連するQ&A