我正在尝试将存储在制表符分隔文本文件中的公式加载到工作表的范围中。我已经使用函数Split(Expression As String, Delimiter)
将每一行依次正确加载到一维数组中,但是遇到了有关返回的数组类型的问题。
Split函数只返回字符串类型数组,我需要一个变量类型数组来设置范围。这是因为使用字符串类型数组设置单元格的公式会导致单元格值设置为原始文本,即使字符串以等号开头也是如此。
'Example code to demonstrate the problem:
Sub Tester()
Dim StringArr(1 To 3) As String
StringArr(1) = "= 1"
StringArr(2) = "= 2"
StringArr(3) = "= 3"
Range("Sheet1!$A$1:$C$1").Formula = StringArr
'Cells display raw string until edited manually
Dim VariantArr(1 To 3) As Variant
VariantArr(1) = "= 1"
VariantArr(2) = "= 2"
VariantArr(3) = "= 3"
Range("Sheet1!$A$2:$C$2").Formula = VariantArr
'Cells display formula result correctly
End Sub
结果输出:
我想知道是否有办法将从Split
函数返回的数组转换为变量类型数组,最好没有循环。我知道我可以在循环中单独设置每个单元格公式,但我尽量保持它尽可能高效和整洁。
我正在使用Microsoft Excel for Mac 2011,版本14.5.5。 VBA正在推动我的发展。
答案 0 :(得分:2)
您可以使用WorksheetFunction.Index
(或Application.Index
)将 String 的数组转换为 Variant / String 的数组:
Sub Test()
StringArr = Split("=1 =2 =3")
VariantArr = WorksheetFunction.Index(StringArr, 1, 0)
Range("Sheet1!$A$1:$C$1").Formula = StringArr
Range("Sheet1!$A$2:$C$2").Formula = VariantArr
End Sub
以下是数组类型:
预期产量:
答案 1 :(得分:1)
我在那里创建了一个带有几个公式的文本文件。我用了“|”字符而不是“,”或制表符分隔。你可以使用find&在文本编辑器中替换函数以将四个空格替换为“|”如果可以的话。
然后我在VBA中创建了这段代码
Sub loadFormula()
Dim fso As Object, textFile As Object: Set fso = CreateObject("Scripting.FileSystemObject")
Dim textFileStr As String
Dim textFileArr As Variant
Dim outputArr() As Variant
Dim oneRow As Variant
Dim numRows, numColumns As Long
If Dir("C:\Users\dawsong4\Documents\Reports\WIP\formula.txt") = "" Then
Exit Sub
Else
potentialFileToLoad = "C:\Users\dawsong4\Documents\Reports\WIP\formula.txt"
End If
Set textFile = fso.OpenTextFile(potentialFileToLoad, 1)
textFileStr = textFile.ReadAll
textFile.Close
Set textFile = Nothing
Set fso = Nothing
textFileArr = Split(textFileStr, Chr(10))
numRows = UBound(textFileArr)
numColumns = UBound(Split(textFileArr(0), "|"))
ReDim outputArr(numRows, numColumns)
For ii = 0 To (numRows - 1)
oneRow = Split(textFileArr(ii), "|")
For jj = 0 To numColumns
outputArr(ii, jj) = oneRow(jj)
Next jj
Next ii
Worksheets("Data").Range("A2:P1048576").ClearContents
Worksheets("Data").Range("A2").Resize(numRows + 1, numColumns).Value = outputArr
End Sub
excel的结果是:
希望有所帮助!
P.S。 我想如果你使用“”四个空格(然而很多是制表符分隔的文本文件),而不是“|”它会工作相同的