- ベストアンサー
VBAでセルへの数値反映と色の変更
- VBAを使用して、指定した数値を入力したセルに反映させ、そのセルの色を変更する方法について教えてください。
- 具体的には、A1に数値を入力し、コマンドボタンをクリックすると、B1~B20のセルにその数値が反映され、赤色に変わるようにしたいです。
- また、ただし、B1~B20の中に黄色の背景色が設定されているセルがある場合、そのセルより上のセルは数値の反映を無視し、背景色より下のセルのみに数値を反映するようにしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>黄色背景色のセル自体は無視をして下さい。 それですと、黄色背景色のセルが複数存在する場合、「最初に現れた黄色背景色のセル」と「2番目以降に現れた黄色背景色のセル」との間に挟まれた「背景色が黄色ではないセル」に対してのみ、 >数値が反映される >その反映された数値は赤色にする という処理を行い、「2番目以降に現れた黄色背景色のセル」に関してはそのままにしなければなりませんから、処理が下記の様に複雑になります。 Private Sub commandbutton_click() Dim c As Range, myRange As Range, myBoolean As Boolean Set myRange = Range("B1:B20") myBoolean = False For Each c In myRange If c.Interior.Color = RGB(255, 255, 0) Then If Not myBoolean Then Set myRange = Nothing myBoolean = True End If ElseIf myRange Is Nothing Then Set myRange = c Else Set myRange = Union(myRange, c) End If Next c With myRange .Value = Range("A1").Value .Font.Color = vbRed End With End Sub
その他の回答 (1)
- kagakusuki
- ベストアンサー率51% (2610/5101)
>黄色背景色より上のセルはA1に入力された数値は無視し >黄色背景色より下のセルはA1に入力された数値を反映する との事ですが、「黄色背景色のセル」自体は「黄色背景色のセルより上のセル」でもなければ「黄色背景色のセルより下のセル」でもない訳ですので、無視すれば良いのか、反映すれば良いのか、どちらにすれば宜しいのでしょうか? 取り敢えず仮の話として、「黄色背景色のセル」自体も反映するものとした場合には、以下の様なVBAになります。 Private Sub commandbutton_click() Dim c As Range, myRow As Long myRow = 2 For Each c In Range("B2:B20") If c.Interior.Color = RGB(255, 255, 0) Then myRow = c.Row Exit For End If Next c With Range("B" & myRow & ":B20") .Value = Range("A1").Value .Font.Color = vbRed End With End Sub
お礼
すみません 説明不足でした 黄色背景色のセルは無視でお願いします
補足
すみません 説明不足でした 黄色背景色のセル自体は無視をして下さい。
お礼
訂正して頂きありがとうございます! 凄すぎます 思った結果です 勉強させて頂きました! コードありがとうございます!