![](/img/trans.png)
[英]Sort array of objects based on values in another array that correspond to specific properties
[英]the listing of values in a column that correspond to a specific value in another column in excel
源数据采用以下格式
A B
1 0
2 0
4 1
5 0
6 0
8 1
我原本打算在A列中列出缺失的项目,但是由于那对我来说还算不上什么,因此我打算通过我现在建议的方法实现同样的目的。
我想要的是一份清单
C
3
7
本质上是通过使用B列中提供的值为我提供了序列的缺失编号。但是,基本上任何可以为我提供C列中列出的值的解决方案都是不胜感激的。
应该注意的是,我正在处理大量清单,因此手动过滤等不是可取的。
在单元格G4中,输入要查找的地址,例如A2:A5 ,然后使用下面的数组公式。 唯一的假设是数字列表应从1开始。 我知道公式看起来很疯狂。 必须将此公式应用于范围,因此选择一个范围,然后转到地址栏粘贴此公式并按CTRL + SHIFT + ENTER 。 在此特定情况下,范围必须为圆柱形状。
我将公式保留为未格式化的文本,因此更易于复制。
= IF(INT(SQRT(MMULT((IF(TRANSPOSE(MMULT(INDIRECT(G4),1 + 0 * TRANSPOSE(ROW(INDIRECT(“ 1:”&MAX(INDIRECT(G4)))))))= MMULT( ROW(INDIRECT(“ 1:”&MAX(INDIRECT(G4)))),1 + 0 * TRANSPOSE(ROW(INDIRECT(“ 1:”&COUNTA(INDIRECT(G4)))))),0,ROW(INDIRECT( “ 1:”&MAX(INDIRECT(G4)))))^ 2),1 + 0 * ROW(INDIRECT(“ 1:”&COUNTA(INDIRECT(G4)))))/ COUNTA(INDIRECT(G4))))) = SQRT(MMULT(((IF(TRANSPOSE(MMULT(INDIRECT(G4),1 + 0 * TRANSPOSE(ROW(INDIRECT(“ 1:”&MAX(INDIRECT(G4))))))))= MMULT(ROW(INDIRECT( “ 1:”&MAX(INDIRECT(G4)))),1 + 0 * TRANSPOSE(ROW(INDIRECT(“ 1:”&COUNTA(INDIRECT(G4))))))),0,ROW(INDIRECT(“ 1:” &MAX(INDIRECT(G4)))))^ 2),1 + 0 * ROW(INDIRECT(“ 1:”&COUNTA(INDIRECT(G4)))))/ COUNTA(INDIRECT(G4))),SQRT(MMULT( (IF(TRANSPOSE(MMULT(INDIRECT(G4),1 + 0 * TRANSPOSE(ROW(INDIRECT(“ 1:”&MAX(INDIRECT(G4))))))))= MMULT(ROW(INDIRECT(“ 1:”&MAX (INDIRECT(G4)))),1 + 0 * TRANSPOSE(ROW(INDIRECT(“ 1:”&COUNTA(INDIRECT(G4))))))),0,ROW(INDIRECT(“ 1:”&MAX(INDIRECT(G4 )))))^ 2),1 + 0 * ROW(INDIRECT(“ 1:”&COUNTA(INDIRECT(G4)))))/ COUNTA(INDIRECT(G4))),“”)
该公式可以理解为
=IF(INT(A)=A,A, "")
A在哪里
SQRT(MMULT((IF(TRANSPOSE(MMULT(INDIRECT(G4),1+0*TRANSPOSE(ROW(INDIRECT("1:"&MAX(INDIRECT(G4)))))))=MMULT(ROW(INDIRECT("1:"&MAX(INDIRECT(G4)))),1+0*TRANSPOSE(ROW(INDIRECT("1:"&COUNTA(INDIRECT(G4)))))),0,ROW(INDIRECT("1:"&MAX(INDIRECT(G4)))))^2),1+0*ROW(INDIRECT("1:"&COUNTA(INDIRECT(G4)))))/COUNTA(INDIRECT(G4)))
如果不需要B
列(可以从A
进行计算),假设您有名为worksheet1
数据,则将所有缺少的值写入C
列的VBA子代码如下:
Sub worksheet1c()
'this contains the position in column A
Dim i As Integer
'this contains the position in column C
Dim j As Integer
'the numbers from 1
Dim number As Integer
'initialization
i = 1
j = 1
number = 1
'check all numbers in column A from row 2
Do While Sheets("worksheet1").Cells(i, 1).Value <> ""
'if there is a difference between number and the value in cell write them to column C
Do Until number = Sheets("worksheet1").Cells(i, 1).Value
Sheets("worksheet1").Cells(j, 3).Value = number
j = j + 1
number = number + 1
Loop
i = i + 1
number = number + 1
Loop
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.