2017-08-17 70 views
-1

我有一個需要轉換爲父 - 子列表的文章的Excel列表。每篇文章具有相同的MPN和/或相同的名稱,例如,大小或顏色是不同的。 名單如下:有條件複製Excel中的行

MPN  name size 
1  foo S 
1  foo M 
1  foo L 
2  bar S 
2  bar M 
2  bar XL 

我插入的cols ID和PID自己,爲了能夠實現以下列表:

ID pID MPN  name size 
1  1  foo 
2 1 1  foo S  
3 1 1  foo M 
4 1 1  foo L 
5  2  bar 
6 5 2  bar S 
7 5 2  bar M 
8 5 2  bar L 
9 5 2  bar XL 

因此,對於具有相同MPN所有行(或名稱),複製塊上面的第一行,並將新行的ID放入包含相同MPN的以下行的pID列中。

ID實際上是一個字符串,所以它們不必是順序的。如果it's更容易實現,像...

ID pID MPN  name size 
1  1  foo 
1S 1 1  foo S 
1M 1 1  foo M 
1L 1 1  foo L 

...對我的作品也基本上CONCATENATE()PID和大小。

這樣的事情可以用VBA來完成嗎?

+1

如果你的問題確實是「*這樣的事情可以使用VBA?*」,那麼答案是「是」。但我認爲這不符合你的預期。但是如果你希望得到更具體的答案,那麼你需要展示你已經試過的東西(你的代碼)並向它提出更具體的問題,因爲沒有人可以爲你編寫代碼。另外考慮一下,如果Excel是正確的工具,因爲你可能會考慮一個真正的數據庫。 –

+0

像@Peh說的那樣,VBA是可行的,但你必須先嚐試一下。作爲一個起點,看看'FOR'循環 – Zac

+0

Jup,可能值得這樣;-)我實際上並不知道VBA來自PHP世界,我唯一試過的就是過濾器和查找。列表超過1000+長...累人:D –

回答

0
Sub ConditionallyDuplicateRows() 
Dim lRw As Long 

Application.ScreenUpdating = False 

Range("B1").EntireColumn.Insert 
Range("A1").EntireColumn.Insert 

Range("A1").Value = "ID" 
Range("B1").Value = "pID" 
Range("C1").Value = "MPN" 

lRw = Range("B" & Rows.Count).End(xlUp).Row - 1 

For i = lRw To 1 Step -1 
    If Range("B" & i).Value <> Range("B" & i + 1).Value Then 
     Range("B" & i).Offset(1).EntireRow.Insert 
     'New MPN 
     Range("B" & i).Offset(1, 1).Value = Range("B" & i + 2).Value 
     'New Name 
     Range("B" & i).Offset(1, 2).Value = Range("B" & i + 2).Offset(, 2).Value 

     Range("B" & i).Offset(2, 1).Value = Range("B" & i).Offset(2).Value 
    Else 
     Range("B" & i).Offset(1, 1).Value = Range("B" & i + 1).Value 
    End If 
Next i 

lRw = Range("C" & Rows.Count).End(xlUp).Row 

With Range("A2:A" & lRw) 
    .Formula = "=C2&E2" 
    .Value = .Value 
End With 

Application.ScreenUpdating = True 

End Sub 
+0

(1)我不建議使用Option Explicit並聲明**所有**變量。 (2)同樣在生產環境中,應該使用工作表來訪問'Range'和'Rows'等,例如。比如'Worksheets(「Sheet1」)。Range(「A1」)...'否則它可能需要錯誤的工作表。 –

+0

謝謝!我用我們的一些列表對它進行了測試,但是由於我這個不好的例子,昨天我試圖找出一些小事情。我不是VBA afficionado,所以沒有任何工作;-)問題:首先我需要複製整行,而不是填充單個單元格。其次,MPN必須與ID/pID不同,更像是一個計數器,理想情況下帶有偏移量。而一些製造商即使名稱不同(顏色作爲名稱的一部分)也具有相同的MPN。那些需要獲得自己的ID(唯一父母)。 –