0

だから...これを行う方法についてかなりの量を検索しましたが、その一部を機能させることはできますが、すべての部分を機能させる方法を理解できないようです

私の初期データは次のようになり、タイトル列の各値に必要な行数がわかります (たとえば、Value1 には 3 行、Value2 には 1 行など)。

Title   Audit Period    Target Count
Value1    2013-Q1                  3
Value2    2013-Q1                  1
Value3    2013-Q2                  3
Value4    2013-Q3                  4
Value5    2013-Q4                  2

VBAを使用して、ボタンをクリックして上記の情報を次のようにフォーマット/入力する方法が必要です。

Title   Audit Period
Value1  2013-Q1
Value1  2013-Q1
Value1  2013-Q1
Value2  2013-Q1
Value3  2013-Q2
Value3  2013-Q2
Value3  2013-Q2
Value4  2013-Q3
Value4  2013-Q3
Value4  2013-Q3
Value4  2013-Q3
Value5  2013-Q4
Value5  2013-Q4

変換されたデータがどこに配置されているかは気にしません...コードは開始データを上書きしたり、結果を別のタブに配置したりできます...または何でも。

ご提供いただけるご支援に感謝いたします。

4

1 に答える 1

2

これを行うための VBA コードを次に示します。シート名と開始範囲のみを変更する必要があります。

Sub MultiplyRows()
    Dim rngSource As Range, rngTarget As Range

    Set rngSource = Sheets("Sheet1").Range("A2")
    Set rngTarget = Sheets("Sheet2").Range("A2")

    While rngSource <> ""
        rngSource.Resize(, 2).Copy rngTarget.Resize(rngSource.Offset(, 2), 2)
        Set rngTarget = rngTarget.Offset(rngSource.Offset(, 2))
        Set rngSource = rngSource.Offset(1)
    Wend
End Sub

または、式のみでこれを行うことができます。

ここに画像の説明を入力

アイデアは、いくつかのヘルパー列を使用してデータをカウントアップして取得することです。詳細には、次のロジックを持つ 3 つのヘルパー列があります。

  • 「ソース行」、列 E: これは、このターゲット行が参照するソース データ内の実際の行です。「列のロジック」は、カウンターの上の行が最大カウントに等しい場合を除き、上の行と同じ数であるということです。したがって、E5 の式は次のとおり=IF(F4=G4,E4+1,E4)です。また、列を「初期化」する必要があります。つまり、私が使用した E4 で:=ROW(A3)+1
  • 最大数: 現在のソース行に必要な行数。F4:=INDEX(C:C;E4)
  • カウント: これはカウンターで、現在のソース行が既にいっぱいになった回数です。ロジックは、この列のソース行が最後の行と異なる場合を除き、上の値を 1 ずつ増やすだけです。G4:=IF(E4<>E3,1,G3+1)

これで、列 E に格納された数値を INDEX 関数の引数として使用するだけで済みます。つまり、この式を H4 から列 I: にコピーします=INDEX(A:A,E4)

これで、必要な行数まで 5 列の数式をコピーするだけで済みます。(行 5 から始まる列 E を下にコピーすることを忘れないでください。列 F:I は行 4 にあります。

于 2013-03-01T20:36:01.813 に答える