在VBA中按列打印到Excel单元格

因此,我正在处理的项目需要我读取CSV文件,parsing并find所需的列,然后将所需的列打印到另一个工作表。 我的部分问题是,我一路上学习VBA,所以有一些简单的东西我错过了。 我已经尝试了很多不同的方式来打印,而不是像我想要的那样在列中打印。 如果有线程已经回答了这个问题,我很抱歉,但我找不到它。 到目前为止,我已经能够读取CSV文件并将所有信息存储到二维数组中。 这里是代码为:

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 

现在,我正在想要将所需的列打印到数组。 我试图打印testing,以确保我可以在开始检查之前做到这一点,所以我使用单维数组进行testing,而不是二维数组。 一旦我弄清楚如何打印,那么我将通过if语句来运行我的2D数组,该语句将查找所需的列。

这是我的testing代码:

 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。

同时,如何将数组打印到一列单元格中? 我做对了吗?

任何帮助,这将是有益的,谢谢。

Excel可以使用2维数组将值分配给单元格,但是您需要转置(翻转维)数组stArray

假设stArray的大小正确。


     o.ActiveSheet.Range(“A1”)。Resize(UBound(stArray,2)+ 1,_
     UBound(stArray,1)+ 1).Value = o.Transpose(stArray)

您的代码不会redim stArray 。 如果有额外的行或列,然后使用您的i和jvariables来Resize范围。


     o.ActiveSheet.Range(“A1”)。Resize(j + 1,i + 1).Value = o.Transpose(stArray)

如果你想遍历2维数组的每个元素:


    用o.ActiveSheet
        对于rws = 0到UBound(stArray,2)
            对于cols = 0 To UBound(stArray,1)

                 .Cells(rws + 1,cols + 1).Value = stArray(cols,rws)

            下一个
        下一个
    结束

在没有VBA的情况下,有几个简单的方法可以在Excel中查询/过滤/聚合外部数据。

对于Excel 2010及更高版本, Power Query应该是最简单,最强大的。

另一种方法是Data选项卡> From Text > Delimited >并input;Delimiters Other:
之后,您可以删除额外的列,向表中添加filter,并使用VBA来处理Excel无法完成的任何操作。 https://msdn.microsoft.com/en-us/library/office/ff840319.aspx

此外,使用SQL查询/过滤/汇总外部数据的方法很less: http : //www.exceluser.com/formulas/msquery-excel-text-files.htm