• ベストアンサー

VBAで日付分塗りつぶす

添付画像のようなシートで 例えばI9セルに4と入力すると J9セルからY9セルまで(つまり4日間)を塗りつぶすような コードがしりたいです。 入力する数値はランダムですのでその数値に合わせて 日にち分塗りつぶしを行いたいです。 宜しくお願いします。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

>数値を消した場合、塗りつぶされていたところも >塗りつぶしなしの状態に戻す 0、空欄、数値以外が埋まった時に消すようにしてみました。 また、細かなところを直しました。 Private Sub Worksheet_Change(ByVal Target As Range)    Dim MyRange As Range  Const ColsUnit = 4    '1日当たりの列数  Const ClearDays = 10   '空欄の時に該当行の背景色を消す日数  Const MyColor = 5287936 '背景色    With ThisWorkbook.ActiveSheet   If ((Target.Column Mod ColsUnit = 1) And _     (Target.Column > 5)) Then    If ((Target.Value > 0) And IsNumeric(Target.Value)) Then     Set MyRange = Range(.Cells(Target.Row, Target.Column + 1), _              .Cells(Target.Row, Target.Column + Target.Value * ColsUnit))     MyRange.Interior.Color = MyColor    Else     Set MyRange = _       Range(.Cells(Target.Row, Target.Column + 1), _          .Cells(Target.Row, Target.Column + (ClearDays * ColsUnit)))     MyRange.Interior.Pattern = xlNone    End If   End If  End With End Sub

yyrd0421
質問者

お礼

素晴らしいコードを本当ありがとうございました。 目的の事が行えました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

先ほどのコードでは、A列、E列に値が埋まっても反応してしまい、 更に、0が埋まった時にも反応してしまうので 再掲示します。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim MyRange As Range  Const MyColor = 5287936    With ThisWorkbook.ActiveSheet   If ((Target.Column Mod 4 = 1) And _     (Target.Column > 5) And _     (Target.Value > 0)) Then '   Set MyRange = Range(.Cells(Target.Row, Target.Column + 1), _ '             .Cells(Target.Row, Target.Column + 4)) '   MyRange.Interior.Pattern = xlNone        If Target.Value <> "" Then     Set MyRange = Range(.Cells(Target.Row, Target.Column + 1), _              .Cells(Target.Row, Target.Column + Target.Value * 4))     MyRange.Interior.Color = MyColor    End If   End If  End With End Sub

yyrd0421
質問者

補足

ありがとうございます。 望み通りのことができました。 これはもしできればでよろしいのですが 数値を消した場合、塗りつぶされていたところも 塗りつぶしなしの状態に戻すことはできないでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

例えば、 I列に3が埋まったら、 右隣りから右方向に 4列/日*3=12個のセルの背景色を何らかの色に染めるんですね。 その後、Q列に2が埋まったらどのような動きにすればいいでしょうか?。 更に、 Q列に2が埋まったまま I列の3が1に書き換わったら どのような動きをすればいいでしょうか? 更に例えば その後、Q列に埋まっている2を空欄に置き換えたら どのような動きにすればいいでしょうか? そういったことを考えなくていいのであれば 次のようなコードでいけるんじゃないかと思います。 なお、I列など、投入列に数値以外が埋まることを想定していません。 数値以外が入った時にどうすればいいかを説明してくれれば 対応できると思います。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim MyRange As Range  Const MyColor = 5287936    With ThisWorkbook.ActiveSheet   If Target.Column Mod 4 = 1 Then '   Set MyRange = Range(.Cells(Target.Row, Target.Column + 1), _ '             .Cells(Target.Row, Target.Column + 4)) '   MyRange.Interior.Pattern = xlNone        If Target.Value <> "" Then     Set MyRange = Range(.Cells(Target.Row, Target.Column + 1), _              .Cells(Target.Row, Target.Column + Target.Value * 4))     MyRange.Interior.Color = MyColor    End If   End If  End With End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのセル塗りつぶしについて(VBA)

    いつもお世話になっています。 エクセルシートで、任意のセルに数値を入力したとき、入力したセルから右側に向けて、その数値分、自動で塗りつぶすようにしたいのですが、どのようにすれば良いのでしょうか? 色は何でも構いません。 画像添付します。

  • エクセルシートの塗りつぶしをVBAでやるには?

    エクセルのセル塗りつぶしについて(VBA) いつもお世話になっています。 エクセルシートで、任意のセルに数値を入力したとき、入力したセルから右側に向けて、その数値分、自動で塗りつぶすようにしたいのですが、どのようにすれば良いのでしょうか? 色は何でも構いません。 画像添付します。

  • エクセル内でのVBAの質問です。

    閲覧ありがとうございます。 エクセルの作業ファイルにてVBAのコードを作成しているのですが、中々思う通りに実行できないので、ご教授願います。 実行したい内容については以下の通りです。 ボタン1を押すと(添付画像上段のブック)、マイドキュメント内にある「データ転送ソフト2」という名前のブックを開き、そのブックのシート「A」内(添付画像下段)の、ボタン1を押したシートのF1セル(添付画像上段のブック)と同じ文字(日付)の列と"う"と入力された行の交差したセルの数値(添付画像下段の紫色のセル)をコピーして、ボタン1を押したシートのT4のセル(転送値1:の右隣にある薄緑のセル)に貼り付ける作業が行えるコードをご教授願いたいです。 要約しますと、作業しているシートのボタン1を押すと、別の場所にあるブックを開き、そのシート内の条件に沿った数値をコピーして、作業しているシートの指定されたセルに貼り付ける作業が行いたいです。 とても分かりにくい文章で申し訳ございませんが、お願いします。 可能ならば、コードの解説もつけてくださると嬉しいです。

  • VBA

    エクセルシートに1から5の数値がランダムに打ち込んであって、1から5以外の数値が混ざっていた場合、「再入力してください」と表示させるVBAコードを作りたいのですが、どうしたらよいでしょうか?

  • VBAについて教えて下さい

    VBAを勉強中しております。詳しい方にお尋ね致します。BシートのP1、Q1を参照して、Aシートの該当セルに貼り付けるコードになります。 If Len(.Cells(i, P1)) > 0 Then Sheets("A").Cells(14, 2) = .Cells(i, P1) Sheets("A").Cells(14, 4) = .Cells(i, Q1) j = j + 1 Q1には数値が入るのですが、この数値が500未満である場合とそうでない場合で表示を変えたいのですが、どのように書いたらいいでしょうか。 Aシートのセルは(14,4)(14,3)(14.4)に以下の処理を反映させたいです。 =IF(q1<500,"<",ROUND(A1/(10^(LEN(A1)-1)),1)) =IF(q1<500,"500","○") =IF(q1<500,"",LEN(A1)-1) よろしくお願い致します。

  • Exel VBAで1つずつ代入するには?

    VBA初心者です。 日報を入力する作業を、Exel VBAを使って省力化したいと考えています。 1日が1シート、1か月分で1ブックになっています。 いったん別シートにべた打ちしたデータを、VBAで1つずつ各日のシートに貼り付けたいのです。 1枚目のシートのB列のセルB2~B32(1日~31日分に相当)に数値が入っているとして、 これを格納し、 シート「1日」セルF2、シート「2日」セルF2...シート「31日」セルF2 という具合に各シートの同じセル番地のセルに1つずつ貼り付けていくイメージです。 こんなふうに書いてみました。 ---------------------------------------- Sub test() Dim myNum(30) As Integer Dim i As Integer Dim j As Integer For i = 1 To 30 myNum(i) = Worksheets(1).Cells(i + 1, 2) For j = 1 To 30 Worksheets(i + 1).Cells(2, 6) = myNum(i) Next j Next i End Sub ---------------------------------------- でも、これでは1か月の日数の違いに対応できません。 これ以上はお手上げなので、お知恵を貸してください。 よろしくお願いします。

  • VBAコードでExcel数値入力

    見積書(sheet1)ですがD6、D11に数値入力でE1の合計金額がH2の数値と合致したいのですが 条件としてD6数値はD6+D11合計のセルH1の%(添付画像では30%)、D11は100%-セルH1 %です。 ボタン入力したいのですがVBAコードをどなたか解る方よろしくお願いします。 尚、E列数式はF列の記載通りです。

  • Excel2007VBA 日付の加算について

    ●質問の主旨 コピー元のシートの特定セル(A3セル)に入力されている日付に対して 加算を行い、その加算した日付をシート名とコピー先の シートの特定セルに入力するためにはどうすればよいでしょうか? 具体的には下記のコードをどのように書き換えればよいでしょうか? 「Worksheets(i + 1).Name = mydate」のところでエラーが出てしまいます。 ご存知の方、ご教示願います。 ●コード Sub 一週更新() Application.ScreenUpdating = False Dim i As Integer Dim mydate As Date '既存のシート数を取得 i = ThisWorkbook.Worksheets.Count '最終シートをコピーして後ろに挿入 Worksheets(i).Copy after:=Worksheets(i) 'mydateは最終シートのA3セルに入力されている日付の1週間後の日付とする mydate = DateAdd("ww", 1, Worksheets(i).Range("A3")) '追加したシートのシート名はmydate2の日付とする Worksheets(i + 1).Name = mydate '新しく作成したワークシートについて以下の処理を行う With ActiveSheet Range("A3") = mydate Range("A12").ClearContents Range("A19").ClearContents Range("A26").ClearContents Range("A32").ClearContents End With Application.ScreenUpdating = True End Sub ●補足 上記コードは週単位の報告書を作成するためのコードです。 コピー元のA3セルは表示上は9/16となっており、 「セルの書式設定上」は「日付」→「3/14」, ロケールは日本語です。 私はVBA初心者です。

  • ExcelのVBAについて。

    ExcelのVBAについて。 画像のようなコードを利用してセルに入力時の日付時間を自動的に付加させたいのですが、、 VBA初心者な為に上手くいきません。 コード自体はサイトのを切り貼りして使えるのですが、これ以上の応用例に行き着けません。目的としては、データベース的に、あと入力数値から特定文字を抜き出して変数を当て嵌め文字列の語呂を当てます。様式はまだ作成中ですが、ある種の図表化してプリントアウトまでしたいと思っています。 何が上手くいかないか、まず自動的に付加させる所は何となく出来ているので、これをシート1とした場合に、シート2に図表化した転記内容を構成し、、シート1入力、シート2表示、またシート1A3セルに戻るというコードにしたいです。 この記述は不味いとかこうこうああした方が良いというアドバイスや指摘をお願いします。 よろしくお願いします。

  • エクセルVBA 結合セルに指定した数まで連番を振る

    皆さんこんにちは。 エクセル2013を使用しています。 Sheet1のA列が2行ずつ結合しています。 A3(固定)から下方向にUserform1のTextbox1に入力した 数値まで連番を振りたいと思い下記のコードを 作成しました。 例えばTextbox1に”10”と入力してコマンドボタンを押すと セルA3・A5・A7・A9・A11・・・の順に1~10が入力されるように したかったのですが実際動かしてみると 1・2・4・6・8・10が入力されてしまいます。 結合セルだからなのでしょうか? でもセルA5に2は入るし・・・と イマイチ理由が分かりません。 A3・A5・A7・A9・A11・・・の順に 連番を振るにはどうしたら良いでしょうか? ------------------------------------------------------- Sheets("Sheet1").Range("A3").Select Dim i As Long Dim j As Long i = TextBox1.Value For j = 1 To i ActiveCell.Offset(j - 1, 0) = j Next

このQ&Aのポイント
  • MFC-L2730DNで印刷できないトラブルが発生しました。エラーコード「印刷できません05」と表示される状況です。どのような環境で使用しているかなど詳細な情報を共有していただけますか。
  • Windows10で有線LAN接続されたMFC-L2730DNで印刷できないトラブルが発生しました。エラーコード「印刷できません05」と表示されています。関連するソフト・アプリについても情報を提供していただけますか。
  • MFC-L2730DNの印刷できないトラブルが発生しました。エラーコード「印刷できません05」と表示され、Windows10で有線LAN接続されています。対処方法や解決策を教えていただけますか。
回答を見る

専門家に質問してみよう