excel – 从一对多的工作表创build一个多对一的工作表

我在Excel中有一张表格,例如:

| Value1 | Data1 | Data1b | 1,3,4,8 | | Value2 | Data2 | Data2b | 2 | | Value3 | Data3 | Data3b | 6,7,8 | 

我想采取这张表,并作出另一个将最后一列分成不同的行,并保持其他数据同步。 所以当第一张纸更新时,第二张也被更新。 如果一个数字被添加到第一个工作表中的最后一列,一个新的行被添加到第二个工作表。

第二张纸应该是这样的:

 | Value1 | Data1 | Data1b | 1 | | Value2 | Data2 | Data2b | 2 | | Value1 | Data1 | Data1b | 3 | | Value1 | Data1 | Data1b | 4 | | Value3 | Data3 | Data3b | 6 | | Value3 | Data3 | Data3b | 7 | | Value1 | Data1 | Data1b | 8 | | Value3 | Data3 | Data3b | 8 | 

更新 :下面是我正在尝试使用的代码。 首先,我有什么最好的办法? 并且正在清理然后重新填充更新第二张纸的正确方法? 最后,如何在更新第一张纸时自动运行?

更新 :唯一仍然不工作的是最后的sorting,有没有人有任何想法,为什么?

 Private FROM_SHEET As String Private TO_SHEET As String Private START_ROW As Long Private NUM_COL As Long Sub oneToMany() FROM_SHEET = "Sheet1" TO_SHEET = "Sheet2" START_ROW = 2 NUM_COL = 4 Dim fromSheet As Worksheet Dim toSheet As Worksheet Dim newRow As Long Set fromSheet = Sheets(FROM_SHEET) Set toSheet = Sheets(TO_SHEET) toSheet.UsedRange.ClearContents newRow = START_ROW For i = START_ROW To fromSheet.Cells(fromSheet.Rows.Count, 1).End(xlUp).Row Dim col As String Dim nums() As String col = fromSheet.Cells(i, NUM_COL) nums = Split(col, ",") For Each num In nums fromSheet.Rows(i).Copy toSheet.Rows(newRow) toSheet.Cells(newRow, NUM_COL) = Trim(num) 'Should copy then overwrite? newRow = newRow + 1 Next num Next 'Sort not working toSheet.Range(toSheet.Cells(START_ROW, START_COL), toSheet.Cells(lastRow, lastCol)).Sort _ key1:=toSheet.Range(toSheet.Cells(START_ROW, NUM_COL), toSheet.Cells(lastRow, NUM_COL)), _ order1:=xlAscending, Header:=xlNo End Sub 

在回答你的第一个问题,如果这是表格上唯一的数据位,那么你的clearcontents方法是好的。

自动运行查看Sheet1上的Worksheet_Change事件。 您可以根据更改的单元格进行更改。

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row < 4 And Target.Column < 5 Then Call oneToMany End If 

结束小组