我想使用 OFFSET 函数将列中的数据增加三倍。但我有一些重复的数据(有时重复次数超过 2 次),我只想将其中一个数据增加三倍,而不是同时增加两个数据,并保留另一个数据。这是我的数据和函数:
=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 是重复的,但我只想对其中一个执行 OFFSET 并保留另一个,所以我希望重复 4 次。
答案1
如果你将这些输入到 B2 和 C2
B2 =IFERROR(如果(AND(A2=A1;B1=3);1;如果(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 开始
子创建DupeTable() r = 1: c = 1 ' 假设:使用 Cells(r,c) 访问 A1 br = 1: bc = c + 1 ' 从哪里开始插入副本,Cells(br,bc) '“B1”(上方)中的值始终为 3 pz = 3 当 Cells(r, c).Value <> "" 时执行 a1 = 单元格(r,c).值 a2 = 单元格(r + 1,c).值 b1=pz 如果 a2 = a1 且 b1 = 3 则 Z=1 别的 如果 a2 = a1 且 b1 < 3 则 Z = 0 别的 Z=3 万一 万一 pz=Z 当 Z > 0 时执行 Cells(br, bc).Value = Cells(r, c).Value ' 从列表中复制一个值 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