1

私の仕事の出発点を探しています。

状況:

同じ構造を持ち、とりわけ次の列を含む 3 つの 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 番号を含む行があります。

|3|1|SubName 1|Desc SubName1|P00001,P00002,P00003|P00001,P00002|

ここで、Link1 列を調べて、最初の 3 つの列を並べ替えた順序でこれらの値を「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 をリンクのように機能する文字列と連結することです。それが私がこれまで取り組んできたことです。もう 1 つのアイデアは、SubName をクリック可能にして、3 つのワークシートのいずれかで対応する名前にジャンプさせることです。

マクロが正しい選択なのか、それともピボット テーブルでもうまくいくのかはわかりません。

どんなアイデアでも大歓迎です。ありがとう。

UPDATE : この概念をメイン マクロに組み込み、上記の列も処理しようとしました。ただし、この部分でいくつかのループが実行されているため、出力行は列の最後の 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 番号を新しいシートに「保存」するにはどうすればよいですか?

4

1 に答える 1

0

ピボットテーブルは1つのセルを複数の行に分割できないため、VBAソリューションの開始点は次のようになります。

  1. 入力範囲を配列にロードします(my_array = Range(...).Value2
  2. 行ごとに、Link1を分割します(link_array = Split(my_array(current_row, 5), ",")
  3. リンクごとに、リンクとその他の値を結果配列に追加します
  4. 結果をワークシートに配置します
  5. 結果の範囲を並べ替える
于 2012-07-01T13:54:01.133 に答える