Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何将表列数据转换为数组,保留数据格式(如字符串或文本)_Excel_Vba_Text_Transpose_Listobject - Fatal编程技术网

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

Excel 如何将表列数据转换为数组,保留数据格式(如字符串或文本),excel,vba,text,transpose,listobject,Excel,Vba,Text,Transpose,Listobject,我有一个包含两列的表。其中一个(C1)由两位小数组成,如2584.12。另一列(C2)也包含不时以不同格式写入的数字 在第二列的工作表更改事件中,代码应用于C2,与C1中应用的格式相同(编辑:格式不同,但不同) 为了引用C1中使用的格式,我使用了包含整列的数组: Set mytable = worksheet.ListObjects("My_Table") colarray = Application.Transpose(mytable.ListColumns("C1").DataBodyRan

我有一个包含两列的表。其中一个(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属性,但我无法得到有效的结果,因此下一个将不起作用(“无效的参数数”):

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

debug.print mytable.ListColumns("C1").DataBodyRange.rows(1).Text
结果“2584.00”与colarray(1)中的“2584”相比较


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

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

dim myArray(1 to 1) as string
myArray(1) = "123.00" 
将始终为123.00

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

此代码适用于:

colarray = Application.Transpose(mytable.ListColumns("C1").DataBodyRange.rows(1).Text)
而这一个没有:

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

谢谢大家!

你能澄清这个问题是关于什么的吗?这样正确的人才能回答。可能是关于Excel和VBA的(猜测)?噢!谢谢你,布莱恩!它是关于Excel VBA的。我添加了excel vba标签。非常感谢!问题是我不知道如何正确使用一些ListObject属性。我已经重新制定了我的问题!我一定是疯了,竟然提出这个。。。。如果该值是一个整数,那么通过添加.001将其解构(是的,我编的),我不相信text属性对您有效。如果数组保存十进制值很关键,那么我认为必须使用字符串。如果显示的值是重要的部分,那么format()就是您的朋友。我很好奇你为什么要换位一列。然后你读了这个专栏,你不是只得到了一个一维数组吗?(1到n)我上下发誓这就是我在表中使用的列,我没有转换任何内容。此外,fwiw,表的术语让我发疯,我花了比我想承认的更长的时间去理解。数组保留小数点零很重要,但这不是转置或数组的错误,而是我没有使用LIstObject属性。我只使用一列数组,因为它更容易处理或精确定位sheet_change事件,至少有一些优点。字符串是我唯一的解决方案。。。。这可能需要测试数组中每个元素的小数点(从右边算起的第三个字符),并更改未通过测试的元素。
colarray = Application.Transpose(mytable.ListColumns("C1").DataBodyRange.Rows("1:6").Text)