【问题标题】:Convert formula with string function into a VBA equivalent将带有字符串函数的公式转换为等效的 VBA
【发布时间】:2017-02-08 04:42:35
【问题描述】:

我想将带有字符串函数的 Excel 公式转换为 VBA 等效项。

有几行公式。我将举两个例子。

A 列中有一份 txt 报告副本。B 到 O 列对 A 的行进行排序,使用以下一些公式挑选出部分:

=IF(MID(A6,60,1)="=",MID(A6,52,15),IF(MID(A6,57,1)="=",MID(A6,53,8),C1))

=IF(A2="","-",IF(LEFT(A2,1)="1","pg","-"))

这是测试报告的快照。

我想遍历公式并从 A2 开始发送到 Sheet2(由于标题),而不是通过复制然后粘贴到 A1、复制列 B 到 O,然后整理出“-”的步骤.

我尝试录制宏并输入公式,但无法实现。

【问题讨论】:

  • 我认为完整的 VBA 比使用公式更好。
  • 我同意@PatricK 的观点,您最好将公式重写为宏,也许使用InStrIfSelect Case 函数。
  • 如果您希望“A6”中只有 1 个等号,那么使用 instr 函数肯定会更容易。即如果 inst(1,range("a6").value, "=") = 60 那么......

标签: excel vba string-function


【解决方案1】:
Sub convert()
Dim ws As Worksheet, thisRng As Range
Set ws = Sheet1
Set thisRng = Sheet1.Range("B1")' Select the cell to place data into

'   Break up the formula logically first and it becomes easier to convert
'   =IF (MID(A6,60,1)="=",     MID(A6,52,15),    else if IF(MID(A6,57,1)="=",     MID(A6,53,8),        else    C1))
If Mid(ws.Range("A6").Value, 60, 1) = "=" Then
    thisRng = Mid(ws.Range("A6").Value, 52, 15)
    Else
        If (Mid(ws.Range("A6").Value, 57, 1)) = "=" Then
            thisRng = Mid(ws.Range("A6").Value, 53, 8)
        Else
            thisRng.Value = ws.Range("C1").Value
        End If
End If

End Sub

【讨论】:

  • 效果很好,再次感谢大家的快速反馈!
  • 这就是答案吗?如果是这样,请不要忘记 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多