【问题标题】:How can I increase a cell reference automatically in Excel VBA so that a macro is run in every column?如何在 Excel VBA 中自动增加单元格引用,以便在每一列中运行宏?
【发布时间】:2020-07-15 19:22:34
【问题描述】:

所以我有一个引用工作簿中特定单元格的宏。如何在不手动输入单元格引用五十次的情况下在接下来的五十列中重复此宏?

如果我只是使用 excel 公式而不是 VBA,我可以单击并拖动以自动重复下一列中的公式。我希望保持不变的单元格引用定义为 $absolute$ 引用。但是在 VBA 中我不知道该怎么做。

代码如下:

If Worksheets("Enter Data Here").Range("D11") = "" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ""

ElseIf Worksheets("Enter Data Here").Range("D11") = "/" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ";" & Worksheets("Enter Data Here").Range("D10")

ElseIf Worksheets("Enter Data Here").Range("D11") = "//" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ";" & Worksheets("Enter Data Here").Range("D10") & "x2"

ElseIf Worksheets("Enter Data Here").Range("D11") = "///" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ";" & Worksheets("Enter Data Here").Range("D10") & "x3"


End If

Worksheets("SDS").Range("R5") 是绝对单元格引用并且不会更改,但我希望其他人无需键入即可转移到下一列。例如D 变为 E,然后变为 F。

必须有一种节省劳动力的方法来做到这一点。也许循环?

干杯。

【问题讨论】:

  • Offset,或使用Cells 代替Range 并循环递增列。
  • 你是不是每次都加一个“/”?
  • 否,“/”表示已安排测试,因此需要在 R5 中绘制测试名称 (D10)。最多只有三个测试,所以不要超过 3 x ///。
  • 所以你有四个 D 子句,然后是 E 等 4 个子句?
  • 是的!从字面上看,只需要移动到右侧的单元格。 D11 变成 E11 等等,D10 变成 E10...

标签: excel vba loops reference cell


【解决方案1】:

在我看来你应该在这之后:

Dim cel As Range
Dim s As String
For Each cel In Worksheets("Enter Data Here").Range("D11").Resize(, 50)
    Select Case Len(r1) - Len(Replace(r1, "/", vbNullString))
        Case 1
            s = s & ";" & cel.Offset(-1).Value
        Case 2
            s = s & ";" & cel.Offset(-1).Value & "x2"
        Case 3
            s = s & ";" & cel.Offset(-1).Value & "x3"
        End If
    End Select
End With

Worksheets("SDS").Range("R5").Value = s

【讨论】:

    【解决方案2】:

    试试这个。

    Sub x()
    
    Dim r1 As Range, i As Long
    
    Set r1 = Worksheets("Enter Data Here").Range("D11") 'define starting cell
    
    For i = 1 To 50 'repeat this 50 times
        With Worksheets("SDS").Range("R5")
            If r1 = "" Then
                 .Value = .Value & "" 'not sure what purpose this serves
            ElseIf r1.Value = "/" Then
                .Value = .Value & ";" & r1.Offset(-1).Value
            ElseIf r1.Value = "//" Then
                .Value = .Value & ";" & r1.Offset(-1).Value & "x2"
            ElseIf r1.Value = "///" Then
                .Value = .Value & ";" & r1.Offset(-1).Value & "x3"
            End If
        End With
        Set r1 = r1.Offset(, 1) 'move to cell to the right, E11, F11 etc
    Next i
    
    End Sub
    

    【讨论】:

    • 这是正确的并且工作完美,非常感谢。这会是一个循环吗?看到这样真的让我明白它们是如何工作的!干杯!
    • 你应该有With Worksheets("SDS").Range("R5")附上For i循环
    猜你喜欢
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多