2017-08-17 6 views
-1

私は、親子リストに変換する必要がある記事のExcelリストを持っています。各記事は、同じMPN、および/または同じ名前のいずれかを持ちます。サイズや色が異なります。私はCOLSのIDを挿入し、次のリストを達成することができるようにするために、自分自身をPIDExcelで条件付きで行を複写する

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

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は実際には文字列なので、連続している必要はありません。それが実現するのが簡単なら...

...は基本的にはCONCATENATE()pIDとサイズで動作します。

VBAでこれを行うことはできますか?

+1

もしあなたの質問が本当に "*これはVBAで*できますか?"と答えると、答えは "はい"です。しかし、私はあなたが期待したものではないと考えています。しかし、より具体的な回答が期待される場合は、誰もあなたのためのコードを書くことができないので、あなたはすでに試したもの(あなたのコード)を表示し、より具体的な質問をする必要があります。また、実際のデータベースを検討する可能性があるため、Excelが適切なツールであるかどうかを考えてください。 –

+0

@Pehと同じように、VBAと併用することができますが、最初に試してみる必要があります。出発点として、 'FOR'ループを見てください。 – Zac

+0

Jup、これに値するかもしれません;-)私は実際にPHPの世界から来ているVBAについての手がかりがなく、私が試した唯一のものはフィルタと参照です。リスト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'を使い、** all **変数を宣言することはほとんどお勧めしません。 (2)また、生産的な環境では、定義されたワークシートを 'Range'や' Rows'などにアクセスするために使うべきです。 ( "Sheet1")Range( "A1")...そうでなければ、間違ったワークシートが取られる可能性があります。 –

+0

ありがとう!私はいくつかのリストでそれをテストしましたが、私の貧弱な例のおかげで、私は昨日自分自身を理解しようとした小さな事がいくつかあります。私はVBA認可ではないので、そのどれもうまくいきませんでした;-)問題:最初に、単一のセルにデータを取り込む代わりに、行全体をコピーする必要があります。第2に、MPNは、理想的にはオフセットを有する、カウンタのようなID/pIDとは異なる必要がある。名前が異なる場合でも(名前の一部として色付けされていても)、同じMPNを持つメーカーもあります。それらは独自のID(一意の親)も取得する必要があります。 –

関連する問題