【问题标题】:Loop Through Each Cell & Accept Formula循环遍历每个单元格并接受公式
【发布时间】:2021-06-18 02:21:41
【问题描述】:

任何人都可以在下面的 VBA 代码中提供帮助,它从 A 列和 B 列获取数据并添加它, 问题是我需要按 F2 来刷新公式: 示例 - A = 6(1+2+3) 和 B = 15(4+5+6), 代码结果=+=1+2+3+=4+5+6

我必须手动按 F2 并接受公式来计算结果,我可以添加到代码中以便它自动计算,下面是我的 VBA 代码? 有什么方法可以让单元格接受公式,我的数据可能在数据之间有“+”或“=”符号,例如:=+1+2+3=+4+5+6

Sub datashftfinal1()
    Dim i As Integer
    Dim val1 As String
    Dim val2 As String
    Dim valF As String
    For i = 1 To 10
        If Cells(i + 1, 2).Value >= 0 Then
            val1 = Cells(i + 1, 1).FormulaR1C1
            val2 = Cells(i + 1, 2).FormulaR1C1    
            valF = "+" & val1 & "+" & val2
            Cells(i + 1, 1).FormulaR1C1 = valF
        End If
    Next i
End Sub

样本数据

A1 栏 =1+2+3
B1 栏 =4+5+6

我在上面的数据示例中给出了数据的公式视图,运行代码后我得到如下结果:

=1+2+3+=4+5+6

它不是计算结果而是显示公式,我需要按 F2 并接受公式,下面是我的代码:

enter code here
Sub Data()
Dim i As Integer
Dim val1 As String
Dim val2 As String
Dim valF As String

For i = 1 To 10
If Cells(i + 1, 2).Value >= 0 Then
val1 = Cells(i + 1, 1).FormulaR1C1
val2 = Cells(i + 1, 2).FormulaR1C1
valF = "+" & val1 & "+" & val2
Cells(i + 1, 1).FormulaR1C1 = valF
End If
Next i
End Sub

【问题讨论】:

  • 您的意思是您在excel表格中输入的公式无法计算,还是您需要手动重新启动代码才能刷新新单元格?
  • 是的,它不计算,我尝试了 cell(i+1,1).calculate 但它没有用。当我手动转到单元格按 F2 并输入时它可以工作,它接受公式而不是
  • 不应该valF = "+" & val1 & "+" & val2valF = "=" & val1 & "+" & val2 吗? (第一个加号变为等号)。您能否举例说明您的公式最终应该是什么样子?
  • @rohrl77 感谢您的提示回复,是的,我尝试输入“=”,但它给出了运行时错误 1004:Sub Try2() Dim i As Integer Dim val1 As String Dim val2 As String Dim valF As String For i = 1 To 10 If Cells(i + 1, 2).Value >= 0 Then val1 = Cells(i + 1, 1).FormulaR1C1 val2 = Cells(i + 1, 2).FormulaR1C1 valF = "=" & val1 & "+" & val2 Cells(i + 1, 1).FormulaR1C1 = valF End If Next i End Sub
  • 您能否提供示例数据以及该示例数据的公式应该是什么样的?请始终edit您的原始问题添加代码或重要信息。 cmets 中的代码不可读。

标签: excel vba excel-formula


【解决方案1】:

我会在下面做以下事情。这个想法是您需要去掉第二个公式的等号并将它们与+ 符号连接起来。

Option Explicit

Public Sub Data()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")  ' define your sheet here

    Dim i As Long
    For i = 1 To 10
        If ws.Cells(i + 1, 2).Value >= 0 Then
            Dim Formula1 As String
            Formula1 = ws.Cells(i + 1, 1).FormulaR1C1   ' =1+2+3

            Dim Formula2 As String
            Formula2 = ws.Cells(i + 1, 2).FormulaR1C1   ' =4+5+6

            ' strip off the equal sign of the second formula
            If Left$(Formula2, 1) = "=" Then
                Formula2 = Right$(Formula2, Len(Formula2) - 1)  ' 4+5+6
            End If

            ' put formulas together
            Dim FormulasCombined As String
            FormulasCombined = Formula1 & "+" & Formula2  ' =1+2+3+4+5+6

            ws.Cells(i + 1, 1).FormulaR1C1 = FormulasCombined
        End If
    Next i
End Sub

【讨论】:

  • @Peh 非常感谢,是的,您的概念在第二列中是正确的“=”应该被删除,感谢您将 cmets 放入代码中,因为它让我理解了它。
猜你喜欢
  • 2021-05-13
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多