• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでスケジュール表作成・2)

エクセルVBAでスケジュール表作成の自動化方法

このQ&Aのポイント
  • エクセルVBAを使用して、1ヵ月単位のスケジュール表を自動作成する方法について教えてください。
  • スケジュール表には、指定した年と月のカレンダーが自動的に入力されるようにしたいです。
  • さらに、新しいシートのC列に表示される曜日が土曜日または日曜日であれば、行全体を指定の色で塗りつぶしたいです。エラーが発生してしまっています。

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

  • ベストアンサー
  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

間違っていたらごめんなさい。 oneCellは必要ないのではないでしょうか?

nepa-aiko
質問者

お礼

すみません。 For Each C In ActiveSheet If C.Formula.Value = "土" Or "日" Then ActiveRows.Font.ColorIndex = 16 End If Next C に修正したら、コンパイルは通るんですけど実行されません。。 根本的な考え方が間違ってるのでしょうか?

その他の回答 (6)

  • jobvba
  • ベストアンサー率50% (2/4)
回答No.7

If DateSerial(y, m, i) = DateSerial(y, m + 1, 0) Then End EndをExit Forに置き換えてみてください 追加した部分が動かない原因は、ここのEndでマクロ自体が終了してしまっていたからです! こんな感じでどうでしょうか^^;

nepa-aiko
質問者

お礼

できました!! ありがとうございました。 まだ追加機能があるので、もしわからなくなったらまたお願いします・・・。

  • jobvba
  • ベストアンサー率50% (2/4)
回答No.6

こうなったらとことんやりましょう^^ 微妙に修正してみました テスト済みです Set TargetRange = Range("B5:B35") For Each B In TargetRange If B.Value = "土" Or B.Value = "日" Then Rows(B.Row).Interior.ColorIndex = 16 End If Next

nepa-aiko
質問者

お礼

なぜできないんでしょうか。。。 全文だとこんな感じです。 Sub Sheet_Copy() Dim iCell As Integer Worksheets("原紙").Copy After:=Worksheets("原紙") y = Worksheets("スケジュール作成").Range("I3").Value m = Worksheets("スケジュール作成").Range("J3").Value iCell = 4 '日付入力開始セルの位置を指定 For i = 1 To 32 Cells(i + iCell, "A") = DateSerial(y, m, i) Cells(i + iCell, "B") = Format(DateSerial(y, m, i), "aaa") If DateSerial(y, m, i) = DateSerial(y, m + 1, 0) Then End Next i 'ここから検討中 '「曜日」が土か日だったらその行を塗りつぶす Set TargetRange = Range("B5:B35") For Each B In TargetRange If B.Value = "土" Or B.Value = "日" Then Rows(B.Row).Interior.ColorIndex = 16 End If Next End Sub >jobvbaさん ご親切にありがとうございます。

  • jobvba
  • ベストアンサー率50% (2/4)
回答No.5

TargetRangeには、処理したいセルの範囲が入っていますか? 例 Set TargetRange = Range("A1:Z100") For Each文でループするには、Setで範囲を指定しなくてはなりません

nepa-aiko
質問者

お礼

For Each B In TargetRange TargetRange = Range("B5, B35") If B.Value = "土" Or B.Value = "日" Then Rows(B.Row).Interior.Pattern.ColorIndex = 16 End If Next これでもダメでした・・・(涙) 何度もありがとうございます。

  • jobvba
  • ベストアンサー率50% (2/4)
回答No.4

標準モジュールに書いてますか? 間違ってたらすみません

nepa-aiko
質問者

お礼

はい。標準モジュールに書いています。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.3

Font.ColorIndexなので文字色(フォントカラー)が16番になっていませんか?

nepa-aiko
質問者

お礼

ご指摘を受けて、 For Each C In TargetRange If C.Value = "土" Or C.Value = "日" Then Rows(C.Row).Interior.Pattern.ColorIndex = 16 End If Next にしてみました。 やはりコンパイルは通りましたが、実行されません。 どうしてでしょう・・・。

  • jobvba
  • ベストアンサー率50% (2/4)
回答No.2

これでどうでしょうか For Each C In TargetRange If C.Value = "土" Or C.Value = "日" Then Rows(C.Row).Font.ColorIndex = 16 End If Next

nepa-aiko
質問者

お礼

ありがとうございます。 しかし、やっぱりコンパイルは通りますが実行されません。。。 なぜでしょう??

関連するQ&A