![](/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.