将多个工作表的相同范围的列复制到带有不同列的汇总表中

如果已经发布,我表示歉意。 我已经无休止地看过,发现类似的话题,但不知道如何操纵macros,以适应我的需求。

我有344张数据。 在每张表格中,我都有特定范围的数据(AY125:AY158),我想将其复制到一张表格中。 我想要的是将这些数据粘贴到汇总表中,其中表1的数据范围为A列,表2为B列,表3为C等。

我对VBA的了解是非常基本的,所以对此的帮助会很大。

欢迎来到Stack Exchange。

这不是一个好的问题,这个网站。 屏幕右上方是“帮助”。 点击此处寻求相关问题的帮助。

对于我来说,你的问题的重大错误是你一次性要求太多,而且对于如何解决问题没有任何的理解。 这个网站是为了让程序员帮助其他程序员发展他们的技能; 对于那些不学习编码的人来说,这不是一个代码编写服务。

如果你想使用Excel VBA,你必须学习语言。 你说:“…不知道如何操纵macros,足以满足我的需求。” 如果你知道VBA的基础知识,你就会知道如何做到这一点。

在网上search“Excel VBA教程”。 有很多select。 尝试几个,并select一个符合你的学习风格。 当地的大学可以以合理的价格提供简短的课程。 我更喜欢书籍。 我访问了一个很好的图书馆,花了半个小时的时间,通过他们的Excel VBA Primers来借阅我最喜欢的三个。 在家里学习之后,我买了一个我最喜欢的。 我还时常提到那本书。 良好的投资。 学习基础知识并不需要很长时间,你的学习时间将很快得到回报。

我会尽力让你开始,但在尝试另一个问题之前,请先学习基础知识。

制造商正试图帮助你解决你的问题与公式。 如果满足您的需求,这可能是最简单的方法。 我会告诉你一个VBA的方法。

你必须把你的要求分成几个小步骤。 尝试对macros进行编码以执行步骤1.search与步骤1相关的问题。find与单个问题相关的问题和答案将更加容易。 如果你不能让你的macros发挥作用,请发布你的代码,说明它做了什么以及你想做什么。 像这样的小问题经常在几分钟内回答。

完成第1步的工作后,尝试升级macros执行第1步和第2步,然后执行第1步,第2步和第3步。您会惊讶地发现使用这种方法可以使您的进度得到多快。

你需要做的第一件事是循环所有的工作表。 尝试:

 Option Explicit Sub Try1() Dim InxW As Long For InxW = 1 To Worksheets.Count Debug.Print Worksheets(InxW).Name Next End Sub 

上面的macros将每个工作表的名称列出到立即窗口。 即时窗口应位于代码区域的下方。 如果缺失,请单击Ctrl + G。

这个macros的问题是在即时窗口中只有150行左右的空间,所以当macros停止时,早期的名字已经滚动到顶部。

现在尝试:

 Option Explicit Sub Try2() Dim InxW As Long For InxW = 1 To Worksheets.Count Debug.Print Worksheets(InxW).Name If InxW Mod 100 = 0 Then Debug.Assert False Debug.print "-----------------" End If Next End Sub 

每次InxW是100的倍数时, Debug.Assert False语句将被达到并停止执行。 这将允许您检查列出的最后100个工作表。

工作表是按照你想要的顺序列出的吗?

 Option Explicit Sub Try3() Dim InxW As Long Dim WshtName As String For InxW = 3 To 1 Step -1 WshtName = "Sheet" & InxW Debug.Print Worksheets(WshtName).Name If InxW Mod 100 = 0 Then Debug.Assert False Debug.Print "-----------------" End If Next End Sub 

您可以按名称以及索引访问工作表。 如果您的工作表被命名为“Sheet1”到“Sheet344”,则此macros将按相反顺序显示名称。

到了这个时候,你已经告诉加工商你想使用区号。 根据维基百科,美国每个州都有不同的地区。 如果表单不符合要求,则必须生成名称。 以下可能是最简单的方法:

 Option Explicit Sub Try5() Dim InxDist As Long Dim InxState As Long Dim NumDist As Long Dim StateDtl() As Variant Dim StateDtlPart() As String StateDtl = Array("Alabama|AL|7", "Alaska|AK|1", "Arizona|AZ|9", "Arkansas|AR|4") NumDist = 0 For InxState = LBound(StateDtl) To UBound(StateDtl) StateDtlPart = Split(StateDtl(InxState), "|") Debug.Print StateDtlPart(0) For InxDist = 1 To Val(StateDtlPart(2)) Debug.Print " " & StateDtlPart(1) & Right("0" & InxDist, 2) NumDist = NumDist + 1 If NumDist Mod 100 = 0 Then Debug.Assert False Debug.Print "-----------------" End If Next Next End Sub 

这里我介绍了两个数组。 如果你不知道数组是什么,请查看它。

StateDtl = Array("Alabama|AL|7", "Alaska|AK|1", "Arizona|AZ|9", "Arkansas|AR|4")初始化StateDtl,

 StateDtl(0) = "Alabama|AL|7" StateDtl(1) = "Alaska|AK|1" StateDtl(2) = "Arizona|AZ|9" StateDtl(3) = "Arkansas|AR|4" 

如果你喜欢这种方法,你需要为每个州添加这样的string。

StateDtl中的每个条目都有三个部分:州名,州代码和区号。 我不知道我的来源是否可靠,所以不知道我所展示的地区是否正确。

StateDtlPart = Split(StateDtl(InxState), "|") StateDtl中的条目分成几部分:

 StateDtlPart(0) = Alabama StateDtlPart(1) = AL StateDtlPart(2) = 7 

这个macros生成一个列表如下:

 Alabama AL01 AL02 AL03 AL04 AL05 AL06 AL07 Alaska AK01 Arizona AZ01 AZ02 AZ03 AZ04 AZ05 AZ06 AZ07 AZ08 AZ09 Arkansas AR01 AR02 AR03 AR04 

等等。

你可能更喜欢制造者的方法,但如果这看起来有趣,我会明天添加更多的细节。