Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
ms access vba中的CSV数组操作转置_Vba - Fatal编程技术网

ms access vba中的CSV数组操作转置

ms access vba中的CSV数组操作转置,vba,Vba,我已经在编写这段代码,我需要帮助以转置形式从csv传输值 我的数据是行 date | field1 | field2 | field3...|field 800 date |value |value |value ... |value 我想把它改成 date| Field1| value date| Field2| value date| field3| value 我只能读取csv文件的1行,并使用日期作为分组值,我有2000多行和800列。我也不需要包含空值。请帮我操作

我已经在编写这段代码,我需要帮助以转置形式从csv传输值

我的数据是行

date | field1 | field2  | field3...|field 800

date |value   |value    |value ... |value
我想把它改成

date| Field1| value

date| Field2| value

date| field3| value

我只能读取csv文件的1行,并使用日期作为分组值,我有2000多行和800列。我也不需要包含空值。请帮我操作数组。谢谢。

考虑通过行循环并转置它们

Set xlWb1 = xlApp.Workbooks.Open(SourcePathAndName)
Set xlWb2 = xlApp.Workbooks.Add

    lastrow = xlWb1.Worksheets(1).UsedRange.Rows.Count
    lastcolum = xlWb1.Worksheets(1).UsedRange.Columns.Count

    ' ITERATES THROUGH 2,000 ROWS
    For i = 1 to lastrow
         ' COPIES ENTIRE ROW FROM COLUMNS 1 to 800
         With xlWb1.Worksheets(1)
            .Range(.Cells(i, 1), .Cells(i, lastcolumn)).Copy
         End With

         ' TRANSPOSES TO 2,000 COLUMNS <---- NOTE: TOO WIDE FOR MS ACCESS TABLE
         xlWb2.Worksheets(1).Cells(1, i).PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Next i

请注意,MS Access对表的列数限制为255。为什么不直接复制标题行,转置它,然后复制值行并转置它,然后导入Access?不需要通过数组。是的,我知道这个限制,使用excel vba运行它,我能够读取255多个列,实际上是800个列成功读取和转置,但仅使用我的代码就可以读取一行。我试图读取下一行直到2000,同时将字段值保留在顶部作为字段标志。在excel中进行转置意味着在导入之前,我将进行2000次。有没有想法任何人。。。请帮忙。。。感谢将问题分部分解决:1首先,请确保该文件已导入某个位置,例如Excel文件。2创建两个数组:一个用于保存标题,另一个用于保存每个数据行。3阅读标题。4对于每个数据行,读取该行并将其写入另一个位置表。在把事情复杂化之前,试着用一种简单的方法来解决问题。谢谢Barranka,是的,我会用这个codehi冻糕来尝试,它说细胞是一个未定义的子。。。我怎么修理它?谢谢编辑。我忘了在粘贴行中声明第二个工作簿的第一个工作表。您好,我已经包括了您所做的更改,它仍然有相同的错误。我必须初始化任何东西吗?Thankshi冻糕,它工作正常,但它只能读取一行数据。。。它不会转到下一行。。。我真的很感谢你的帮助。。。非常感谢。
Set xlWb1 = xlApp.Workbooks.Open(SourcePathAndName)
Set xlWb2 = xlApp.Workbooks.Add

    lastrow = xlWb1.Worksheets(1).UsedRange.Rows.Count
    lastcolum = xlWb1.Worksheets(1).UsedRange.Columns.Count

    ' ITERATES THROUGH 2,000 ROWS
    For i = 1 to lastrow
         ' COPIES ENTIRE ROW FROM COLUMNS 1 to 800
         With xlWb1.Worksheets(1)
            .Range(.Cells(i, 1), .Cells(i, lastcolumn)).Copy
         End With

         ' TRANSPOSES TO 2,000 COLUMNS <---- NOTE: TOO WIDE FOR MS ACCESS TABLE
         xlWb2.Worksheets(1).Cells(1, i).PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Next i