Board logo

標題: [發問] 關於搜尋/比對 的函數寫法,懇請前輩指點 [打印本頁]

作者: chou1203    時間: 2019-1-7 14:28     標題: 關於搜尋/比對 的函數寫法,懇請前輩指點

各位前輩好,有一工作疑問懇請能協助給予建議,如圖片所示:

[attach]29882[/attach]


A欄可以輸入12個號碼(號碼各自不重複),輸入資料後可以從D欄的現有資料中,來查詢C欄相對應的結果,例如:

※ Condition 1:  A欄輸入5,10,15,20,25 ,函數會去搜尋、比對D欄後,代出C欄位資料並顯示於 I2、I3儲存格
   
 I2:得出結果 N01為號碼、次序皆同A欄輸入
 I3:得出結果 N02、N03 號碼皆吻合,僅次序不同


※ Condition 2:  A欄輸入10,20,5,15,25 ,函數去搜尋、比對D欄後,代出C欄位資料並顯示於 I2、I3儲存格
   
 I2:得出結果 查無完全符合,不顯示
 I3:得出結果 N02、N03 號碼皆吻合,僅次序不同


本人只懂非常基礎的函數用法,對於VBA並無琢磨,曾試想用Vlookup,但C、D欄為一個連續的資料庫且會一直新增,有可能此筆新增資料僅5個號碼、下一筆新增資料有12個號碼...
故不清楚該如何製作才能精準的搜尋,這樣的搜尋模式有可能單靠函數即可完成,還是要進階到VBA撰寫呢?懇請各位前輩指導,感謝
作者: chou1203    時間: 2019-1-7 15:32

我想補充請問一下前輩

您們會建議我上面的問題,資料庫維持原先兩列,由上而下增加這樣的新增方式較好
還是改為由左而右的方式較符合搜尋設計的邏輯呢?

[attach]29884[/attach]
作者: ML089    時間: 2019-1-7 15:36

回復 2# chou1203

資料長為ROW
作者: chou1203    時間: 2019-1-7 16:27

回復 3# ML089


感謝版大回覆,我現行工作的檔案是跨資料表搜尋,簡化成上面的問題

我目前工作現行C欄共有約200組目標,D欄號碼已經也近2000列,且一直再增加中,我目前做的方法很笨拙是使用

1.   儲存格I8 :先將A2:A13輸入的資料串成一個連續字串 =A2&A3&A4&A5&A6&A7&A8&A9&A10&A11&A12&A13
2.   指定A16參照I8,每次新增資料後,就複製該字串在D欄查找目標的旁邊
3.   I2搜尋的公式為 :  =VLOOKUP(A16,C2:D146,2,FALSE)

透過比對值確實可以找到目標,但是只能找到完全一樣次序的資料,如果我輸入的號碼雖然相同但次序不同,就找無該筆資料,希望能透過前輩指導,是否能呈現1F的搜尋結果? 感謝

[attach]29887[/attach]

[attach]29888[/attach]
作者: ML089    時間: 2019-1-7 18:17

更改格式比較容易做公式
參考看看

[attach]29889[/attach]
作者: chou1203    時間: 2019-1-7 20:00

回復 5# ML089

非常謝謝版大無私的指導。我先來查看是否能理解,有問題再向您請教。

再次感謝
作者: ML089    時間: 2019-1-8 07:35

本帖最後由 ML089 於 2019-1-8 07:39 編輯

回復 6# chou1203
上面公式思慮不周,已經修正如下
[attach]29897[/attach]

因為上班中無法立即回覆請耐心等候,或請其他大大幫忙
作者: hcm19522    時間: 2019-1-8 14:43

https://blog.xuite.net/hcm19522/twblog/586221119
https://blog.xuite.net/hcm19522/twblog/586221163
作者: chou1203    時間: 2019-1-8 17:55

回復 7# ML089


前輩,非常感謝您,我剛剛測試了一下,直接拿來套用都不成問題,真是太感激。

小弟excel的功力真的沒有辦法以您的思維來建立這公式,可否向您請教P6欄位公式:  [ =IF(AND(O6=O7,SUM((0&B6:M6)^7)=SUM((0&B$1:M$1)^7)),"、"&A6,)&P7  ]陣列

SUM((0&B6:M6)^7)   用0的意義是?    ^7這個在公式裡的的意義為何呢?謝謝

[attach]29901[/attach]
作者: chou1203    時間: 2019-1-8 17:57

回復 8# hcm19522


    感謝前輩的資料,我會再花時間多研究 謝謝 :-)
作者: ML089    時間: 2019-1-8 18:30

回復 9# chou1203

P6欄位公式:  [ =IF(AND(O6=O7,SUM((0&B6:M6)^7)=SUM((0&B$1:M$1)^7)),"、"&A6,)&P7  ]陣列

SUM((0&B6:M6)^7)   用0的意義是?    ^7這個在公式裡的的意義為何呢?
-----------------------------------------------------------------------------------
0的意義?
當空格時無法計算 0&空格為 "0"可以計算,當有數字時  0&99 = "099" 可以計算也是為 99
   
^7這個在公式裡的的意義為何呢?
當儲存個內是不重複數字時,SUM( 5^7,10^7,15^7,20^7,25^7)  =  SUM( 5^7,20^7,25^7,10^7,15^7) 雖然掉換位置但加總後數字會一樣,^7是將數字膨脹拉大距離,避免組和數字加總有同數性。
例如
直接加總無法分辨不同數字
       1+3+5 = 1+2+6 都為9,但數字不同
      
若 ^7 加總後容易分辨不同數字
       1^7+3^7+5^7 = 80313       
       1^7+2^7+6^7 = 280065
作者: chou1203    時間: 2019-1-9 12:00

回復 11# ML089

感謝前輩指導說明,我會再來研究學習,謝謝
作者: handmuch    時間: 2019-1-9 20:03

參考參考

[attach]29915[/attach]

E2: {=IF(C2<>"",AND(OFFSET(D2,,,COUNTA($A$2:$A$13),)=OFFSET($A$2,,,COUNTA($A$2:$A$13),)),"")}

F2: {=IF(C2<>"",SUM(COUNTIF(OFFSET(D2,,,COUNTA($A$2:$A$13),),OFFSET($A$2,,,COUNTA($A$2:$A$13),))),"")}

G2: =IF(C2<>"",AND(E2=FALSE,F2=COUNTA($A$2:$A$13)),"")

J2: {=IFERROR(INDEX($C$2:$C$146,SMALL(IF($E$2:$E$146=TRUE,ROW($C$1:$C$145),""),ROW(A1))),"")}

k2: {=IFERROR(INDEX($C$2:$C$146,SMALL(IF($G$2:$G$146=TRUE,ROW($C$1:$C$145),""),ROW(A1))),"")}
作者: chou1203    時間: 2019-1-10 21:13

回復 13# handmuch


    前輩 非常感謝您的公式,會花時間來了解,感謝您
作者: 准提部林    時間: 2019-1-11 14:10

Sub TEST()
Dim Arr, A, i&, xD, C%, V%, N%, T$(2), s%, ST$(2)
Set xD = CreateObject("Scripting.Dictionary")
For Each A In [A2:A13].Value
    If A <> "" Then xD(A & "") = 1: T(0) = T(0) & A & "_": C = C + 1
Next

Arr = Range([C2], [D65536].End(xlUp)(2))
For i = 1 To UBound(Arr) - 1
    If Arr(i, 1) <> "" Then T(1) = Arr(i, 1): T(2) = ""
    T(2) = T(2) & Arr(i, 2) & "_"
    V = V + xD(Arr(i, 2) & ""): N = N + 1
    If Arr(i + 1, 1) <> "" Or i = UBound(Arr) Then
       If V = C Then s = 2
       If T(2) = T(0) Then s = 1
       If N <> C Then s = 0
       ST(s) = ST(s) & "、" & T(1): V = 0: N = 0
    End If
101: Next i

[I2] = Mid(ST(1), 2)
[I3] = Mid(ST(2), 2)
End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)