0

好的,我已经对这个主题进行了大量研究,但我还没有找到答案,所以这里是这样的:我收到的数据顺序不理想(只是带有日期、时间等标题的列和这些标题下的数据)我的目标是从已经手动排序的模板(在另一个工作表中)中对不需要的数据进行排序。我目前的想法是使用这样的东西来指定两个数组:

SetRng1 = Application.InputBox("Select The Formatted Range of Channel Names", Type:=8)

SetRng2 = Application.InputBox("Select The Unformatted Range of Channel Names", Type:=8)

使用 Rng1 元素对 Rng2 元素进行排序。然而,Rng1 中的通道并不总是在 Rng2 中,在这种情况下,来自格式化数据 (Rng1) 的通道需要以正确的顺序插入,其下方有空白单元格。与 Rng2 中的情况一样,其中会有 Rng1 中没有的频道,这些将需要被推送到频道列表的末尾。此外,Rng1 和 Rng2 中标题的名称和数量将始终在变化,因此无法找到元素并仅通过它们的通道名称对其进行排序。我很惭愧地承认,我对 vba 的了解并不能胜任这项任务。我感谢可能提供的任何帮助,如果有任何不清楚的地方,请告诉我。

4

1 回答 1

0

这不是一个答案。 这是试图理解你的问题,我怀疑这是一个有趣的问题。您应该将本文中关于您的问题的正确猜测复制到您的问题中,并替换不正确的猜测。

您不能将数据保存在数组中,因此您必须描述问题的中心。我猜您有一个包含格式化数据的工作表,并且您会不时收到一个包含新数据的 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 问题,但我认为您首先遇到了设计问题。

祝你好运。

于 2012-12-01T11:47:33.133 回答