
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