【问题标题】:Insert Formula in Column C if Column B is not Empty如果 B 列不为空,则在 C 列中插入公式
【发布时间】:2020-01-04 17:15:00
【问题描述】:

我在 excel 中创建了一个 VBA 宏。它的工作原理并不完全符合我的要求。

我希望宏在 C1:C160 范围内的每个单独的单元格中为 B2:B160 范围内非空的每个单元格插入一个公式

我的代码如下:

Sub Check()
    Dim dat As Variant
    Dim rng As Range
    Dim i As Long

    Set rng = Range("B2:B160")
    dat = rng
    For i = LBound(dat, 1) To UBound(dat, 1)
        If dat(i, 1) <> "" Then
            rng(i, 2).Formula = "=RIGHT(B2, LEN(B2)-12)"
        End If
    Next
End Sub

问题是它在每个单元格中插入了相同的公式。公式不是动态的。 我怎样才能让它动态,所以单元格 C3 有公式:“=RIGHT(B3, LEN(B3)-12) 等等。

任何提示都会有所帮助,谢谢!

【问题讨论】:

  • 你真的需要公式吗?还是您的目标只是从 B 列中获取部分字符串?您可能有一小部分样本数据吗?

标签: excel vba excel-formula


【解决方案1】:

作为@braX,但根据需要进行一些编辑:

rng(i, 2).Formula = "=RIGHT(B" & (i + 1) & ", LEN(B" & (i + 1) & ")-12)"

【讨论】:

    【解决方案2】:

    像这样使用变量作为行来构建字符串

    rng(i, 2).Formula = "=RIGHT(B" & i & ", LEN(B" & i & ")-12)"
    

    这可能不是您所需要的,但是您会看到字符串连接是如何工作的,对吧?修改它以满足您的需要。

    【讨论】:

    • 要么构建一个字符串,要么让 VBA 自动调整应用到整个范围 =)
    【解决方案3】:

    当您将其应用于整个范围时,该公式可以自行调整。您只对非空单元格感兴趣,因此可以尝试以下操作:

    Sub Check()
    
    With Sheet1 'Change according to your sheet's CodeName
        .Range("B2:B160").SpecialCells(xlCellTypeConstants).Offset(0, 1).Formula = "=RIGHT(B2,LEN(B2)-12)"
    End With
    
    End Sub
    

    如您所见,我建议至少让Range 对象明确引用某个工作表!否则,您可能会冒使用可能不正确的隐式 ActiveSheet 的风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 2019-04-04
      • 2020-05-17
      • 2012-12-01
      相关资源
      最近更新 更多