这不是一个答案。 这是试图理解你的问题,我怀疑这是一个有趣的问题。您应该将本文中关于您的问题的正确猜测复制到您的问题中,并替换不正确的猜测。
您不能将数据保存在数组中,因此您必须描述问题的中心。我猜您有一个包含格式化数据的工作表,并且您会不时收到一个包含新数据的 CSV 文件,该文件将被合并到工作表中。
为了使描述更容易,我将使用它来表示您的格式化数据:
Name Week Mon Tue Wed Thu Fri
John 1 5 10 12 4 3
Gwen 1 3 15 3 1 8
John 2 3 7 18 6 4
Gwen 2 9 20 4 1 7
您说格式化名称可能会更改或添加。也许老板认为周一、周二等过于非正式,并希望将周名拼写出来。也许你加上星期六和星期天,然后争论星期天是一周的第一天还是最后一天。
您说 CSV 文件中的列标题并不总是与格式化的列标题匹配。当格式化的标题不是时,可能会缩写 CSV 标题。也许 CSV 标题是西班牙语的。也许在高峰期有一个公共假期,所以约翰和格温在周二到周六工作。也许周五是新员工的安息日,所以他们从周日到周四工作。
您正在考虑使用InputBox
让用户选择两个标题序列,但我看不出它是如何工作的。
首先,您可以查看工作表以找到所需的序列。用户不必选择任何东西。
其次,用户为 CSV 文件选择名称集和序列意味着宏必须保存所有可能的名称集和序列的列表。那可能吗?由于您声明 CSV 文件可能包含一个新标题,我猜不会。
假设,这两组标题是:
Worksheet: Name Week Mon Tue Wed Thu Fri
CSV file: Staff WoY Sun Mon Teu Wed Sat
Name 和 Week 列有不同的名称。星期二拼写错误的复杂情况有不同的工作日。
您是否有与 CSV 文件匹配的准备好的列表?您会尝试即时解决差异吗?我认为不可能有一套完整的准备好的清单。第二个需要一些聪明而复杂的代码才能获得有限的收益。
我会(1)简化要求,(2)准备一个备用名称表。
为了简化,我会要求格式化数据提前包含所有可能的列。如果 CSV 文件包含以前未知的星期六,我会要求在应用 CSV 文件之前添加它。如果它不在列表中,我不会尝试添加“Teu”。
我的替代表将在一个隐藏的工作表中,并且是这样的,其中每一行都为同一列定义了一个替代名称列表:
Name Staff Staff member
Week WoY Week of year
Mon Monday M
Tue Tuesday Tu Teu
Wed Wednesday W
Thu Thursday Th
Fri Friday F
Sat Saturday Sa St
Sun Sunday Su Sn
该表无法处理歧义。给定M T W T F
,它不能推断出第一个T
是星期二和第二个星期四。
Teu
如果您愿意,可以包含拼写错误(例如)。
我会要求工作表和 CSV 文件中的每个列标题都在此表中。任何无法识别的列标题都会产生有用的消息,因此用户可以在重新运行宏之前修复工作表、备选表或 CSV 文件。
应该清楚的是,尽管您可能遇到 VBA 问题,但我认为您首先遇到了设计问题。
祝你好运。