アプリ版:「スタンプのみでお礼する」機能のリリースについて

急遽、エクセルVBAを組んでくれと頼まれたのでわかる方、教えていただけますか?

開始日時(A行)と終了日時(B行)があり、
開始と終了の範囲でC以降日付になっており
指定の範囲内でセルの色が塗られるいうものなのですが
なにせ急ぎとVBAがほとんどわからないのでなるべくわかりやすく
教えていただけるとありがたいです。
ちなみにsheetにコードを記入するのとmoduleにコードを記入するのでは
どう違うのですか?わからないまでも一応、色が塗られるところまでは
できたのですがどうやってセルの時間を取得して範囲を指定すれば
良いのかなどがわかりませんどうかよろしくお願い致します。
下記は作成途中ですが・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim row As Integer
Dim line As Integer
row = 5
line = 9
  Set objR = Range("A1").Resize(1, 4).Offset(1, 2)
objR.Interior.ColorIndex = 8
End Sub

A 回答 (5件)

見当外れの回答でしたら申し訳ないですが、



「どこかのセルに期間を入力して、それに合致するセルに色をつけたい」
であれば、わざわざVBAでなくても条件付き書式でよいかと思います。
色をつけたい範囲全てを選択した状態で書式>条件付き書式で
「セルの値が」「次の値の間」で期間の開始と終了のセルの間
と設定すればよいかと思います。

差し支えなければ具体的なデータの例を挙げていただければ
より的確な回答がしやすいのですが。

参考URL:http://kokoro.kir.jp/excel/conditional_form.html

この回答への補足

すいません、返事が遅れました。
don9don9さん返事ありがとうございます。

エクセルもよくわからないのでVBAを使用しなくても出来るならそのほうが良いのですが・・・
例えば、予定表を作る際に開始日時に2008/4/10(A1)と入力し終了日時に2008/4/18(B1)と入力したらC1以降に1・2・3と日付のindexがあったとしたら10~18日までの間のセルの色(何色でも良いです)が変わるといったものを作成したいのです。ただ、土・日は色を塗りたくないので
休みの日は色を変更しないといった感じにしたいのです。
indexは月初めだけ4/1と表示されていてその他は2・3・4という感じになります。
こんな感じわかりますか?

どうかよろしく御願い致します。

補足日時:2008/04/21 23:21
    • good
    • 1

こんなのではどうでしょうか?



C1に以下を設定します。
=IF($A1<>"",IF(MONTH(DATE(YEAR($A1),MONTH($A1),COLUMN(A1)))=MONTH($A1),DATE(YEAR($A1),MONTH($A1),COLUMN(A1)),""),"")
[書式][セル][セルの書式設定]の[表示形式]を、[ユーザー定義]で[種類]を m/d にします。
[書式][条件付き書式][条件付き書式の設定]で、[数式が][=(C1>=$A1)*(C1<=$B1)*(WEEKDAY(C1,2)<=5)] 書式:フォントの色[赤]

このC1を、C2:AG1(AGは最大31日なので)にコピーします。
これでA1とB1の日付の間の土日以外を赤にします。

で、1日以外は日だけなのでC2:AG1を選択して
[書式][セル][セルの書式設定]の[表示形式]を、[ユーザー定義]で[種類]を d にします。

C1:AG1を必要なだけ行方向にコピーすれば、行方向にも増やせます。
    • good
    • 0

ANo.2に間違いがありました。



誤:このC1を、C2:AG1(AGは最大31日なので)にコピーします。
正:このC1を、D1:AG1(AGは最大31日なので)にコピーします。

誤:で、1日以外は日だけなのでC2:AG1を選択して
正:で、1日以外は日だけなのでD1:AG1を選択して
    • good
    • 0
この回答へのお礼

返事が遅くなって申し訳ないです。
参考になりました。ありがとうございます。

お礼日時:2008/04/30 00:31

3列目以降の書式がはっきりしませんが、こんな感じでやってみてください。



Dim Y, X, T, D, S, E
For Y = 1 To Cells(1, 1).CurrentRegion.Rows.Count
  S = Cells(Y, 1).Value '開始日
  E = Cells(Y, 2).Value '終了日
  For X = 3 To Cells(Y, 1).CurrentRegion.Columns.Count
    T = Cells(Y, X).Text 'セル内容を表示されている形式で取得
    If Not IsDate(T) Then '日付形式でなければ編集する
      T = Year(S) & "/" & Month(S) & "/" & CStr(T)
    End If
    Select Case CDate(T) '日付に変換して範囲チェック
      Case S To E '開始日~終了日の間
        Select Case Weekday(D) '曜日を確かめる
          Case 2 To 6 '月~金の間
            'セル内部を指定した色で着色する
            Cells(Y, X).Interior.Color = &HC0D0E0
        End Select
    End Select
  Next
Next
End Sub

色は適当に変更してください。
また、Cells(Y, X).Interior.ColorIndex = 2 のような指定もできます。尚、当然ではありますが土日以外の休日は処理できません。
    • good
    • 0
この回答へのお礼

VBAってすごいですね!!!
ありがとうございます!!
助かりました!!!

お礼日時:2008/04/23 00:56

No.1です。


予定表とのことですので、下記のようなものをイメージしました。
(全ての行に日付が入っているのではなく、タイトル行にのみ日付が入っている?)
そのつもりで回答致します。

  A     B     C  D  E  F  ・・・
1 開始日  終了日   4/1 2  3  4 ・・・
2 2008/4/10 2008/4/20 (ここのセルに色をつけたい)
3 2008/4/14 2008/4/21 (ここのセルに色をつけたい)
・・・以下複数行

まず日付項目(C1から右)を全て日付形式で入力します。
これをセルの書式設定でユーザー定義サイズ"m/d"にすると「4/1」
"d"にすると「1」となります。
直接1と入力すると、Excelは1900/1/1と判断しますので
必ず日付形式で入力して、書式設定で表示を変えるようにします。

次に色をつけたい範囲(C2から右)を全て選択して「条件付き書式」で
「数式が」「=AND($A2<=C$1,$B2>=C$1,WEEKDAY(C$1,2)<=5)」の場合
「セルのパターンを(任意の色)」と設定します。
これでC列以降の1行目(タイトル行)が同じ行のA列の日付以上、
同じ行のB列の日付以下、土日以外である場合に該当セルに色がつきます。

土日以外の休み(祝祭日)まで対応となるとややこしくなりますので
とりあえずはこのくらいで。
    • good
    • 0
この回答へのお礼

ありがとうございます!!!
参考になりました!!
関数のみでこんなことが出来るんですね~
勉強になりました!!

お礼日時:2008/04/23 00:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A