【问题标题】:Finding non specific values from an array in another array in Excel Vba从Excel Vba中另一个数组中的数组中查找非特定值
【发布时间】:2012-11-19 04:23:32
【问题描述】:

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

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 中的数组 2 数据附加到数组 1 中,反之亦然。对吗?

标签: arrays vba excel


【解决方案1】:

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

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

名称和周列有不同的名称。星期二拼写错误的复杂情况有不同的工作日。

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

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2014-06-29
    • 2011-06-27
    • 2021-06-02
    相关资源
    最近更新 更多