使用Text而不是Value创建变体数组

时间:2016-02-19 12:05:17

标签: excel vba excel-vba

中,您可以从如下范围创建变体数组:

Dim x As Variant

x = Range("A1:Z1").Value

这显然会将.Value属性放入数组中。我正在尝试做同样的事情但是得到了单元格的.Text属性,但我不认为这是可能的。

Dim x As Variant

x = Range("A1:Z1").Text '// <~~ type mismatch

原因如下,我有一行数据如下:

  |------A------|------B------|------C------|
 1| 01-Jan-2003   27-Feb-2005   15-Sep-2015

我想将行输出到带有分隔符的文本文件,目前我正在使用它:

With WorksheetFunction
    x = .Transpose(.Transpose(Cells(1, 1).Resize(1, 3).Value))
End With

Print #1, Join(x, "|")

哪个有效,但它得到的.Value格式为dd / mm / yyyy,所以输出如下:

01/01/2003|27/02/2005|15/09/2015

问: 我是否可以使用此方法保留格式,而无需先解析/循环数组中的每个值?

1 个答案:

答案 0 :(得分:2)

不是很优雅,我不确定它在批量上有多好,但它避免了循环。您可以将最终输出放入字符串并替换:

Dim x As Variant, y As String

x = Range("A1:Z1")

With WorksheetFunction
    x = .Transpose(.Transpose(ActiveSheet.Cells(1, 1).Resize(1, 5).Value))
End With

y = Join(x, "|")

y = Replace(y, "/01/", "-Jan-")
y = Replace(y, "/02/", "-Feb-")
y = Replace(y, "/03/", "-Mar-")
y = Replace(y, "/04/", "-Apr-")
y = Replace(y, "/05/", "-May-")
y = Replace(y, "/06/", "-Jun-")
y = Replace(y, "/07/", "-Jul-")
y = Replace(y, "/08/", "-Aug-")
y = Replace(y, "/09/", "-Sep-")
y = Replace(y, "/10/", "-Oct-")
y = Replace(y, "/11/", "-Nov-")
y = Replace(y, "/12/", "-Dec-")

Debug.print y