根据另一个单元格的颜色设置一个单元格的颜色

我想要的是:

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

我知道我可以通过以下方式获得第2页中的A1的颜色:

 =GET.CELL(63,Sheet2!A1) 

( Excel:我可以创build基于单元格颜色的条件公式吗? )

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

有什么build议么?

在2015年1月12日更新抱歉,如果我对我的情况提供的信息太less,并没有明确指出我是否想在VBA中做到这一点。 一开始我以为一个函数可以工作,但是当我考虑我的文件时,一个函数可能根本不起作用。

它是关于SPSS相关分析的输出,有三列:相关系数,p值和样本量。 我需要同时检查系数和p值,并以可读的方式显示系数。 假设我运行了50个variables与100个variables之间的相关性,我不会在一个表中粘贴系数和p值,而是:

表一:系数表二:p值

我想要的是:

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

所以,当我看第一张纸,我知道蓝色的应该被忽略,因为没有意义。

我会尝试下面的所有build议,并在稍后报告。

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

我将逐步介绍一种解决方法 。 这不是按键击键,所以你可能需要谷歌一点,这取决于你的背景知识。 说明并不简短,所以请阅读。

你必须:

  1. 检测select中的变化(这是一个事件)。
  2. 询问你的源单元格的颜色。
  3. 如果需要的话。

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

  1. 一个标准模块(比如Module1)。 你必须先插入模块。
  2. 的ThisWorkbook。
  3. Sheet2中。

在Module1中:

 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 

在ThisWorkbook:

 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 

在Sheet2中:

 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代码更改颜色,则不select/取消select单元格。

  3. 这个想法是在尽可能多的相关事件之后检查是否需要采取行动。 在这里,我正在检测Workbook_OpenWorksheet_DeactivateWorksheet_SelectionChange 。 您可以添加其他事件与适当的Sub ,例如, Workbook_BeforeCloseWorkbook_BeforeSave 。 所有这些都是用来代替单元格格式不变的方法。

  4. 我喜欢pnuts的答案 (虽然我没有时间去testing它)。 但是现在的这个提供了另一个没有的灵活性。 可能有一些情况(取决于你需要做什么)不会被覆盖的情况。

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

不推荐,因为依赖于XLM(不是XML)macros函数GET.CELL 。 这从三十年前引入的技术,八年后被有效地取代。 几乎所有的元素现在都不存在了,只剩下less数元素的预期寿命会很低。 微软鼓励迁移到VBA。

尽pipe如此,你已经问过'如何'而不是'为什么不',所以我build议你从你已经到达的地方继续,selectSheet1 A1和HOME>样式 – 条件格式 – 新规则…, 使用公式来确定哪些单元格格式化在此公式为真的情况下格式化值:

 =CellColor=23 

并select你select的蓝色格式,OK,OK,Apply。

23对于蓝色来说是一个相当标准的数字(不是光,不是黑色),但是你的configuration可能会有不同的数字。

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


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

selectSheet1 ColumnA和HOME>样式 – 条件格式,新规则…

使用公式来确定要格式化的单元格
在此公式为真的情况下格式化值:

 =Sheet2!A1>0.05 

格式... ,select深蓝色或适合,确定,确定。

Sheet2(ColumnA)中也可以使用相同的规则,因此一个表单中的单元格(按行)有条件地格式化。

GET.CELL函数虽然有用,但来自VBA之前使用的旧XLMmacros语言。 你可能会遇到这样的限制,例如当时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 

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

为了清楚并保持简单的function,您可以使用条件格式,并select使用颜色设置格式。 一旦你知道如何,这是非常容易的。 主要技巧是input什么公式,特别是当条件格式应用于多单元格范围时,需要使用条件格式公式来引用哪个公式。

举个例子。 如果创build的条件格式规则适用于$ C $ 5:$ C $ 10的范围,那么您经常需要input公式=(A5 =“A”)。 注意这是一个相对寻址公式,即没有美元符号。 这有单元格c6检查a6的值等的效果

你现在唯一的麻烦就是检查单元格的格式,而不是它存储的值。 在2013年,你仍然可以使用=GET.CELL(63,A5)来做到这一点,但是这不能在CF规则的公式中input……其他post讨论了使用这个的原因和原因。 看到这个链接描述如何获取单元格信息。

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

您可以在名为“Get。= GET.CELL(65,OFFSET(INDIRECT(”RC“,FALSE,0,1))中使用以下公式

我有这个工作,关键信息可以find一个引用的网站页面。

好?