-1

特定の列の一意の値に基づいて、1 つのワークシートを複数のワークシートに分割するマクロ (Jerry Beaucaire の厚意により提供) を見つけました。これはうまくいきます。でも...

クライアントは異なる形式のワークシートを提供しましたが、必要な形式にするには、穏やかなマッサージが必要です。

まず、JB のコードのスニペットをお見せしましょう。

MyArr = Application.WorksheetFunction.Transpose _
    (ws.Columns(iCol).SpecialCells(xlCellTypeConstants))

私が知る限り (そして私は完全な VB 初心者なので、何を知っているのでしょうか..??)、これにより、選択された行の値が配列に入力されます。

この:

For Itm = 2 To UBound(MyArr)

    ...(code removed)

    ws.Range("A" & TitleRow & ":A" & LR).EntireRow.Copy _
        Sheets(MyArr(Itm) & "").Range("A1")


    ...(code removed)

Next Itm

...コピーを行うようです。

大丈夫。...今のところ大丈夫です。

問題は、プロセスにステップを追加する必要があることです。これは説明が難しいでしょう。我慢してください...

タイトル行は行 1

データは行 2 から始まります

各行には 9 つの列があります。

colA: 識別子

colB-colD: x、y、z 値 (アイテムの上部)

colE-colG: x、y、z 値 (項目の下部)

colH および colI: 無視できます

これらの x、y、および z 値は、3D モデリング プログラムで線をプロットするために使用されるポイントを定義するために使用されます。ワークシートの各行は実際には行を定義します (まあ... 開始点と終了点 - 「上」と「下」) 残念ながら、受け取ったデータ (ワークシート) は各行に対して 2 つのデータセットを定義します - 両方始点は同じでも終点は違う。別の言い方をすれば、行 3 と 4 から始めて、列 BD のデータは両方の行で同じです。これは、5 行目と 6 行目、7 行目と 8 行目などに適用されます。

必要なのは一連のデータ POINTS だけなので、列 EG の値を安全に使用できます。
ただし...ここで助けが必要です... 新しく作成されたワークシートの最初の行が、行 2 の列 BD の値から始まる必要があります。(つまり、終点を座標として使用できますが、それでも最初の始点が必要です) 残りはそのままで問題ありません。

例えば:

ソース データ:

   | | あ | ビ | シー | D | え | ふ | ガ |
 1 | ID | クロストップ | y トップ | Z トップ | x-底 | y 底 | z ボトム |
 2 | H1 | 101.2 | 0.525 | 54.25 | 110.25 | 0.625 | 56.75 |
 3 | H1 | 110.25| 0.625 | 56.75 | 121.35 | 2.125 | 62.65 |
 4 | H1 | 110.25| 0.625 | 56.75 | 134.85 | 3.725 | 64.125 | B、C、D 行 3 と同じ
 5 | H1 | 134.85| 3.725 | 64.125| 141.25 | 4.225 | 66.75 |
 6 | H1 | 134.85| 3.725 | 64.125| 148.85 | 5.355 | 69.85 | B、C、D 行 5 と同じ

必要なもの:

   | | あ | ビ | シー | D | え | ふ | ガ |
 1 | ID | クロストップ | y トップ | Z トップ | x-底 | y 底 | z ボトム |
 2 | H1 | | | | | | | 101.2 | 0.525 | 54.25 |
 3 | H1 | 101.2 | 0.525 | 54.25 | 110.25 | 0.625 | 56.75 |
 4 | H1 | 110.25| 0.625 | 56.75 | 121.35 | 2.125 | 62.65 |
 5 | H1 | 110.25| 0.625 | 56.75 | 134.85 | 3.725 | 64.125 |
 6 | H1 | 134.85| 3.725 | 64.125| 141.25 | 4.225 | 66.75 |
 7 | H1 | 134.85| 3.725 | 64.125| 148.85 | 5.355 | 69.85 |

だから...これを行うための最良の方法は何ですか? この操作を実行するために既存のマクロに追加できますか? もしそうなら、配列を変更した方が良いですか? ...コピー ルーチンを変更した方が良いですか? ...そしてどうやって??

ご協力いただきありがとうございます。手動で行うことはお勧めしません。解析する行が 70,000 行以上あります。

さらに情報が必要な場合は、お知らせください。

4

1 に答える 1

0

完全なマクロは、この場所で誰でも無料で利用できます

接続ポイントを達成するには、次の追加が必要です。

For Itm = 2 To UBound(MyArr)

    ...(code removed)

    ws.Range("A" & TitleRow & ":A" & LR).EntireRow.Copy _
      Sheets(MyArr(Itm) & "").Range("A1")
    Sheets(MyArr(Itm) & "").Rows(2).Insert xlShiftDown
    Sheets(MyArr(Itm) & "").Range("E2").Resize(, 3).Value = Sheets(MyArr(Itm) & "").Range("B3").Resize(, 3).Value

    ...(code removed)

Next Itm
于 2012-02-08T00:08:33.663 に答える