vba - 使用文本而不是值创建变体数组

标签 vba excel

您可以从一个范围创建一个变体数组,如下所示:

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
<小时/>

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

最佳答案

不太优雅,我不确定这在批量工作中效果如何,但它避免了循环。您可以将最终输出放入字符串中并替换:

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

关于vba - 使用文本而不是值创建变体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35504931/

相关文章:

vba - Excel 仅删除唯一单元格

excel - "path/file access error"错误的原因是什么

excel - 打开 Access 数据库并从 Excel 运行其中一个宏

c# - 如何从 Excel 2010 为所有三个日期兼容性设置生成 SpreasheetML 示例?

regex - R中的Excel RegEx函数

c# - 从 IIS 上载的 Excel 文件中读取有限的行

java - 如何使用 java 将 Excel 转换为 XML?

excel - 根据 Excel 单元格值选中/取消选中 Listobx 项目

sql - 查询过滤,在灵活性和易于执行之间找到平衡

VBA:在多个条目单元格上使用下拉菜单进行自动过滤