[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件付書式で設定しているセル背景色の取得』(yama)
条件付き書式で色をつけてるんだから
同様にその「条件」を用いて色を取得すればいいような・・・
(GobGob)
参照しているスレのコードはセルに色がついている場合のコード。 条件付き書式の色は、セルを見てもわからない。GobGobさんのコメントの通り、その条件から色を作り出す必要がある。 A1に設定した条件を具体的に説明すれば、いろいろ解決方法のアドバイスがあるとおもうよ。
追記)とりあええず、今、思いつくのは
1.A3の色を、今、A1につけられている色と同じにしたいということなら、A3にもA1と同じ条件付き書式をセットする。 必要なら、これをマクロでやることもできるかな? 2.GobGobさんがアドバイスされる方法。たとえば、A1に設定されている条件が セルの値が100以下なら緑、100超なら黄色 なのであれば、A1の値によっていずれかの色をつけるマクロをつくる。 3.A1に設定されている条件そのものを、マクロで評価して、その条件の中で「真」になるものにたいし その条件で指定されている背景色をつける。これは、結構骨の折れることになるけど http://www.keep-on.com/excelyou/2000lng4/200005/00050350.txt http://www.moug.net/tech/exvba/0110009.html http://www.moug.net/tech/exvba/0110017.html http://www.moug.net/tech/exvba/0110018.html
(ぶらっと)
>A1に設定した条件を具体的に説明すれば、いろいろ解決方法のアドバイスがあるとおもうよ。
下記となりますので御指導お願いします。
条件付書式は次となります。
B2からB10まで4つの条件付書式
=$A2=10の時 赤
=$A2=8の時 黄
=$A2=6の時 緑
=$A2=4の時 青
sheet1 A B 1 2 10 1(赤) 3 10 3(赤) 4 8 5(黄) 5 4 2(青) 6 6 6(緑) 7 6 9(緑) 8 6 2(緑) 9 8 10(黄) 10 4 4(青)
((ぶらっと)さんのマクロを追記)
Sub Sample() Dim c As Range Dim sh1 As Worksheet Dim i As Long Dim j As Long
Application.ScreenUpdating = False
Set sh1 = Sheets("Sheet1")
With Sheets("Sheet2") .Cells.Clear For Each c In sh1.Range("B1", sh1.Range("B" & sh1.Rows.Count).End(xlUp)) If Not IsEmpty(c.Value) Then i = ((c.Value - 1) Mod 5) + 1 j = ((((c.Value - 1) \ 5) + 2) - 1) * 2 With .Cells(i, j) .Value = c.Value ★ ここを変えるのでしょうか?→ .Interior.Color = c.Interior.Color .Offset(, 1).Interior.Color = .Interior.Color End With End If Next .Select End With
Set sh1 = Nothing
Application.ScreenUpdating = True MsgBox "組み替え完了"
End Sub
(yama)
参照してくれている私のコードは、転記先等、あちらの要件があってややこしいので、 B2:B○ までの 領域に対し、そこで設定されている条件付書式による背景色をC列に(値とともに)セットするコードにした。
↑で提案した、条件付書式そのもののコピーは、条件が「セルの値が」なら、コードとしては一番簡単。 (というか、コードも不要かな。B列の領域をコピーし、C列に値を選択して貼付け(書式) でOK) だけど、「数式が」の場合は、ちょっと面倒なのでパス。
Sample1 + GetColor は、説明のあった条件をコードの中で判定。 Sample2 + GetColorRGB は、紹介した http://www.keep-on.com/excelyou/2000lng4/200005/00050350.txt この中の GetColorRGB を使う方法。 GetColorRGB を、そのままコピペすると 構文エラーで赤く光るコードがいくつかある。 これらコードの、先頭の " を消して。で、それでも赤く光るコードがあるので、そのコードについては コード末尾の " を消して。
コードとしては Sample2 のほうが短いけど、条件は固定。 Sample3は、どんな条件が設定されていたとしても対応(するらしい)
Sub Sample1() Dim c As Range Dim sh1 As Worksheet Dim i As Long Dim j As Long Dim myColor As Long
Application.ScreenUpdating = False
Set sh1 = Sheets("Sheet1")
sh1.Columns("C").Clear For Each c In sh1.Range("B2", sh1.Range("B" & sh1.Rows.Count).End(xlUp)) If Not IsEmpty(c.Value) Then c.Offset(, 1).Value = c.Value 'C列に値を転記 myColor = GetColor(c) If myColor <> 0 Then c.Offset(, 1).Interior.Color = myColor 'C列の背景色をセット End If Next
Set sh1 = Nothing
Application.ScreenUpdating = True MsgBox "色付け完了"
End Sub
Function GetColor(c As Range) As Long Select Case c.Offset(, -1).Value 'A列の値 Case 10: GetColor = vbRed Case 8: GetColor = vbYellow Case 6: GetColor = vbGreen Case 4: GetColor = vbBlue End Select End Function
Sub Sample2() Dim c As Range Dim sh1 As Worksheet Dim i As Long Dim j As Long Dim myColor As Long
Application.ScreenUpdating = False
Set sh1 = Sheets("Sheet1")
sh1.Columns("C").Clear For Each c In sh1.Range("B2", sh1.Range("B" & sh1.Rows.Count).End(xlUp)) If Not IsEmpty(c.Value) Then c.Offset(, 1).Value = c.Value 'C列に値を転記 myColor = GetColorRGB(c) If myColor <> 0 Then c.Offset(, 1).Interior.Color = myColor 'C列の背景色をセット End If Next
Set sh1 = Nothing
Application.ScreenUpdating = True MsgBox "色付け完了"
End Sub
Function GetColorRGB(ByVal aCell As Range) As Long 'コードは省略するのでコピペしてね。 End Function
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.