Excelmacros单元格地址增加

我可以通过使用macros来增加单元格地址吗? 我正在实施Excel单元格颜色匹配function。

例如:当我将单元格“A1”更改为红色时,单元格“D1”将更改为红色。 如果将“C1”更改为红色,“F1”也将更改为红色。 所有需要增加3列。

现在我只需要修改“c.Address”+ 3,这样细胞就会去做D1。 我尝试使用c.Address + 3,但它不能工作。 任何帮助将不胜感激!

谢谢!

Private Sub Worksheet_SelectionChange(ByVal Target As Range) For Each c In Worksheets("Sheet1").Range("A1:C1").Cells If c.Interior.Color = 255 Then Sheet1.Range(c.Address + 3 ).Interior.Color = 255 <<-- Can't work Else Sheet1.Range(c.Address + 3 ).Interior.Color = white <<-- Can't work End If Next c End Sub 

改变这个:

 Sheet1.Range(c.Address + 3 ) 

对此

 Sheet1.Range(c.Address).offset(0,3) 

虽然我不知道为什么你需要Sheet1.Range(c.Address) ,而不仅仅是c,是ca范围? 如果是这样,你可以做c.offset(0,3)

我真的很希望,Sixthsense会编辑他的答案,所以我可以给他+1,但不会像这样会发生:(
仍然知道他试图达到什么目的,我至less会显示一些工作代码并解释一下。 所以首先要做的是:代码:

 Option Explicit Dim rngHolder As Range Private Sub Worksheet_Activate() If rngHolder Is Nothing Then Set rngHolder = Intersect(Selection, Range("A1:C1")) End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not rngHolder Is Nothing Then Dim rngRunner As Variant For Each rngRunner In rngHolder.Cells rngRunner.Offset(0, 3).Interior.Color = IIf(rngRunner.Interior.Color = 255, 255, xlNone) Next End If Set rngHolder = Intersect(Target, Range("A1:C1")) End Sub 

rngHolder (像sPrev的sPrev)很重要,因为改变select,不会返回“旧”的select。 如果selectA1并更改颜色,则不会激活触发器,因此我们将使用Worksheet_SelectionChange 。 现在改变之后,我们selectD19 ,没有什么会告诉我们A1已经改变了。 但是我们也不希望每次select更改时都运行所有更改。 出于这个原因,“最后”select将被存储在rngHolder

我跳过了一些部分,直接将所选的范围跨过我们需要在variables中查看的单元格(或者,如果找不到相交部分,则不需要任何东西)。

如果下一次我们select一个不同的单元格时, rngHolder不为空,它将运行rngHolder所有单元格,将所需单元格的背景颜色rngHolder改变3列。 (这种方式也一次改变多个单元格将工作),并推动新的交叉在rngHolder

对于我在抱怨Sixthsense的解决scheme:
如果你做的第一个select是…可以说X7 …然后selectA3之后将AA7的背景颜色改变为像X7一样。 这可能不会被注意到,因为条件格式和类似的东西。 错误的“高亮显示”可能会导致用户错误以后(你也可能会注意到,在很多单元格已经被改变的时候)

然而,问题只是针对已经以适当方式回答的“偏移”function;)

用下面的代码replace你的当前代码。

 Dim sPrev As String Private Sub Worksheet_SelectionChange(ByVal Target As Range) If sPrev = "" Then sPrev = Target.Address If Target.Cells.Count = 1 Then If Target.Column = Range("A:A").Column Then With Range(sPrev) .Offset(, 3).Interior.Color = .Interior.Color End With sPrev = Target.Address End If End If End Sub