2012-09-11 44 views
2

我有一个电子表格,它有2列,第一个是唯一标识符,第二个是由'|'描绘的列表。被分配到该案件的人的性格。我正在尝试编写一个使用文本到列的宏来将第二列分解为多个列,然后将它们全部使用相应的标识符复制到原始列的底部。我正在处理大约46,000行,结果会有大约7万个我猜测。一个例子如下:Excel:在变量中存储行号

原始数据

ColumnA ColumnB 
123  Adam | Jill | Bob 
456  Brent | Bob | Betsy | Sam 
789  Matt | Adam | Jill 

所需的数据

ColumnA ColumnB 
123  Adam 
456  Brent 
789  Matt 
123  Jill 
456  Bob 
789  Adam 
123  Bob 
456  Betsy 
789  Jill 
456  Sam 

回答

2

我想这应该做你想要什么:

Sub test() 
    Dim inputRng As Range 
    Set inputRng = ThisWorkbook.Sheets(1).Range("A1") 

    Dim outputRng As Range 
    Set outputRng = ThisWorkbook.Sheets(1).Range("D1") 

    While inputRng.Value <> "" 
     Dim names As Variant 
     names = Split(inputRng.Offset(, 1).Value, "|") 

     For Each nme In names 
      outputRng.Value = inputRng.Value 
      outputRng.Offset(, 1).Value = Trim(nme) 
      Set outputRng = outputRng.Offset(1) 
     Next 

     Set inputRng = inputRng.Offset(1) 
    Wend 
End Sub 

调整inputRng和outpu tRng指向你想要的位置

所有的代码都是在VBA中分割字符串值并遍历该列表,然后向下移动到下一行。它继续前进,直到找到一个空的(Value ==“”)单元格,然后停止。

+0

我想你仍然需要考虑每个'inputRng'行的唯一ID。它需要与每个'outputRng'行关联。 – Brad

+0

谢谢你这么快速的回答......我已经试过了,什么也没得到,但没有错误。我认为我需要做一些与范围不同的事情? 我希望能够通过在点击唯一标识符列上的空行之前计算行数来自动查找范围的大小。我不确定如何实现它。例如: CaseCount = Worksheets(“Sheet1”)。Cells.SpecialCells(xlCellTypeLastCell).Row – Liquidgenius

+0

因为他使用'while'循环,所以不需要显式地找到最后一个单元格。只要数据连续排列,循环就会结束。 – Brad