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
从多个excel工作簿的不同部分收集数据并将其附加到新工作簿中_Excel_Vba_Excel Formula - Fatal编程技术网

从多个excel工作簿的不同部分收集数据并将其附加到新工作簿中

从多个excel工作簿的不同部分收集数据并将其附加到新工作簿中,excel,vba,excel-formula,Excel,Vba,Excel Formula,我必须从多个excel工作簿(统一格式)的不同部分收集数据,并将其附加到新工作簿中。格式与下图相似。我必须从多个工作簿中的绿色和蓝色部分(而不是表格)收集数据,并像下图中的表格一样附加数据。 我知道这可以用VBA来完成。不幸的是,我以前从未使用过VBA。如果有人能提供一个通用代码,或者至少能为我指明正确的方向,那就太好了。此外,如果这可以通过任何其他方式完成,请分享。 非常感谢。 注意:我有一个所有工作簿的超链接列表。这是一个针对您项目的VBA速成课程。所有的代码都应该可以工作,但我现在正在

我必须从多个excel工作簿(统一格式)的不同部分收集数据,并将其附加到新工作簿中。格式与下图相似。我必须从多个工作簿中的绿色和蓝色部分(而不是表格)收集数据,并像下图中的表格一样附加数据。

我知道这可以用VBA来完成。不幸的是,我以前从未使用过VBA。如果有人能提供一个通用代码,或者至少能为我指明正确的方向,那就太好了。此外,如果这可以通过任何其他方式完成,请分享。 非常感谢。
注意:我有一个所有工作簿的超链接列表。

这是一个针对您项目的VBA速成课程。所有的代码都应该可以工作,但我现在正在编写,所以还没有经过测试。在这个示例代码中,我将尽力逐行解释最好的内容。您可以按单元格、行、列或范围引用所需的所有数据。我建议将所有数据分配到一个数组,然后将数组写入所需的位置。我想如果这是你需要重复做的事情,我会保存一个工作簿,里面有这段代码,然后像模板一样使用它

下面是一些允许您从其他工作簿加载工作表的代码

Dim SourceWorkbook As Workbook, CurrentWorkbook As Workbook 'sets up references to contain workbook information
Set CurrentWorkbook = ThisWorkbook 'ThisWorkBook is a built in excel reference to the book the code is running on
Set SourceWorkbook = Workbooks.Open("D:\file location\inputfile.xlsx") 'assigns the SourceWorkbook reference to the file location inside the quotes

SourceWorkbook.Sheets("Sheet1").Copy After:=CurrentWorkbook.Sheets("Main") 'this code takes the open file assigned to SourceWorkbook and copies "Sheet1" into the Workbook referenced by CurrentWorkbook (thisworkbook) after the sheet titled "Main" 
SourceWorkbook.Close 'closes the workbook you just imported data from
我建议从将所有数据导入单个工作簿开始。然后,如果需要引用某个对象,则需要设置一个数组,通过循环函数或直接引用范围来收集数据。下面是一个单循环参考示例

Dim RowCount as integer
Dim DataSortArray(1 To 1000, 1 To 3) As Variant
RowCount = 1
Do while currentworkbook.sheets("sheet1").Cells(Rowcount, 1) <> "" 
DataSortArray(RowCount, 1) = currentworkbook.sheets("sheet1")Cells(RowCount, 1) 
DataSortArray(RowCount, 2) = currentworkbook.sheets("sheet1")Cells(RowCount, 2) 
DataSortArray(RowCount, 3) = currentworkbook.sheets("sheet1")Cells(RowCount, 3) 
RowCount = RowCount + 1
loop
如果您需要创建一个新文件,这里有一些代码可以做到这一点

Dim Fname as string

Fname = "C:\new.xlsx"
ActiveWorkbook.SaveAs Filename:= Fname

收集数据的条件是什么?这仅仅是背景色,还是其他什么?请注意,因为这不是免费的代码编写服务,所以您必须显示您迄今为止尝试过的内容以及遇到的问题或错误(通过显示代码),或者至少显示您已经研究过的内容和所做的努力。否则它只是要求我们为你做所有的工作。阅读可能会帮助你改进你的问题。@ChristoferWeber:我只需要数据值,我使用背景色只是为了更好地理解问题而突出显示不同的部分。感谢you@Pᴇʜ:我要求提供一个通用代码,如果它在那里可用的话。我还提到了“为我指出正确的方向”,如果你在评论中添加了方向,那就太好了。谢谢你,谢谢你,斯科特。我会尝试一下,如果有任何问题,我会告诉你。:)
Sheets.Add(After:=Sheets("Sheet1")).name = "Output" 'creates a new sheet called "Output" if you need to add a sheet
Sheets("Output").Range("a1:d10000").Value = DataSortArray 'prints out the finished array to the sheet titled "Output" again if you need more then 4 columns you will need to change the reference to be "Range("a1:j10000").Value" your range can be larger than needed but not smaller. 
Dim Fname as string

Fname = "C:\new.xlsx"
ActiveWorkbook.SaveAs Filename:= Fname