Excel の OFFSET 関数は重複しないデータのみを対象としています

Excel の OFFSET 関数は重複しないデータのみを対象としています

OFFSET 関数を使用して、列のデータを 3 倍にしたいのですが、重複したデータ (2 回以上繰り返される場合もあります) があり、両方ではなく 1 つだけを 3 倍にして、もう 1 つを保持したいのです。データと関数は次のとおりです。

 =OFFSET($A$2,INT((ROWS($A$2:A2)-1)/3),0)
               A
 2      5YJSA3H17EFP49729
 3      5YJSA3H17EFP41128
 4      5YJSA3H17EFP30954
 5      5YJSA3H17EFP30954
 6      5YJSA3H17EFP30212
 7      5YJSA3H17EFP30050

この例では、5YJSA3H17EFP30954 が重複していますが、そのうちの 1 つに対して OFFSET を実行し、もう 1 つを保持したいだけなので、これを 4 回繰り返します。

答え1

これらをB2とC2に入力すると

B2
=IFERROR(IF(AND(A2=A1;B1=3);1;IF(AND(A2=A1;B1<3);0;3));3)

C2
=IFERROR(OFFSET(B2;-1;0)+OFFSET(C2;-1;0);0)

次に、それらを B 列と C 列に入力すると、次の表が作成されます:
B) 同じ行の各項目を列で何回繰り返すか
C) 繰り返し値を選択する A1 オフセット行。

さて、これを数式で実現するのは不可能だと思います。

VBAを使用する必要があります。以下は、A1から始まるテーブルを前提として、要求されたテーブルを作成する「サブ」(上記から選択したロジック/数式を使用)です。

サブcreateDupeTable()

  r = 1: c = 1 ' 仮定: Cells(r,c) を使用して A1 にアクセスする場合
  br = 1: bc = c + 1 ' コピーの挿入を開始する場所、Cells(br,bc)

 '「B1」(上記)の値は常に3
  pz = 3

  Do While Cells(r, c).Value <> ""
    a1 = セル(r, c).値
    a2 = セル(r + 1, c).値
    b1 = pz
    a2 = a1 かつ b1 = 3 の場合
      1 = 1 です
    それ以外
      a2 = a1 かつ b1 < 3 の場合
        0 = 0 です
      それ以外
        3 = 3 です
      終了条件
    終了条件

    pz = Z
    Z > 0 の間実行する
      Cells(br, bc).Value = Cells(r, c).Value ' リストから1つの値をコピーします
      Z = Z - 1
      br = br + 1
    ループ

    r = r + 1
  ループ
終了サブ

結果:

     AB
1 5YJSA3H17EFP49729 5YJSA3H17EFP49729
2 5YJSA3H17EFP41128 5YJSA3H17EFP49729
3 5YJSA3H17EFP30954 5YJSA3H17EFP49729
4 5YJSA3H17EFP30954 5YJSA3H17EFP41128
5 5YJSA3H17EFP30212 5YJSA3H17EFP41128
6 5YJSA3H17EFP30050 5YJSA3H17EFP41128
7 5YJSA3H17EFP30954
8 5YJSA3H17EFP30954
9 5YJSA3H17EFP30954
10 5YJSA3H17EFP30954
11 5YJSA3H17EFP30212
12 5YJSA3H17EFP30212
13 5YJSA3H17EFP30212
14 5YJSA3H17EFP30050
15 5YJSA3H17EFP30050
16 5YJSA3H17EFP30050

関連情報