Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11887 / 13645 ツリー ←次へ | 前へ→

【13335】セルが変更されたらそのセルに色をつける おお 04/5/2(日) 2:55 質問[未読]
【13339】Re:セルが変更されたらそのセルに色をつける Asaki 04/5/2(日) 16:12 回答[未読]
【13384】Re:セルが変更されたらそのセルに色をつける Asaki 04/5/3(月) 22:49 回答[未読]
【13513】Re:セルが変更されたらそのセルに色をつける おお 04/5/7(金) 0:48 質問[未読]
【13518】Re:セルが変更されたらそのセルに色をつける Asaki 04/5/7(金) 9:09 回答[未読]
【13348】セルに色をつけるその1 中2のVBA通 04/5/2(日) 21:06 回答[未読]
【13354】セルに色をつける 中2のVBA通 04/5/2(日) 22:10 回答[未読]
【13456】Re:セルに色をつける おお 04/5/5(水) 23:38 お礼[未読]

【13335】セルが変更されたらそのセルに色をつける
質問  おお  - 04/5/2(日) 2:55 -

引用なし
パスワード
   セルが変更されたら、色をつけるにはどうしたらよいですか。

【13339】Re:セルが変更されたらそのセルに色をつ...
回答  Asaki  - 04/5/2(日) 16:12 -

引用なし
パスワード
   対象シートのChangeイベントを利用すればよいかと思います。
実際に色を変更するコードは、マクロの記録をすれば解るかと。

【13348】セルに色をつけるその1
回答  中2のVBA通  - 04/5/2(日) 21:06 -

引用なし
パスワード
   これは IF を使います。まだ初めての方だと思うので、詳しく解説します。
asaki様の言うとうりに、まず、プロジェクトエクスプローラーのSheetを

右クリックで選択し、コードの表示をします。表示されない場合はメニューの 
表示 … プロジェクトエクスプローラー  をクリックします。

そしてプログラムを書くところの上にあるコンボボックスをクリックし、
(General) を Worksheet に変えます。
すると、

  Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  End Sub
なんてものがでてきます。
そしてその右のコンボボックスをクリックして、Changeをクリックしてください。
すると、

  Private Sub Worksheet_Change(ByVal Target As Range)

  End Sub
というのがでてきます。
そうなったら、Private Sub Worksheet_SelectionChange(ByVal Target As Range)
と,その2行下のEnd Sub をけしてもOKです。
そしたらPrivateSub Worksheet_Change(ByVal target As Range)
と、End Sub の間に、次のコードを書きます。(コピーして!)

Dim obj As Object
For Each obj In Range("A1:E5")
  If obj.Value <> "" Then
    obj.Interior.ColorIndex = 3
  ElseIf obj.Value = "" Then
    obj.Interior.ColorIndex = xlColorIndexNone
  End If
Next obj

さあそれでは、せるのA1からE5の間に何か入力してみましょう。
なにかかいてあるところだけは、赤くなります。

解説は次で、、、

【13354】セルに色をつける
回答  中2のVBA通  - 04/5/2(日) 22:10 -

引用なし
パスワード
   ではかいせつです。

Private Sub Worksheet_Change(ByVal Target As Range)
  Private            …ここの時だけにしてくれ!
  Sub              …コード書き始めるぞ!
  Worksheet_Change       …ワークシートに変化が起きたときに!
  (ByVal Target As Range)    …因数です。今は特に覚えなくてよし!
つまり、ワークシートに変化が起きたときのみの処理でござる!ということです

Dim obj As Object
  Dim              …変数だ
  obj              …変数の名前
  As              …型は
  Object            …オブジェクト
つまり、オブジェクトを扱う変数つかわせろ!と言う意味
変数というのは ズバリ
    値を入れておくもの
    どんな値でもOKョ
って考えてください。この場合はオブジェクト型なので、
セルとかシートとかいろいろな物体を指定できます。

For Each obj In Range("A1:E5")

  For Each           …ある範囲で繰り返せ
  obj              …変数の名前
  in              …場所は
  Range("A1:E5")        …セルのA1からE5
つまりA1からE5の中で繰り返せ!ってこと
  For Each とオブジェクト専用のくり返し処理です
  objと言う変数に、Range("A1")をいれて、処理をしていきNext obj
  で戻ってobjにRange("A2")をいれて処理をしていき、また戻って……
  ……と進んでいき、Range("E5")をいれて処理をしたら終わるよ!
  ということ。わかりにくいと思うので、 Excel全開VBA
  と言うサイトがあるから、その人のぺーじをみるといいと思います。
  僕はそこで学びました。
 
If obj.Value <> "" Then

  if            …もし
  obj.Value <> ""     …For Eachで指定したセルの値(Value)が
                 何も書いてない
  then           …その時
つまり、そのセルの値がなかったときの処理をする!ということです。

すみません、文章討ちながら睡魔と戦っているので文章が乱れているかもしれません。
ただいま、9:50。部活があると大変だよ…(んな事ドーでもええわい

If then Else 条件分岐の基本です。
構文は、
IF 条件式 Then
   条件式と一致したときの処理
Else
   条件と一致しなかったときの処理
End If
条件式というのは 真ん中に比較演算子がある等式のことです。下は一覧です。
    =  右辺が左辺  と一致する
    <> 右辺が左辺  と一致しない
    <= 右辺が左辺  以上
    >= 右辺が左辺  以下
    <  右辺が左辺  より大きい
    >  右辺が左辺  より小さい
<例>  A1の値が3よりおおきい
     Range("A").Value > 3

obj.Interior.ColorIndex = 3

    これはそのセルの色を指定します。
    3 の部分を変えると、色がいろいろ変わります。
    私は全部知ってますが、楽しみが消えると思うので
    ご自分で研究すると良いと思います(最大値: 56)

Else
  上記参照(睡魔がヤバイので)
obj.Interior.ColorIndex = xlColorIndexNone
  上記のよう、色を変えます。
  xlColorIndexNone とは色をなくすという意味です
  
End If
  If文終わり!
Next obj
  指定回数だけFor Eachにもどる

End Sub
  以上終わり!


睡魔のおかげで、最後が適当になりました。 すまん!
分かんなかったら Excel全開VBA のサイトへ

【13384】Re:セルが変更されたらそのセルに色をつ...
回答  Asaki  - 04/5/3(月) 22:49 -

引用なし
パスワード
   着色条件によっては、VBAを使わず、一般機能の条件付書式でも可能かもしれません。
何か入力があったら色を変える
の条件だとすると
メニューから 書式 >> 条件付書式 のダイアログで
「数式が」「=LEN(A1)<>0」
※ A1 の部分は、実際に処理対象となるセル
書式ボタンをクリックして、お好みの書式を設定してOKボタンをクリック

VBAの場合、前述のとおりChangeイベントを利用しますが、今回のようなケースでは、
引数のTargetを相手にするだけでよいかと思います。
Private Sub Worksheet_Change(ByVal Target As Range)
  Target.Interior.ColorIndex = xlNone
On Error Resume Next
  Target.SpecialCells( _
    xlCellTypeConstants).Interior.ColorIndex = 34
On Error GoTo 0
End Sub

【13456】Re:セルに色をつける
お礼  おお  - 04/5/5(水) 23:38 -

引用なし
パスワード
   ▼中2のVBA通 さん:
>ではかいせつです。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Private            …ここの時だけにしてくれ!
>  Sub              …コード書き始めるぞ!
>  Worksheet_Change       …ワークシートに変化が起きたときに!
>  (ByVal Target As Range)    …因数です。今は特に覚えなくてよし!
>つまり、ワークシートに変化が起きたときのみの処理でござる!ということです
>
>Dim obj As Object
>  Dim              …変数だ
>  obj              …変数の名前
>  As              …型は
>  Object            …オブジェクト
>つまり、オブジェクトを扱う変数つかわせろ!と言う意味
>変数というのは ズバリ
>    値を入れておくもの
>    どんな値でもOKョ
>って考えてください。この場合はオブジェクト型なので、
>セルとかシートとかいろいろな物体を指定できます。
>
>For Each obj In Range("A1:E5")
>
>  For Each           …ある範囲で繰り返せ
>  obj              …変数の名前
>  in              …場所は
>  Range("A1:E5")        …セルのA1からE5
>つまりA1からE5の中で繰り返せ!ってこと
>  For Each とオブジェクト専用のくり返し処理です
>  objと言う変数に、Range("A1")をいれて、処理をしていきNext obj
>  で戻ってobjにRange("A2")をいれて処理をしていき、また戻って……
>  ……と進んでいき、Range("E5")をいれて処理をしたら終わるよ!
>  ということ。わかりにくいと思うので、 Excel全開VBA
>  と言うサイトがあるから、その人のぺーじをみるといいと思います。
>  僕はそこで学びました。
> 
>If obj.Value <> "" Then
>
>  if            …もし
>  obj.Value <> ""     …For Eachで指定したセルの値(Value)が
>                 何も書いてない
>  then           …その時
>つまり、そのセルの値がなかったときの処理をする!ということです。
>
>すみません、文章討ちながら睡魔と戦っているので文章が乱れているかもしれません。
>ただいま、9:50。部活があると大変だよ…(んな事ドーでもええわい
>
>If then Else 条件分岐の基本です。
>構文は、
>IF 条件式 Then
>   条件式と一致したときの処理
>Else
>   条件と一致しなかったときの処理
>End If
>条件式というのは 真ん中に比較演算子がある等式のことです。下は一覧です。
>    =  右辺が左辺  と一致する
>    <> 右辺が左辺  と一致しない
>    <= 右辺が左辺  以上
>    >= 右辺が左辺  以下
>    <  右辺が左辺  より大きい
>    >  右辺が左辺  より小さい
><例>  A1の値が3よりおおきい
>     Range("A").Value > 3
>
>obj.Interior.ColorIndex = 3
>
>    これはそのセルの色を指定します。
>    3 の部分を変えると、色がいろいろ変わります。
>    私は全部知ってますが、楽しみが消えると思うので
>    ご自分で研究すると良いと思います(最大値: 56)
>
>Else
>  上記参照(睡魔がヤバイので)
>obj.Interior.ColorIndex = xlColorIndexNone
>  上記のよう、色を変えます。
>  xlColorIndexNone とは色をなくすという意味です
>  
>End If
>  If文終わり!
>Next obj
>  指定回数だけFor Eachにもどる
>
>End Sub
>  以上終わり!
>
>
>睡魔のおかげで、最後が適当になりました。 すまん!
>分かんなかったら Excel全開VBA のサイトへ


詳しい解説ありがとうございました!

【13513】Re:セルが変更されたらそのセルに色をつ...
質問  おお  - 04/5/7(金) 0:48 -

引用なし
パスワード
   ▼Asaki さん:
>着色条件によっては、VBAを使わず、一般機能の条件付書式でも可能かもしれません。
>何か入力があったら色を変える
>の条件だとすると
>メニューから 書式 >> 条件付書式 のダイアログで
>「数式が」「=LEN(A1)<>0」
>※ A1 の部分は、実際に処理対象となるセル
>書式ボタンをクリックして、お好みの書式を設定してOKボタンをクリック
>
>VBAの場合、前述のとおりChangeイベントを利用しますが、今回のようなケースでは、
>引数のTargetを相手にするだけでよいかと思います。
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Target.Interior.ColorIndex = xlNone
>On Error Resume Next
>  Target.SpecialCells( _
>    xlCellTypeConstants).Interior.ColorIndex = 34
>On Error GoTo 0
>End Sub

データがセルにあれば色をつけるといくことではなくて、
もともとあるセルにデータがある場合でもデータが変更されたら
色をつけるという処理にしたいのですがどうしたらよいですか。

【13518】Re:セルが変更されたらそのセルに色をつ...
回答  Asaki  - 04/5/7(金) 9:09 -

引用なし
パスワード
   >データが変更されたら
のタイミングなら、ChangeイベントでOKのはずですが。

現在、データが入力されているセルに色をつけたい
ということであれば、着色のプロシージャを、1度実行すればよいでしょう。
アクティブシートの全セルを対象とします。
Sub test()
  Cells.Interior.ColorIndex = xlNone
On Error Resume Next
  Cells.SpecialCells( _
    xlCellTypeConstants).Interior.ColorIndex = 34
On Error GoTo 0
End Sub

条件付書式なら、変更タイミング以外でも、条件設定時に条件に該当するセルがあれば、色がつきます。

11887 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free