数据拉取返回源条件格式

data pulling returning source conditional formatting

有没有办法复制使用以下公式提取的条件格式单元格的准确色调?

=LARGE(A:A,1)

我从数百行中选出前 10 名,每行都有一个非常特定的色调,揭示了另一种定量顺序,与我订购前 10 名的标准不同。

也许举个例子会更清楚:

                        **Pets Owned**   ` - `   **Maintenance Level**
  Dogs           ` - `  ` 450            ` - `     8 
  Cats           ` - `  ` 350            ` - `     4
  Fish           ` - `  ` 150            ` - `     6
  Birds          ` - `  ` 100            ` - `     3
  Iguanas        ` - `  ` 5              ` - `     14

假设我只想拉出前 3 个最高维护宠物,同时保持 B 列的原始格式,所以我想看到的是:

维护级别

14 {Red}       [Iguanas]
8 {Dark Green} [Dogs]
6 {Yellow}     [Fish]

抱歉,这张照片 windows 绝对是截图的笑话(将 xml 转换为 jpg 需要 6 步以上?!)

如果我没记错的话,OP 想要这个:

如果你想玩 Excel VBA...

,我有一个糟糕的解决方案给你

这意味着在 VBA 中构建您自己的 "color-format" 函数 :) makeColor

Public Function makeColor(ByVal x As Integer, ByVal min As Integer, ByVal max As Integer)
    Dim r As Integer, g As Integer, b As Integer
    ' you  must fine-tune the cases as you like
    b = 0
    If (x < (min + max) / 2) Then
      r = 255
      g = 0
    Else
      g = 255
      r = 0
    End If
    makeColor = RGB(r, g, b)
End Function

假设您的数据在 "color" 选项卡中并且位于范围内 (B1:B5);硬编码值“0”和“500”代表数据中的最小值和最大值,并且也必须以编程方式定义:

Public Sub cpyColor()
    Dim wkRange As Range
    Dim c As Range        
    Set wkRange = ThisWorkbook.Sheets("color").Range("$B:$B")
    For Each c In wkRange
      c.Interior.Color = makeColor(c.Value, 0, 500)
      c.Offset(0, 1).Interior.Color = c.Interior.Color
    Next
End Sub

我的 2 个案例 makeColor 函数给出了:

我认为没有 VBA 就无法完成,但作为替代方案,您可以更改目标的条件格式设置规则以匹配源的条件格式设置规则

如果您有 Excel 2010 或更高版本,您可以使用 VBA,使用 Cell 的 DisplayFormat 属性。

我使用了一个简单的过滤器而不是公式,但您也可以使用公式。

我添加了一个带有公式的标题为 MaintRank 的列

=RANK(C2,$C:$C)

然后,例如,如果我想要前 3 个,我只过滤 123

然后使用 VBA 将其复制到某个新目的地。您可以将下面代码中的 rResults 更改为您想要的任何位置。

您可能还需要根据自己的真实数据进行调整rTable


Option Explicit
Sub CopyVisibleWithCFColor()
    Dim rData As Range, rResults As Range
    Dim wsData As Worksheet, wsResults As Worksheet
    Dim C As Range
    Dim I As Long, J As Long

Set wsData = Worksheets("sheet1")
Set wsResults = Worksheets("sheet2")

With wsData
    Set rData = .Range(.Cells(1, 1), .Cells(.Rows.Count, "D").End(xlUp))
End With
Set rResults = wsResults.Cells(1, 1)

Set rData = rData.SpecialCells(xlCellTypeVisible)

rResults.Resize(columnsize:=rData.Columns.Count).EntireColumn.Clear
Set rResults = rResults(1)

rData.Copy rResults

Application.CutCopyMode = False

Set rResults = rResults.CurrentRegion
rResults.EntireColumn.ClearFormats
J = 0
For I = 1 To rData.Areas.Count
    For Each C In rData.Areas(I).Columns(2).Cells
        Debug.Print C.Address
        J = J + 1
        rResults.Rows(J).Interior.Color = C.DisplayFormat.Interior.Color
    Next C
Next I

End Sub

在下面的屏幕截图中,您可以看到 Sheet1 上的原始数据和 Sheet2 上的复制结果。在 sheet1 上,我选择 return 排名第 2、4 和 5 的项目,在 sheet2 上,宏也在整行中着色。显然你可以改变它,如果你不需要它,你不需要也复制 "rank" 列。