因此,我正在处理的项目要求我读取CSV文件,解析它并找到所需的列,然后将所需的列打印到另一个工作表。我的部分问题是我在学习VBA的过程中,所以我必须要有一些简单的东西让我失踪。 我已经尝试了很多不同的打印方式,没有一个像我想要的那样打印在列中。如果有一个线程已经回答了这个问题,我很抱歉,但我找不到它。 到目前为止,我已经能够读取CSV文件并将所有信息存储到2D阵列中。这是代码:
i = 0 'This is the x value of the 2d array
'Populate the 2d array with the CSV File Data
Do Until csvFile.AtEndOfStream
sLine = csvFile.ReadLine
sArray() = Split(sLine, ";")
For j = 0 To UBound(sArray)
stArray(i, j) = sArray(j)
Next j
i = i + 1
Loop
现在,我正处于我想要将所需列打印到阵列的部分。我正在尝试测试打印,以确保在开始检查之前我可以执行此操作,因此我使用单维数组进行测试而不是2D数组。 一旦我弄清楚如何打印,那么我将通过if-statement运行我的2d数组,该语句将查找所需的列。
这是我的测试代码:
Dim o As Object
Set o = CreateObject("excel.application")
o.Visible = True
o.Workbooks.Add
For r = 0 To UBound(sArray)
o.Sheets("test").Range(o.Cells(3, 1).Address, o.Cells(3, r).Value = sArray(r)
Next r
相反,我现在受到循环中行的运行时错误“1004”“应用程序定义或对象定义的错误”的欢迎。 我没有足够的VBA经验或知识知道如何解决这个问题。我的经验是Java和Python。
同时,如何将数组打印到一列单元格?我这样做了吗?
任何帮助都会有所帮助,谢谢。
答案 0 :(得分:0)
Excel可以使用二维数组为单元格指定值,但是您需要移植(翻转维度)数组stArray
。
假设stArray
的大小合适。
o.ActiveSheet.Range("A1").Resize(UBound(stArray, 2) + 1, _ UBound(stArray, 1) + 1).Value = o.Transpose(stArray)
您的代码没有重新stArray
。如果有额外的行或列,则使用i和j变量到Resize
范围。
o.ActiveSheet.Range("A1").Resize(j + 1, i + 1).Value = o.Transpose(stArray)
如果你想迭代二维数组的每个元素:
With o.ActiveSheet For rws = 0 To UBound(stArray, 2) For cols = 0 To UBound(stArray, 1) .Cells(rws + 1, cols + 1).Value = stArray(cols, rws) Next Next End With
答案 1 :(得分:0)
在没有VBA的情况下,在Excel中查询/过滤/聚合外部数据的方法很简单。
对于Excel 2010及更高版本,this repo应该是最简单且功能最强大的。
另一种方式是Data
标签> From Text
> Delimited
>并在;
Delimiters
中输入Other:
之后,您可以删除额外的列,向表中添加过滤器,并将VBA用于Excel无法完成的任务。 Power Query
此外,使用SQL
查询/过滤/汇总外部数据的方法很少:
https://msdn.microsoft.com/en-us/library/office/ff840319.aspx