Excel VBA:只要另一列中有值,就运行公式

Excel VBA:只要另一列中有值,就运行公式,excel,vba,Excel,Vba,我在A栏有数据。 我在B栏有一个公式 =CONCAT("Test",":",LEFT(A2,FIND("-",A2)-1)) 只要A列中有数据,我就希望公式运行 Column A Column B 3032-215 Test:3032 3031-158 Test:3031 4005-169 Test:4005 我试图写这篇文章,这样只要A列中有数据,它就会自动填充B列。根据需要将连接更改回CONCAT Column A Column B 3032-215 Test:3032 3

我在A栏有数据。 我在B栏有一个公式

=CONCAT("Test",":",LEFT(A2,FIND("-",A2)-1))
只要A列中有数据,我就希望公式运行

Column A  Column B
3032-215  Test:3032
3031-158  Test:3031
4005-169  Test:4005 

我试图写这篇文章,这样只要A列中有数据,它就会自动填充B列。

根据需要将连接更改回CONCAT

Column A  Column B
3032-215  Test:3032
3031-158  Test:3031
4005-169  Test:4005 
它现在只是嵌套在一个IF函数中,该函数首先检查单元格是否为空。如果没有,它会做你想要的。如果单元格为空,则用空白字符串填充

=IF(A2<>0, CONCATENATE("Test",":",LEFT(A2,FIND("-",A2)-1)), "")

编辑:如果你担心Excel会看到Excel是否存在“数据”,那么如果你使用计数型函数的话,这将是一个问题,那么在没有使用VBA的情况下,这是没有办法的。p> 根据需要将连接更改回CONCAT

它现在只是嵌套在一个IF函数中,该函数首先检查单元格是否为空。如果没有,它会做你想要的。如果单元格为空,则用空白字符串填充

=IF(A2<>0, CONCATENATE("Test",":",LEFT(A2,FIND("-",A2)-1)), "")

编辑:如果你担心Excel会看到Excel是否存在“数据”,那么如果你使用计数型函数的话,这将是一个问题,那么在没有使用VBA的情况下,这是没有办法的。p> 如果您想要一个VBA解决方案,那么一个专用子系统就可以了。比如:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("A:A"), Target) Is Nothing Then

        Dim MyRange As Range, c As Range, LastRow As Integer

        LastRow = Cells(Rows.Count, 1).End(xlUp).Row
        Set MyRange = ActiveSheet.Range("A2:A" & LastRow)

        For Each c In MyRange

            If c.Value <> "" Then

                c.Offset(0, 1).FormulaR1C1 = "=concat(""Test"","":"",LEFT(RC1,4))"

            End If

        Next c

    End If

End Sub

如果您需要VBA解决方案,则可以使用专用Sub。比如:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("A:A"), Target) Is Nothing Then

        Dim MyRange As Range, c As Range, LastRow As Integer

        LastRow = Cells(Rows.Count, 1).End(xlUp).Row
        Set MyRange = ActiveSheet.Range("A2:A" & LastRow)

        For Each c In MyRange

            If c.Value <> "" Then

                c.Offset(0, 1).FormulaR1C1 = "=concat(""Test"","":"",LEFT(RC1,4))"

            End If

        Next c

    End If

End Sub


a您的示例中的数据不会由公式b生成,您遇到了哪些困难?在A列中查找最后使用的单元格?将公式插入范围?编写公式,使其不会出现1004错误?请更新您的问题以解释您的问题所在。对此表示抱歉。我更新了它。公式在Excel中为我提供了正确的结果,但我希望只要a列中有值,该列就会自动运行。目前,我正在将公式复制到列中的新行中,但我认为它可以在VBA中在整个列中自动运行。如果您说我正在尝试编写此。。。展示你已经尝试过的东西通常是一个好主意。a你的例子中的数据不会由公式b产生。你有什么困难?在A列中查找最后使用的单元格?将公式插入范围?编写公式,使其不会出现1004错误?请更新您的问题以解释您的问题所在。对此表示抱歉。我更新了它。公式在Excel中为我提供了正确的结果,但我希望只要a列中有值,该列就会自动运行。目前,我正在将公式复制到列中的新行中,但我认为它可以在VBA中在整个列中自动运行。如果您说我正在尝试编写此。。。展示你已经尝试过的东西通常是个好主意。这可能会奏效。它可以立即解决问题,因为它可以应用于行中的所有单元格。我想我是在研究VBA,以防它超出了适用范围,所以您希望VBA检测列向下延伸的距离,然后根据需要使用适用的公式填充相应的下一列?是的,这就是要点。您给出的公式适用于非VBA,因为如果A列中没有所需结果,则该公式不会返回任何值。我想我只是有点担心数据没有填满所有行,因为我只预先选择了1000行。我怀疑这是会发生的,但这是可能的,但是很容易调整的KEVIN 99 99已经提供了很多你所追求的,但是如果你要走这条路线,你也可以考虑使用VBA来做字符串操作,而不是仅仅粘贴公式。c、 Offset0,1.FormulaR1C1==concertive,:,RC1可以替换为:c.Offset0,1.value=Test:&Leftc,InStrc,--1这样可以工作。它可以立即解决问题,因为它可以应用于行中的所有单元格。我想我是在研究VBA,以防它超出了适用范围,所以您希望VBA检测列向下延伸的距离,然后根据需要使用适用的公式填充相应的下一列?是的,这就是要点。您给出的公式适用于非VBA,因为如果A列中没有所需结果,则该公式不会返回任何值。我想我只是有点担心数据没有填满所有行,因为我只预先选择了1000行。我怀疑这是会发生的,但这是可能的,但是很容易调整的KEVIN 99 99已经提供了很多你所追求的,但是如果你要走这条路线,你也可以考虑使用VBA来做字符串操作,而不是仅仅粘贴公式。c、 Offset0,1.FormulaR1C1==concertive,:,RC1可以替换为:c.Offset0,1.value=Test:&Leftc,InStrc,--1Thank you@YowE3K。我已经做了一个调整,我认为效果也不错。谢谢你。两种我都试试。这两个都是非常好的解决方案。谢谢@YowE3K。我做了一个调整,我认为效果也不错 谢谢你。两种我都试试。两者都是非常好的解决方案。