返回列表 上一主題 發帖

[發問] excel VBA 函數-垂直搜尋相對應列的值

[發問] excel VBA 函數-垂直搜尋相對應列的值

各位前輩大家好
小弟最近在使用EXCEL VBA做資料整理

小弟希望在儲存格列中垂直搜尋出相對應列的值(例如:在指定搜尋範圍內, 搜尋第m列的值, 當第m列某行的值等於"欲搜尋的值"時,則回傳第n列同行的值)
目前在網路上只找到VLOOKUP和LOOKUP這兩個函數可以有類似的功能
但VLOOKUP 函數 限制"欲搜尋的值"只能在指定搜尋範圍的第一列
而LOOKUP  函數 "欲搜尋的值"又限制只能以遞增的順序排列

想請問各位前輩除了這兩個函數之外
有沒有其他好用的VBA函數可以有類似的功能
但不會有以上限制的

麻煩各位前輩指導了~~謝謝~~!

回復 1# junkwei
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range
  4.     Set Rng = Sheets("指定工作表").Range("指定範圍").Find("搜尋字串", LookAT:=xlWhole)
  5.     If Not Rng Is Nothing Then MsgBox Rng.Value
  6. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 1# junkwei
附檔舉個你實際遇到的例子&希望的結果,問到的答案會精準的多。。
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 2# GBKEE


GBKEE 版主您好 :

請問一下,若我有多個要搜尋的資料該如何一個一個的取代成其他的值,   

例如a欄到c欄中的『test』取代成『tt』!!

TOP

回復 2# GBKEE

GBKEE 版主您好:
不好意思小弟初學VBA
您的code 小弟還是有些應用上的困難..
因此依stillfish00前輩的建議
將我的問題完整呈現
再麻煩版主撥空指導了...
非常感謝...!!

垂直搜尋.png (21.51 KB)

垂直搜尋.png

TOP

回復 3# stillfish00

stillfish00前輩您好:
不好意思小弟的問題敘述似乎真的不太清楚
因為我原本的目的是打算只問那個函數的名稱
再自己去找函數的相關資訊去應用
不料資質駑鈍....0rz
好像問題敘述的不完全,
前輩們所寫的程式也不見得可以完全應用
下次小弟發文時會特別注意的~!
也感謝前輩的不吝指教~~!

TOP

回復 5# junkwei
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng, Ar, R As Range, i As Integer, ii As Integer
  4.     Ar = Range("A1").CurrentRegion.Value    '資料庫
  5.     i = [MATCH(J1,A1:D1,0)]
  6.     '或直接給 I=3  '數學成績在資料庫的欄位
  7.     Set Rng = Range("H1", Range("H1").End(xlDown)).Resize(, 2)
  8.     For Each R In Rng.Rows
  9.         For ii = 1 To UBound(Ar, 1)
  10.             If R.Cells(1, 1) & R.Cells(1, 2) = Ar(ii, 1) & Ar(ii, 2) Then
  11.                 R.Cells(1, 3) = Ar(ii, 3)
  12.                 Exit For
  13.             End If
  14.         Next
  15.     Next
  16. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 5# junkwei
依5樓圖的問題,最簡單的方法是
在J2填上 =LOOKUP(2,1/((B$1:B$16=H2)*(C$1:C$16=I2)),A$1:A$16)
然後往下填滿公式,
這公式算是比較進階又還蠻常遇到的一個小技巧。

若要用VBA就參考G版的吧~
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復  junkwei
試試看
GBKEE 發表於 2014-12-15 08:12


謝謝GBKEE版主的幫助!!又讓小弟再次見識了一次vba的威力!
不過您原本的code好像欄位有些筆誤
因此小弟有小小修正了一下, 如下所示
供其他有需要的版友參考~~
最後再次感謝您的幫忙~!
  1. Sub CAL2()
  2.     Dim Rng, Ar, R As Range, i As Integer, ii As Integer
  3.     Ar = Range("A1").CurrentRegion.Value    '資料庫
  4.     i = [MATCH(J1,A1:D1,0)]
  5.     '或直接給 i=1  '數學成績在資料庫的欄位
  6.     Set Rng = Range("H1", Range("H1").End(xlDown)).Resize(, 2)   
  7.    
  8.     For Each R In Rng.Rows  
  9.         For ii = 1 To UBound(Ar, 1)
  10.             If R.Cells(1, 1) & R.Cells(1, 2) = Ar(ii, 2) & Ar(ii, 3) Then
  11.                 R.Cells(1, 3) = Ar(ii, 1)
  12.                 Exit For   
  13.             End If
  14.         Next
  15.     Next
  16.    
  17. End Sub
複製代碼

TOP

回復  junkwei
依5樓圖的問題,最簡單的方法是
在J2填上 =LOOKUP(2,1/((B$1:B$16=H2)*(C$1:C$16=I2)),A$ ...
stillfish00 發表於 2014-12-15 16:40


感謝stillfish00前輩的方法~
讓我學到不同且實用的方法~謝謝您~~!
不知道前輩是否方便說明一下您的公式中lookup函數的第二欄
以便小弟日後應用

請問
1/(範圍=欲搜尋值)  是一種固定的語法嗎?
以及
當中的 * 符號  在這裡代表的意義是"且"的意思嗎?

小弟在網路上好像不容易找到相關的說明...@@
不好意思再麻煩前輩指導了!
謝謝~~!

TOP

        靜思自在 : 滴水成河。粒米成蘿,勿輕己靈,勿以善小而不為。
返回列表 上一主題