我正在使用Excel 2016.我需要转换来自多个工作簿的数据(每个工作簿包含不同数量的工作表)。所有工作表都采用相同的格式,每个工作表需要转换的所有列都在同一个地方开始(例如,D列)。但是,每个工作表可以包含要转置的不同数量的列(即,工作表1可能具有列D到E,工作表2可能具有Cols D到G,依此类推......)。
我已经有了一个可以运行的VBA代码来完成这项工作(下面有更多内容),但我的主要问题是每次需要在工作表上运行代码时都需要手动更改代码,因为我需要转置的数据不同于工作表到工作表。
这是我现有的VBA代码:
col A col B col C col D
HOTEL RATING PLAN 22/08/2014
EBA 3 AI 88
VER 3 AI 85
TRO 3 AI 91
以下是工作簿1的原始数据 - 名为“2015年2月”的工作表:
EBA 3 AI 88 22/08/2014
VER 3 AI 85 22/08/2014
TRO 3 AI 91 22/08/2014
这是我在该工作表上运行现有VBA代码时得到的结果:
col A col B col C col D col E
HOTEL RATING PLAN 22/04/2014 25/05/2014
EBA 3 AI 69 58
VER 3 AI 80 60
TRO 3 AI 90 98
现在,在同一个工作簿中,我可能会有另一个名为“2015年6月”的工作表,它可能看起来像这样:
EBA 3 AI 88 22/08/2014 Feb 2015
VER 3 AI 85 22/08/2014 Feb 2015
TRO 3 AI 91 22/08/2014 Feb 2015
EBA 3 AI 69 22/04/2014 Jun 2015
VER 3 AI 80 22/04/2014 Jun 2015
TRO 3 AI 90 22/04/2014 Jun 2015
EBA 3 AI 58 25/05/2014 Jun 2015
VER 3 AI 60 25/05/2014 Jun 2015
TRO 3 AI 98 25/05/2014 Jun 2015
现在,我需要运行我的vba代码2次,每个工作表一次。另外,我需要根据我的vba代码将工作表重命名为“ORIGINAL”。
我需要更改vba代码,以便执行以下操作:
(1)自动确定转置所需列的范围(基于需要转置的列始终从列D开始的事实) (2)自动向转置数据添加新列,并使用工作表的名称填充该列 (3)vba代码应该在Workbook中的所有工作表中运行,并将所有结果输出到一个新的工作表中
所以,基本上这里是我正在寻找的输出,基于上面的例子,工作簿只有2个工作表,分别名为“2015年2月”和“2015年6月”:
{{1}}
注意:我还必须补充一点,行数与工作表不同,我需要vba代码自动将其考虑在内。
答案 0 :(得分:0)
我不打算为你编写你的程序,我认为你应该专注于你尚未学习并询问他们的VBA部分(实际上是google)。
无论如何,您可以使用一些技巧来完成任务
要找出一个获得范围变量的行数,请说rng
一个
Debug.Print "rowcount=" & rng.Rows.Count
列数
Debug.Print "columncount=" & rng.Columns.Count
要查找已经有一个示例的单元格块的边缘,您从一个空白单元格开始,然后朝向该块移动,所以在您的代码中有
Sheets("output").Range("A65536").End(xlUp).Row
将找到A列中单元格块的最低行。
你甚至可以使用UsedRange,给定一个单元格将找到包围周围区块的所有范围。
Sheets("output").Cells(1,1).UsedRange
您现在有能力完成任务。 :)