- ベストアンサー
エクセルVBAでスケジュール表作成の自動化方法
- エクセルVBAを使用して、1ヵ月単位のスケジュール表を自動作成する方法について教えてください。
- スケジュール表には、指定した年と月のカレンダーが自動的に入力されるようにしたいです。
- さらに、新しいシートのC列に表示される曜日が土曜日または日曜日であれば、行全体を指定の色で塗りつぶしたいです。エラーが発生してしまっています。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
間違っていたらごめんなさい。 oneCellは必要ないのではないでしょうか?
その他の回答 (6)
- jobvba
- ベストアンサー率50% (2/4)
If DateSerial(y, m, i) = DateSerial(y, m + 1, 0) Then End EndをExit Forに置き換えてみてください 追加した部分が動かない原因は、ここのEndでマクロ自体が終了してしまっていたからです! こんな感じでどうでしょうか^^;
お礼
できました!! ありがとうございました。 まだ追加機能があるので、もしわからなくなったらまたお願いします・・・。
- jobvba
- ベストアンサー率50% (2/4)
こうなったらとことんやりましょう^^ 微妙に修正してみました テスト済みです 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
お礼
なぜできないんでしょうか。。。 全文だとこんな感じです。 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)
TargetRangeには、処理したいセルの範囲が入っていますか? 例 Set TargetRange = Range("A1:Z100") For Each文でループするには、Setで範囲を指定しなくてはなりません
お礼
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)
標準モジュールに書いてますか? 間違ってたらすみません
お礼
はい。標準モジュールに書いています。
- pbforce
- ベストアンサー率22% (379/1719)
Font.ColorIndexなので文字色(フォントカラー)が16番になっていませんか?
お礼
ご指摘を受けて、 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)
これでどうでしょうか For Each C In TargetRange If C.Value = "土" Or C.Value = "日" Then Rows(C.Row).Font.ColorIndex = 16 End If Next
お礼
ありがとうございます。 しかし、やっぱりコンパイルは通りますが実行されません。。。 なぜでしょう??
お礼
すみません。 For Each C In ActiveSheet If C.Formula.Value = "土" Or "日" Then ActiveRows.Font.ColorIndex = 16 End If Next C に修正したら、コンパイルは通るんですけど実行されません。。 根本的な考え方が間違ってるのでしょうか?