Excel 宏单元格地址增加



可以使用宏增加单元格地址吗?我正在实现 excel 单元格颜色匹配功能。

例:当我将单元格"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,c是一个范围吗?如果是这样,你可以做c.offset(0,3)

我真的希望,Sixthsense会编辑他的答案,这样我就可以给他+1,但看起来不会发生这种情况:(
仍然知道他试图实现的目标,我至少会展示一些工作代码并对其进行一些解释。所以首先要做的是:代码:

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)很重要,因为更改选择不会返回"旧"选择。如果您选择A1并更改颜色,则不会激活任何触发器,因此我们将采用 Worksheet_SelectionChange .现在,更改后,我们选择D19,没有任何内容会告诉我们A1已更改。但我们也不希望每次选择更改时都运行所有更改。因此,"最后一个"选择将存储在 rngHolder .

我跳过了一些部分,直接推动了与我们需要在变量中查看的单元格交叉的选定范围(如果没有找到相交,则什么也不推)。

如果下次我们选择其他单元格时rngHolder不为空,它将运行rngHolder中的所有单元格,以更改所需单元格的背景颜色 3 列向右。(这种方式也可以一次更改多个单元格)并在rngHolder中推动新的相交。

以至于我在抱怨第六感的解决方案:
如果您所做的第一个选择是...让我们说X7...然后选择A3会将AA7的背景颜色更改为与X7相同的颜色。由于条件格式和类似的东西,这可能不会被注意到。然而,错误的"突出显示"可能会在以后导致用户错误(您也可能注意到它,许多单元格都已更改)

但是,问题只是针对"偏移"函数,该函数已经以正确的方式回答;)

将当前代码替换为以下代码。

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

最新更新