如何将表列数据转置为数组,并保留数据格式(字符串或文本形式)

时间:2018-08-05 08:46:32

标签: excel excel-vba text transpose listobject

我有一个包含两列的表。一个(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

将colarray(1)中的“ 2584”与“ 2584.00”相抵。

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

2 个答案:

答案 0 :(得分:0)

简单的答案是使用字符串数组...。但是我不知道您在处理数据,所以对您来说可能不切实际。

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

始终为123.00

答案 1 :(得分:0)

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

此代码有效:

foo2

而这个不:

red

谢谢!