VBA:从2列函数返回string

我没有编码背景,但一直很好奇,试试看。 我到目前为止一直很享受,但最近却被困住了。 我已经用尽了有限的理解和研究,试图找出这一点,所以任何帮助,非常感谢!

我的函数接受一个string并将其创build为一个数组。 然后,我search数组中的特定string,并将其输出为数字和date。 我已经成功做到了这一点,但无法弄清楚如何让VBA在电子表格的两列中返回这些结果。 这似乎只给我For函数的最后结果。

这里是使用Excel 2016和VBA的代码:

Function test() As Variant Dim data As String: data = "push.29Sep17 and 333>! push.28Sep17 and 55555>! push.27Sep17 and 4444>!" Dim day() As String: day() = Split(data, "!") Dim num As Integer: num = UBound(day) - 1 For i = 0 To num Dim p1 As Integer: p1 = InStr(1, day(i), "and ") Dim p2 As Integer: p2 = InStr(p1, day(i), ">") Dim p3 As Integer: p3 = p1 + 4 Dim p4 As Integer: p4 = p2 - p3 Dim price1 As String: price1 = Mid(day(i), p3, p4) Dim d1 As Integer: d1 = InStr(1, day(i), "push.") Dim d2 As Integer: d2 = d1 + 5 Dim date1 As String: date1 = Mid(day(i), d2, 7) test = price1 & " " & date1 Debug.Print price1, date1 Next i End Function 

这是我在电子表格上使用该函数时得到的结果: test = price1 & " " & date1

这是我想要得到的:
有希望的结果

用户定义的函数(UDF)在Excel中计算工作表时调用。

您可以像使用其他Excel工作表一样使用它们,例如:

 =MyUDF("foo!bar") 

就像每个Excel工作表函数一样,UDF需要一些input,用它做一些事情,然后返回一个结果; Excel将获取该结果并将其显示在调用该函数的单元格中。

UDF明确禁止在其他单元格中更改任何内容,因此Function不可能影响除调用它的单元格以外的任何单元格。 函数不格式化单元格,它们计算单元格的值 – 没有什么比这更重要。

如果你需要一些VBA代码(比如影响多个单元格的内容,格式化等等),那么你需要的不是一个Function ,而是一个macros – 一个无参数的Sub过程,可以是从macros菜单中调用,或附加到工作表上的button/形状:

 Public Sub DoSomething() Sheet1.Range("A1").Value = 42 Sheet1.Range("A2").Formula = "=A1+12" Sheet1.Range("A1:A2").NumberFormat = "$#,##0.00" End Sub 

你会很快发现可能性实际上是无止境的 – 不要感到不知所措,我们在这里帮助,如果研究无处不在,你被困在一个特定的问题,并知道有Rubberduck (一个VBIDE添加在我pipe理的OSS项目中),可以帮助你避免一些你不可避免会遇到的普通初学者(和一些不太初学者)的陷阱( 很多的Rubberduck的代码检查都是由Stack Overflow问题启发的!

享受你的旅程!

这是解决问题的代码:

  Sub test() Dim data As String: data = "push.29Sep17 and 333>! push.28Sep17 and 55555>! push.27Sep17 and 4444>!" Dim day() As String: day() = Split(data, "!") Dim num As Integer: num = UBound(day) - 1 For i = 0 To num Dim p1 As Integer: p1 = InStr(1, day(i), "and ") Dim p2 As Integer: p2 = InStr(p1, day(i), ">") Dim p3 As Integer: p3 = p1 + 4 Dim p4 As Integer: p4 = p2 - p3 Dim price1 As String: price1 = Mid(day(i), p3, p4) Dim d1 As Integer: d1 = InStr(1, day(i), "push.") Dim d2 As Integer: d2 = d1 + 5 Dim date1 As String: date1 = Mid(day(i), d2, 7) Sheet1.Range("A3:A5").Cells(i) = price1 Sheet1.Range("B3:B5").Cells(i) = date1 Next i End Sub 

最后的结果是:

最后结果