【问题标题】:How to transpose a table column data into an array, preserving data format (as string or text)如何将表列数据转置为数组,保留数据格式(作为字符串或文本)
【发布时间】:2019-01-12 12:54:33
【问题描述】:

我有一个包含两列的表。一个 (C1) 填充有两位小数格式的数字,例如 2584.12。另一列 (C2) 还包含不时写入的数字,格式不同。

在第二列范围内的工作表更改事件中,代码适用于 C2,与 C1 中应用的格式相同(编辑:格式不同但不同)。

为了引用 C1 中使用的格式,我使用的是包含一整列的数组:

Set mytable = worksheet.ListObjects("My_Table")
colarray = Application.Transpose(mytable.ListColumns("C1").DataBodyRange)

,但 "mytable.ListColumns("C1").DataBodyRange" 将数字读取为值而不是文本。

我的问题发生在,在 C1 中,参考数字小数为零,如“2584.00”,它在数组中存储为整数值,如“2584”,甚至表号也存储为带有两个零小数的文本作为“2584.00” "

我想知道是否有办法使用这种将表格列转置为数组的方法,以便将数字保留为文本,以避免小数点为零的问题。

我在想我必须在 DataBodyRange 上使用一些 .Text 属性,但我无法获得有效的结果,因此下一个无效(“无效的参数数量”):

colarray = Application.Transpose(mytable.ListColumns("C1").DataBodyRange.Text)

.Text 属性可以很好地处理表格中的单个单元格,例如:

debug.print mytable.ListColumns("C1").DataBodyRange.rows(1).Text

结果“2584.00”与 colarray(1) 中的“2584”相对。

当然,我可以为我的目的找到另一种方法,但为了速度优势,我会坚持使用整列的转置方法。

【问题讨论】:

  • 您能否澄清问题的内容,以便正确的人回答。可能是关于 Excel 和 VBA(猜测)?
  • 哦!谢谢布赖恩!这是关于 Excel VBA 的。我添加了 excel vba 标签。

标签: excel vba text transpose listobject


【解决方案1】:

简单的答案是使用字符串数组....但我不知道您对数据做了什么,所以这对您来说可能不实用。

dim myArray(1 to 1) as string
myArray(1) = "123.00" 

永远是 123.00

【讨论】:

  • 感谢 ProfoundlyOblivious!问题是我不知道如何正确使用某些 ListObject 属性。我重新提出了我的问题!
  • 我已经疯了,甚至建议这个......如果该值是一个整数,那么通过添加 .001 来分解(是的,我编造了)它
  • 我不相信 text 属性对你有用。如果数组保存十进制值很重要,那么我认为您必须使用字符串。如果显示的值是重要的部分,那么 format() 就是你的朋友。我很好奇你为什么要转置一列。那么你阅读专栏是不是你只得到一个一维数组? (1 到 n)我发誓这就是我在表格中一直使用的列,我没有转置任何东西。另外,fwiw,表格的术语让我发疯了,我花了比我想承认的时间更长的时间来理解。
  • 数组包含十进制零至关重要,但这不是转置或数组的错,而是我缺乏使用 LIstObject 属性。我只使用一列数组,因为它更容易解决或查明 sheet_change 事件,至少有优势。
  • 字符串是我唯一的解决方案......这可能需要测试数组中的每个元素的小数点作为右边第三个字符并更改那些未通过测试的元素。
【解决方案2】:

我发现.Text(如.Value等)属性不能应用于一个范围内的多个单元格,而只能应用于一个单元格,用于读取。所以我必须找到另一种方法来满足我的需求。

此代码有效:

colarray = Application.Transpose(mytable.ListColumns("C1").DataBodyRange.rows(1).Text)

而这个没有:

colarray = Application.Transpose(mytable.ListColumns("C1").DataBodyRange.Rows("1:6").Text)

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2021-10-04
    • 2018-07-18
    • 2012-01-18
    • 2013-10-11
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多