[[20120411163239]] 『条件付書式で設定しているセル背景色の取得』(yama) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件付書式で設定しているセル背景色の取得』(yama)
(EXCEL2010)
A1に条件付書式で色を付けています。
この色を取得してA3に適用する関数かマクロを教えて下さい。
宜しくお願いします。

 条件付き書式で色をつけてるんだから

 同様にその「条件」を用いて色を取得すればいいような・・・

 (GobGob)

過去ログを検索し、ここが使えそうだったので、やって見ました。
[[20120330131914]]
セルに直接色が付いていれば、流用出来ました。
条件付書式で設定したら、色が付きませんでした。
それで、質問しました。
(yama)

 参照しているスレのコードはセルに色がついている場合のコード。
 条件付き書式の色は、セルを見てもわからない。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

 (ぶらっと)


上記マクロ参考にさせていただきます。
(ぶらっと)さん詳細な回答有難う御座いました。
(yama)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.