【问题标题】:Excel String - search and ordering with VBAExcel 字符串 - 使用 VBA 搜索和排序
【发布时间】:2015-09-11 13:10:03
【问题描述】:

为我的任务寻找起点。

情况:

我有三个结构相同的 Excel 工作表,其中包含以下列:

|ID|SubID|SubName|Description|Link1|Link2|
|1|1|SubName 1|Desc SubName1|P00001|P00002|
|1|2|SubName 2|Desc SubName2|P00002|P00003|
|2|1|SubName 1|Desc SubName1|P00001|P00002|

这里有一行在一个单元格内包含多个 P 编号:

|3|1|SubName 1|Desc SubName1|P00001,P00002,P00003|P00001,P00002|

我现在想查看 Link1 列,并将这些值与前三列按排序顺序放置到“Link1”工作表中,如下所示:

|P-Number|ID|SubID|SubName|
|P00001|1|1|SubName 1|
|P00001|2|1|SubName 1|
|P00001|3|1|SubName 1|
|P00002|1|2|SubName 2|
|P00002|3|1|SubName 1|
|P00003|3|1|SubName 1|

我想对 Link2 列执行相同的操作,并将值放置到单独的工作表中。

下一步是将新工作表的 P 编号与一个类似于链接的字符串连接起来。这就是我迄今为止的工作。 另一个想法是让 SubName 可点击,并让它跳转到三个工作表之一中的相应名称。

我不确定宏是否是正确的选择,或者数据透视表也可以解决问题。

任何想法都值得赞赏。 谢谢。

更新: 我试图将这个概念合并到我的主宏中,在那里我还处理了上面提到的列。但是,由于我有几个循环贯穿这部分,因此输出行将被列的最后一个 P 编号覆盖。我用这个子:

 Sub PrintArray(Data As Variant, Cl As Range)
    Cl.Resize(UBound(Data, 1), UBound(Data, 2)) = Data
  End Sub

而这需要测试:

PrintArray NewArray, ActiveWorkbook.Worksheets("Link 1").Range("A2")

如何在无需在代码中使用循环的情况下将每个 P 编号“保存”到新工作表中?

【问题讨论】:

    标签: string excel vba pivot


    【解决方案1】:

    数据透视表不能将 1 个单元格拆分为多行,因此 VBA 解决方案的起点是:

    1. 将输入范围加载到数组中 (my_array = Range(...).Value2)
    2. 对于每一行,拆分 Link1 (link_array = Split(my_array(current_row, 5), ","))
    3. 对于每个链接,将链接和其他值附加到结果数组中
    4. 将结果放到工作表中
    5. 对结果范围进行排序

    【讨论】:

      猜你喜欢
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2017-02-09
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多