Excel VBA对于每个工作表获取一行的内容并放入一个数组中

我有一个当前的项目,需要我打开一个Excel文档,找出什么格式的文档是什么(“标题”为A:内容),然后找出是否遵守新的文档布局格式,并转换必要的数据以符合新的格式。

我必须为数以千计的文件执行此操作,因此我想尽可能多地自动化发现部分,并且计划仅需要为某些内容types编写一些一次性解决scheme(具有需要的特定数据的文档保存为新格式的例外)。

这是我想要做的事情的背景。 我已经到了试图填充每行A:A的内容的数组,但是我的ReDim语句失败,因为我保证我做了错误的事情。

以下是我进入表单的内容:

For Each Sht In SourceWorkbook.Sheets Sht.Activate SourceHeaderCount = ActiveSheet.UsedRange.Columns.Count Set SourceHeaderRange = Sht.Range("A1:A" & SourceHeaderCount) ReDim Preserve SourceHeaders(0 To UBound(SourceHeaders) + SourceHeaderCount) SourceHeaders(UBound(SourceHeaders)) = SourceHeaderRange Next Sht 

再一次,这个想法是抓住A:A(仅用于内容)的内容,以便我有一个文件列表,然后将该列表与我需要的列表进行比较,然后从那里我需要创build子函数来处理每种types的转换。 首先是第一件事,但我需要知道这个文件是什么。 任何想法,我可以做这个工作? 我认识到,在面对非标准化的数据时(比如如果a2未被使用但a3被使用?),这种方法存在缺陷。但是为了这个上下文的目的,假设所有文档都很容易处理,并且没有真正奇怪的数据scheme担心。

谢谢您的帮助!

我发现,当把许多具有相似(但不一致)布局的工作表汇总到一个普通的工作表时,一砖一瓦的方法需要更长的时间,但却是最彻底的。 在下面,每个sorting的工作表都检查了每个列标题标签,看它是否已经存在于目标工作表中。 如果不是,则插入到第1行的最右端,循环继续。

 Dim r As Long, c As Long, tr As Long, tc As Long, ws As Worksheet, wst As Worksheet Set wst = Sheets("All_of_Them") For Each ws In Worksheets With ws If .Name <> wst.Name Then With .Cells(1, 1).CurrentRegion tr = wst.Cells(1, 1).CurrentRegion.Rows.Count + 1 For c = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column If Not CBool(Application.CountIf(wst.Rows(1), .Cells(1, c).Value)) Then wst.Cells(1, .Columns.Count).End(xlToLeft).Offset(0, 1) = .Cells(1, c).Value End If tc = Application.Match(.Cells(1, c).Value, wst.Rows(1), 0) .Columns(c).Offset(1, 0).Copy Destination:=wst.Cells(tr, tc) Next c End With End If End With Next ws Set wst = Nothing 

上面应该很容易扩展到一个或多个文件夹中的多个工作簿。 目标工作表可以作为空白工作表开始,并且聚合的列标题标签将被构build,因为新的标题标签是按顺序工作表引入的。