新手到VBA,需要一个棘手的功能

时间:2014-09-14 02:10:00

标签: excel vba excel-vba

提前感谢您的帮助......

(这是一个军事单位,以帮助跟踪哪些服务成员需要做哪些培训。)

我需要获取一堆数据(在不同的工作表上,所有数据都从同一位置导出并格式化完全相同)并将它们复制到一个主工作表中,但数据反转...

我有一堆表(如25),其中包含一个名单(和其他管理数据)列表,显示谁完成了特定的培训,每张表都用于不同的培训。我希望通过培训来弥补缺陷,而不是缺乏名称。

导出的数据总是这样格式化:

Title of Training

Last 4  Last Name   First Name  Rank    Unit    MOS Skill Level Most Recent
xxxx    Last        First       RNK     Unit    MOS SkillLevel  Date

我想要一张看起来像这样的主表:

Training Deficiencies

Last 4  Last Name   First Name  Rank    Unit    MOS TitleA  TitleB  etc
xxxx    Last        First       RNK     Unit    MOS   x        x     x
xxxx    Last        First       RNK     Unit    MOS            x     
xxxx    Last        First       RNK     Unit    MOS   x        x

每项培训的技能级别和最新级别都不同,与主表单无关。标题(TitleA,TitleB等)可以从相应表格的单元格(1,1)中复制,也是表格本身的标题。

我创建了一个包含单元中每个人的工作表,所以我的第一步是创建主工作表(我只是删除整个工作表并再次创建它):

Sheets("MasterSheet").Delete
Sheets("DataSheet").Copy After:=Sheets("DataSheet")
ActiveSheet.Name = "MasterSheet"
Cells(1, 1).Value = "'Master Sheet"

我无法弄清楚怎么做是循环主表上的Last4并将它们与每个培训表中的Last4进行比较。

所以对于每个培训表:

  1. 我想在MasterSheet上创建一个新列,其中培训标题为列标题
  2. 遍历培训表上的每个名称,找到该服务成员的行。
  3. 在该服务成员的相应培训栏中加上“X”。
  4. 之后,我希望每个服务成员根据其行中的X数突出显示为绿色,黄色或红色。我想一旦我复制了数据,我将能够找出突出显示和其他格式。

    再次感谢您的帮助。我无法开始表达这将节省多少时间(目前手工完成)。我整天都在谷歌上,我可以找到一些东西,但我真的不知道怎么把它们放在一起。我正在使用Excel 2007.我有一个IT背景并且了解一些代码,但是自从我完成了一些真正的编码以来已经很长时间了,而VBA真的让我感到困惑。

    再次感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我会喜欢这个

  • 创建一个scripting.dictionary
  • 将所有工作表中的所有last4添加到字典
  • 循环字典并输出主表上的所有键,并将每个键的值设置为行号
  • 再次循环所有工作表并在字典中查找行号并将单元格设置为1
  • 创建一个公式以对每行求和并对颜色使用条件格式 (并使用格式格式"' x&#39 ;;;'如果" x"是一项硬性要求)