Excel字符串 - 使用VBA搜索和排序

时间:2012-07-01 13:27:29

标签: string excel vba pivot

寻找我的任务的起点。

情况:

我有三个具有相同结构的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-Number连接到一个像链接一样工作的字符串。这就是我到目前为止所做的工作。 另一个想法是使SubName可以点击并让它跳转到三个工作表之一的相应名称。

我不确定宏是否是正确的选择,或者Pivot表也可以做到这一点。

任何想法都表示赞赏。 感谢。

更新: 我试图将这个概念合并到我的主宏中,我也处理上面提到的列。但是,由于我有几个循环遍历此部分,输出行将被列的最后一个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-number“保存”到新工作表中?

1 个答案:

答案 0 :(得分:0)

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

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