从Excel Vba中的另一个数组中的数组中查找非特定值

时间:2012-11-30 22:03:03

标签: arrays vba excel-vba excel

好的我已经做了很多关于这个主题的研究,但我还没有找到答案,所以在这里: 我有一个数据,我收到的订单是不受欢迎的(只有标题,如日期,时间等列和这些标题下的数据)我的目标是从已经手工排序的模板中排序不需要的数据(在另一个工作表中)。我目前的想法是使用这样的东西来指定两个数组:

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的了解并不符合这项任务。我感谢您提供的任何帮助,如果有任何不清楚的地方,请告诉我。

1 个答案:

答案 0 :(得分: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标题是西班牙语。也许在高峰时期有一个公共场所,所以John和Gwen周二到周六工作。也许星期五是新员工的安息日,所以他们周日到周四工作。

您正在考虑使用InputBox让用户选择两个标题序列,但我看不出它是如何工作的。

首先,您可以查看工作表以找到所需的序列。用户无需选择任何内容。

其次,为用户选择CSV文件的名称集和序列意味着宏必须包含所有可能的名称集和序列的列表。那可能吗?由于您声明CSV文件可能包含新标题,我猜不会。

假设两组标题是:

Worksheet: Name   Week  Mon  Tue  Wed  Thu  Fri
 CSV file: Staff  WoY   Sun  Mon  Teu  Wed  Sat

“名称”和“周”列有不同的名称。有不同的工作日,星期二的拼写错误。

您是否有与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问题但我认为您首先遇到了设计问题。

祝你好运。

相关问题