1

我想要的是:

IF   A1 in Sheet 2 is blue  
Then A1 in Sheet 1 changes to blue

我知道我可以通过使用以下方法获得表 2 中 A1 的颜色:

=GET.CELL(63,Sheet2!A1)

Excel:我可以根据单元格的颜色创建条件公式吗?

但我不知道下一步我应该做什么。

2015 年 1 月 12 日更新

一开始我认为一个函数可以工作,但当我考虑我的文件时,可能需要 VBA。

它是关于 SPSS 相关分析的输出,共有三列:相关系数、p 值和样本量。我需要同时检查系数和p值,并以可读的方式呈现系数。假设我在 50 个变量和 100 个变量之间运行相关性,我不会将系数和 p 值粘贴在一张纸上,而是:

表一:系数表二:p 值

我想要的是:

如果 p 值大于 0.05,则系数(单元格)变为蓝色/深蓝色或黑色。

所以当我看第一张纸时,我知道蓝色的应该被忽略,因为它不重要。

4

4 回答 4

2

您需要的是一种检测单元格格式变化的方法。似乎没有任何事件会在格式更改时触发。请参阅 如何检测单元格格式的变化?

我将描述一种解决方法,几乎​​是一步一步的。它不是一个按键一个按键,所以你可能需要用谷歌搜索一下,这取决于你的背景知识。 描述不短,请仔细阅读。

你必须:

  1. 检测选择的变化(有一个事件)。
  2. 询问您的源单元格的颜色。
  3. 必要时采取行动。

转到 Visual Basic 编辑器 (VBE) 并在三个模块中添加代码:

  1. 一个标准模块(比如,Module1)。您必须先插入模块。
  2. 本工作簿。
  3. 表 2。

在模块 1 中:

Public prev_sel As Range
Public wssrc As Worksheet, wstrg As Worksheet
Public ssrc As String, strg As String
Public rngsrc As Range, rngtrg As Range

Sub copy_color(rngs As Range, rngt As Range)
    Dim csrc As Long
    csrc = rngs.Interior.Color
    If (csrc = vbBlue) Then
        rngt.Interior.Color = vbBlue
    End If
End Sub

Sub copy_color2(rngs As Range, rngt As Range)
    If (TypeName(prev_sel) = "Range") Then
        Dim pss As String
        pss = prev_sel.Parent.Name
        If (pss = ssrc) Then
            Dim ints As Range
            Set ints = Application.Intersect(rngs, prev_sel)
            If (Not (ints Is Nothing)) Then
                Call copy_color(rngs, rngt)
            End If
        End If
    End If
End Sub

在本工作簿中:

Private Sub Workbook_Open()
    ssrc = "Sheet2"
    strg = "Sheet1"
    Set wssrc = Worksheets(ssrc)
    Set wstrg = Worksheets(strg)
    Set rngsrc = wssrc.Range("A1")
    Set rngtrg = wstrg.Range("A1")
    Call copy_color(rngsrc, rngtrg)

    If (TypeName(Selection) = "Range") Then
        Set prev_sel = Selection
    Else
        Set prev_sel = Nothing
    End If
End Sub

在表 2 中:

Private Sub Worksheet_Deactivate()
    Call copy_color(rngsrc, rngtrg)
    If (TypeName(Selection) = "Range") Then
        Set prev_sel = Selection
    Else
        Set prev_sel = Nothing
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call copy_color2(rngsrc, rngtrg)
    If (TypeName(Target) = "Range") Then
        Set prev_sel = Target
    End If
End Sub

我将很快编辑解释。不过仔细阅读,还是很容易理解的。

笔记:

  1. 如果源单元格颜色从其他颜色变为其他颜色,则此代码不起作用vbBlue。您没有为此操作指定任何内容。实际上,您的规范不够详细,无法涵盖所有​​可能的情况。

  2. 可能存在此代码失败的情况(我猜极不可能)。例如,如果通过其他 VBA 代码更改颜色,而不选择/取消选择单元格。

  3. 这个想法是在尽可能多的相关事件之后检查是否需要采取行动。我在这里检测Workbook_Open, Worksheet_Deactivate, Worksheet_SelectionChange. 您可以使用合适的 s 添加其他事件Sub,例如Workbook_BeforeClose, Workbook_BeforeSave。所有这些都是替代不存在的更改单元格格式事件的一种方式。

  4. 我喜欢pnuts 的答案(尽管我没有时间测试它)。但是目前的一个提供了另一种所不具备的灵活性。可能有一些情况(取决于你需要做什么)它不会被覆盖。

  5. 还有其他可能的位置组合来定位变量声明和其他代码,基本上执行相同的操作。

于 2015-01-08T14:09:36.763 回答
1

不推荐,因为依赖于 XLM(不是 XML)宏函数GET.CELL。这是 30 年前引入的一项技术,八年后被有效取代。由于几乎所有元素现在都已失效,因此可以预期剩下的少数元素的预期寿命会很短。Microsoft鼓励迁移到 VBA。

尽管如此,你问的是“如何”而不是“为什么不”,所以我建议你从你到达的地方开始并选择 Sheet1 A1 和 HOME > Styles - Conditional Formatting - New Rule...,使用公式来确定哪些单元格格式化格式化这个公式为真的值:

=CellColor=23  

并选择您选择的蓝色格式,确定,确定,应用。

23是一个相当标准的蓝色数字(不是浅色,不是深色),但您的配置可能需要不同的数字。

请注意,另一个缺点是,与一般的 CF 不同,响应不是自动的——您可能需要在 Sheet1 A1 中输入一些内容,或者 Shift+F9 来强制更新。


如果您的数据分布在两张纸上(Sheet1 和 Sheet2,都是 ColumnA)并且存在 1:1 的关系(Sheet2 的 A1 中的 p 值是 Sheet1 的 A1 中的相关系数),那么一个简单的条件格式规则可能就足够了:

选择 Sheet1 ColumnA 和 HOME > Styles - Conditional Formatting, New Rule...

使用公式确定要格式化的单元格
格式化此公式为真的值:

=Sheet2!A1>0.05

Format...,选择深蓝色或适合,OK,OK。

相同的规则可能会以相同的方式应用于 Sheet2 (ColumnA),因此在一张纸中按条件格式化的单元格(按行)是在另一张纸中按条件格式化的单元格。

于 2015-01-08T02:31:13.463 回答
0

GET.CELL 函数虽然有用,但来自于 VBA 之前使用的旧 XLM 宏语言。您可能会遇到使用此限制,例如,当时 Excel 使用有限数量的颜色(我读过大约 60 种颜色?)。

或者,使用一点 VBA,您可以尝试使用内部对象字体对象

Sheets("Sheet1").Range("A1").Interior.Color = vbBlue
Sheets("Sheet1").Range("A1").Font.Color = vbYellow
    If Sheets("Sheet1").Range("A1").Interior.Color = vbBlue Then _
    Sheets("Sheet2").Range("A1").Interior.Color = vbBlue
    If Sheets("Sheet1").Range("A1").Font.Color = vbYellow Then _
    Sheets("Sheet2").Range("A1").Font.Color = vbYellow

您可能需要探索各种指定颜色的方法,以便为您提供最大的控制/灵活性。

于 2015-01-07T21:44:07.400 回答
0

为了清楚起见并保持您提供的功能简单,您可以使用条件格式并选择使用颜色设置格式。一旦您知道如何操作,这将非常容易。主要技巧是输入什么公式,特别是当条件格式应用于多单元格范围时,您需要条件格式公式来引用哪个单元格。

举个例子。如果创建条件格式规则以使其适用于 $C$5:$C$10 范围,则您使用的公式通常需要输入为 =(A5="A")。请注意,这是一个相对寻址公式,即没有美元符号。这具有单元格 c6 检查 a6 等值的效果。

您现在唯一的麻烦是检查单元格的格式而不是它存储的值。在 2013 年,您仍然可以使用它=GET.CELL(63,A5)来执行此操作,但是无法将其输入到 CF 规则的公式中……其他帖子讨论了使用它的原因和原因。请参阅描述如何获取单元信息的此链接。

因此,您最终会在具有着色的单元格旁边的单元格中得到一个公式。该公式将使用一个命名范围,该范围根据单元格的颜色是否与您在命名范围中指定的颜色匹配而返回 true 或 false。您在另一张表上的条件格式将引用此公式单元格并设置新单元格的颜色。

您将在名为“Get . =GET.CELL(65,OFFSET(INDIRECT("RC",FALSE),0,1)) 的命名范围内使用以下公式

我已经完成了这项工作,关键信息可以在引用的网站页面中找到。

好?

于 2015-01-08T17:28:57.570 回答