WorksheetFunction.Transpose 更改数据类型

Ron*_*eld 5 excel vba transpose worksheet-function

WorksheetFunction.Transpose在 VBA中使用将混合日期/字符串的一维数组转换为二维数组以写入工作表。

将我的 Windows 区域设置设置为DMY,写回的日期正在切换月/日。

Ron*_*eld 6

这在本论坛中已经提到过通过该方法Dates进行转换。StringsWorksheetFunction.Transpose

我更深入地研究了这一点。

看起来可以WorksheetFunction.Transpose转换很多数据类型。转置后的结果将是Boolean, Double, 或String

在 VBA 中使用此方法时需要考虑到这一点。

这是一些演示该问题的代码:

Option Explicit
Option Base 1
Sub Tester()
    Dim v, w, i As Long
    
v = Array(CBool(-1), CBool(0), CByte(9), CDbl(1234), CDec(1234), _
            CInt(1234), CLng(1234), CLngPtr(1234), CSng(1234), _
            CCur(123456), #5/1/2015#, "1234")
            
w = WorksheetFunction.Transpose(v)

For i = 1 To UBound(v)
    Debug.Print v(i), TypeName(v(i)), w(i, 1), TypeName(w(i, 1))
Next i


End Sub
Run Code Online (Sandbox Code Playgroud)

调试.打印输出

True          Boolean       True          Boolean
False         Boolean       False         Boolean
 9            Byte           9            Double
 1234         Double         1234         Double
 1234         Decimal        1234         Double
 1234         Integer        1234         Double
 1234         Long           1234         Double
 1234         Long           1234         Double
 1234         Single         1234         Double
 123456       Currency      $123,456.00   String
01-May-15     Date          01-05-2015    String
1234          String        1234          String

Run Code Online (Sandbox Code Playgroud)

编辑另一个问题WorksheetFunction.Transpose

  • 给定一个一维数组
  • 转置数组第一维的上限将由以下公式给出Ubound(1D_array) mod 2^16
  • 只有第一个 uBound(1D_array) mod 2^16元素将返回到转置数组。
    • 因此,如果一维数组的 ubound 为 65537,则转置数组将仅包含单个项目(原始数组中的第一项)
    • 不会返回任何错误消息。
      • 我相信缺少错误消息,并且这种行为是从 Excel 2013 开始的。我记得早期版本在这种情况下会返回错误消息。

  • @jamheadart如果您在主数组中使用除字符串、双精度或布尔值以外的数据类型,这是我所知道的唯一解决方案。不过,您可以将日期存储为双精度数,并且这些值在转置时不会更改。 (2认同)