1

为我的任务寻找起点。

情况:

我有三个具有相同结构的 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-Number:

|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 编号“保存”到新工作表中?

4

1 回答 1

0

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

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