首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WorksheetFunction.Transpose更改数据类型

WorksheetFunction.Transpose更改数据类型
EN

Stack Overflow用户
提问于 2020-06-25 11:11:14
回答 2查看 472关注 0票数 7

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

当我的windows区域设置设置为DMY时,被写回的日期将有几个月/一天的切换。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-25 11:11:14

在这个论坛中,已经提到了关于通过Dates方法将Strings转换为Strings的问题。

我对此做了更深入的研究。

WorksheetFunction.Transpose似乎转换了许多数据类型。换位后的结果将是BooleanDoubleString

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

下面是一些演示这个问题的代码:

代码语言:javascript
复制
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

debug.print输出

代码语言:javascript
复制
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

编辑WorksheetFunction.Transpose的另一个问题

给出了一个一维阵列的Ubound(1D_array) mod 2^16

  • Only
  • ,它的第一维上界将由公式

给出,第一uBound(1D_array) mod 2^16元素将返回给转置数组。因此,如果一维数组的平方值为65537,则

  • 将只包含单个项(原始数组中的第一项)
  • 不返回错误消息。
    • 我认为缺少错误信息,这种行为是从Excel 2013开始的。我记得以前的版本会在这个situation.

中返回一个错误消息

票数 6
EN

Stack Overflow用户

发布于 2020-06-25 15:03:13

您可以在内存中使用ListBox进行转置,而不使用Transpose,并且DataTypes保持原样:

代码语言:javascript
复制
Option Explicit
Option Base 1
Sub Tester2()
    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
   
    With CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
    'Listbox always Base 0
        .List = v
         w = .List 'Now 2-dim with correct typenames, use .column for transpose Row-column)
    End With

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

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62573975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档