转换此表中除2列以外的所有列的最有效方法是什么(如图所示)?

时间:2016-05-24 16:44:44

标签: excel vba performance ms-access transpose

I want to accomplish this in either Excel or Access。我需要找到最有效的方法来做到这一点,否则我的用户将不会一直这样做。最终,我希望它在最终形式中以便在Access中进行查询,但我将Excel列为一个选项,因为我总是可以从电子表格导入Access。

简而言之,我希望转换 之前的每一列前两列。然后,我想为每个转置行分配原始对应的itemdescription

我使用的方法是使用Excel中的转置粘贴复制并特殊粘贴第3行,第4行和第5行,然后手动将每个项目和描述复制到相应的行,但这对于近400行不可行和我的用户将使用的50列。

我有使用Access / VB for Access,Excel(但这里没有VB经验)和SQL的经验。我想找到最快的方法来做到这一点。我不介意在查询或构建一些VB代码时构建查询,我真的希望这可以工作。

1 个答案:

答案 0 :(得分:1)

在运行下面的代码之前,请删除H到K列中的所有数据。否则,代码将无效。

Sub CreateTable()
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    startRow = 2
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    startCol = 3
    counter = 2

    For rowCnt = startRow To lastRow
        itemStr = Cells(rowCnt, 1).Value
        descStr = Cells(rowCnt, 2).Value
            For colCnt = startCol To lastCol
                dateStr = Cells(1, colCnt).Value
                qnty = Cells(rowCnt, colCnt).Value
                Cells(counter, 8).Value = itemStr
                Cells(counter, 9).Value = descStr
                Cells(counter, 10).Value = qnty
                Cells(counter, 11).Value = dateStr
                counter = counter + 1
            Next
        Next

    Cells(1, 8).Value = "item"
    Cells(1, 9).Value = "description"
    Cells(1, 10).Value = "expected_qty"
    Cells(1, 11).Value = "expected_job_date"

End Sub