VBA:将集合范围数据从一个工作簿转换到另一个工作簿

VBA:将集合范围数据从一个工作簿转换到另一个工作簿,vba,excel,range,transpose,Vba,Excel,Range,Transpose,我的项目涉及将数据从文件夹中的文件复制到一个excel中。文件夹中的文件具有行中的数据,我需要将数据转换为一个Excel(数据库Excel)。我发现了一些非常接近我需要的代码,我正在尝试修改这些代码以适合我。看起来我只需要在下面的代码中修改destrange,但是我无法进行任何调整 完整代码可在此处找到: 将数据从行转换到列,我缺少了什么 If Not sourceRange Is Nothing Then SourceCcount = sourceRange

我的项目涉及将数据从文件夹中的文件复制到一个excel中。文件夹中的文件具有行中的数据,我需要将数据转换为一个Excel(数据库Excel)。我发现了一些非常接近我需要的代码,我正在尝试修改这些代码以适合我。看起来我只需要在下面的代码中修改destrange,但是我无法进行任何调整

完整代码可在此处找到:

将数据从行转换到列,我缺少了什么

 If Not sourceRange Is Nothing Then

                SourceCcount = sourceRange.Columns.Count

                If Cnum + SourceCcount >= BaseWks.Columns.Count Then
                    MsgBox "Sorry there are not enough columns in the sheet"
                    BaseWks.Columns.AutoFit
                    mybook.Close savechanges:=False
                    GoTo ExitTheSub
                Else

                    'Copy the file name in the first row
                    With sourceRange
                        BaseWks.Cells(1, Cnum). _
                                Resize(, .Columns.Count).Value = MyFiles(Fnum)
                    End With

                    'Set the destrange
                    Set destrange = BaseWks.Cells(2, Cnum)
                    'Set destrange = BaseWks.Range("A" & 1)

                    'we copy the values from the sourceRange to the destrange
                    With sourceRange
                        Set destrange = destrange. _
                                        Resize(.Rows.Count, .Columns.Count) '.PasteSpecial Paste:=xlValues, Transpose:=True
                        'destrange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
                    End With
                    destrange.Value = sourceRange.Value

                    Cnum = Cnum + SourceCcount
                End If
            End If
            mybook.Close savechanges:=False
        End If

请注意,de Bruin没有使用复制方法。试试这个(未测试)


请注意,de Bruin没有使用复制方法。试试这个(未测试)

罗恩, 您发布的解决方案是正确的。我在更新代码时有一个输入错误。 注意。我还必须进行其他更新,比如创建Cnum并将其替换为Rnum,这样数据就可以按行而不是按列添加。感谢您的时间和快速响应。 我不是要坚持de Bruin使用的是复制方法,我只是想弄清楚他使用的方法的名称。我想它并没有真正的名字。他只是使用数组来移动数据

罗恩, 您发布的解决方案是正确的。我在更新代码时有一个输入错误。 注意。我还必须进行其他更新,比如创建Cnum并将其替换为Rnum,这样数据就可以按行而不是按列添加。感谢您的时间和快速响应。
我不是要坚持de Bruin使用的是复制方法,我只是想弄清楚他使用的方法的名称。我想它并没有真正的名字。他只是使用数组来移动数据

“destrange.Value=WorksheetFunction.Transpose(SourceRange.Value)”这并没有给我一条错误消息,但它在每行中为相同数量的行放置了第一个值。示例:我有20行需要在第一行中用“testarea”转置。在新的excel(destrange)A2:A21中都有“测试区域”。@MichaelKapp您的评论是问题还是陈述?问题。转置功能未按(I)预期工作。我需要帮助使它正常工作。您还说de Bruin没有使用复制方法。他用什么方法?不知道该用谷歌搜索什么。@MichaelKapp对不起。@MichaelKapp你在德布鲁因的代码里看到了什么。复制?当他还想复制格式时,他会使用它,但不仅仅是为了值。我建议你看看[Chip Pearson's网站](www.cpearson.com),了解如何在工作表中读写数组,以及许多其他有用的信息。如果
Transpose
没有像您预期的那样工作,那么您的数据或您的期望中有一些我从您的问题中无法理解。“destrange.Value=WorksheetFunction.Transpose(SourceRange.Value)”这并没有给我错误消息,但它在每行中为相同数量的行放置了第一个值。示例:我有20行需要在第一行中用“testarea”转置。在新的excel(destrange)A2:A21中都有“测试区域”。@MichaelKapp您的评论是问题还是陈述?问题。转置功能未按(I)预期工作。我需要帮助使它正常工作。您还说de Bruin没有使用复制方法。他用什么方法?不知道该用谷歌搜索什么。@MichaelKapp对不起。@MichaelKapp你在德布鲁因的代码里看到了什么。复制?当他还想复制格式时,他会使用它,但不仅仅是为了值。我建议你看看[Chip Pearson's网站](www.cpearson.com),了解如何在工作表中读写数组,以及许多其他有用的信息。如果
转置
没有按照您的预期工作,那么您的数据或您的期望中有一些我无法从您的问题中理解的东西。
'Set the destrange
                Set destrange = BaseWks.Cells(2, Cnum)
                'Set destrange = BaseWks.Range("A" & 1)

                'we copy the values from the sourceRange to the destrange
                With SourceRange

                 'NOTE we reverse the rows and columns
                    Set destrange = destrange. _
                                    Resize(.Columns.count, .Rows.count)
                End With

               'NOTE we transpose the SourceRange.  If SourceRange has a huge number of rows, might have to do this manually.

                destrange.Value = WorksheetFunction.Transpose(SourceRange.Value)