返回列表 上一主題 發帖

match 搜尋不同工作表可以指定變數嗎?

回復 26# GBKEE


    抓取數值

我是直接改

EE.Activate,激活Sheet去抓取,不知道GBKEE大大是否有更活的方法呢?

TOP

假設 "數值1" 在 "陣列1" 做Match
比對出來是好幾列,那我要怎麼抓出比對後的列數,在B欄的內容?

請參考 第18樓的程式碼
我是直接改
EE.Activate,激活Sheet去抓取,
EGBT 發表於 2015/9/19 18:50

不需 EE.Activate,EE.Select 移動活頁簿的工作表
  1. With EE
  2.    .Range("A1")="XXX"
  3. End With
  4.   
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

match 搜尋不同工作表可以指定變數嗎?

如主題:match 搜尋不同工作表可以指定變數嗎?
假設~
工作表AAA裡面A欄有
AA001
AA002

工作表BBB裡面A欄有
BB001
BB002

工作表CCC裡面想使用MATCH
A1欄為AAA
A2欄為BBB
A3欄為搜尋值(假設為AA001)
A4為MATCH的結果

執行Cells(4, 1) = [MATCH(A3,AAA!A1:A20,0)]
可試出 AA001 在 AAA表中的第1個位置。
若想把當中的AAA!改成變數的方式,請問該如何修改?

例如改成
Cells(4, 1) = [MATCH(A3,Worksheets(Cells(1, 1)A1:A20,0)]
就會出現錯誤了~ 有點煩惱
還望前輩指點迷津,有勞費心了,謝謝

demo match.zip (16.2 KB)

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 32# GBKEE


    WoW...Cool~

但是我還有一個問題...就是 我是比對日期

比對的數值為
2015/1/1

比對的陣列為
2014/12/31
2015/1/2
2015/1/3
...
..
.

Match後面設定 1 找小於 會找到 2014/12/13

但是我設定 -1 找大於 他出現 "溢位" 而不會找到 2015/1/2 ...

問題出在哪裡?

TOP

回復 33# EGBT
  1. Option Explicit
  2. Sub Ex()
  3.    ' Dim I As Integer, AR()  '這樣會溢位
  4.     'Integer 變數係以範圍為 -32,768 到 32,767 之 16 位元 (2 個位元組) 數字的形式儲存
  5.     Dim I As Single, AR()
  6.     'Single (單精度浮點數) 變數係以 IEEE 32 位元 (4 個位元組) 浮點數字的形式儲存,
  7.     '它的範圍在負數的時候是從 -3.402823E38 到 -1.401298E-45,
  8.     '而在正數的時候是從 1.401298E-45 到 3.402823E38。Single 的型態宣告字元為 !。
  9.    
  10.     ReDim AR(1 To Rows.Count)
  11.     AR(Rows.Count) = #1/1/2015#
  12.     I = Application.Match(#2/1/2015#, AR, -1)
  13.     MsgBox I

  14. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 34# GBKEE


    再請問GBKEE大大

Integer範圍為 -32,768 到 32,767 之 16 位元會溢位,

而Single負數的時候是從 -3.402823E38 到 -1.401298E-45

正數的時候是從 1.401298E-45 到 3.402823E38,為什麼Single就不會溢位呢?我還是不太懂這個道理...

ReDim AR(1 To Rows.Count)
    AR(Rows.Count) = #1/1/2015# ' <- 不能寫死,Match就是-1,抓不到的時候才會找大於自己的日期
    I = Application.Match(#2/1/2015#, AR, -1)
    MsgBox I

哈~很感謝GBKEE大大這麼耐心的回覆解答啊~

TOP

回復 34# GBKEE


    例如附檔~

這樣子好像也是 #N/A、錯誤2048 ...哈....可能我還沒辦法領悟GBKEE大大所說的
  1. Sub test()
  2. Dim i, y, x As Single
  3. i = Application.Match("A1", Range("C1:C14"), -1)
  4. Range("B1") = i
  5. y = Application.Match("A2", Range("C1:C14"), -1)
  6. Range("B2") = y
  7. x = Application.Match("A3", Range("C1:C14"), -1)
  8. Range("B3") = x
  9. End Sub
複製代碼

test1.zip (9.57 KB)

如附檔

TOP

G大您好~這兩篇我都有看過了喔~ 不過能理解有限,
大概知道[]中不接受變數的字串,所以把程式碼改成
Private Sub CommandButton1_Click()
Cells(4, 1) = Application.Match(A3, Sheets("AAA").Range("A1:A10"), 0)
End Sub
'目標是透過目前工作表CCC的A3欄資料(AA001),去match工作表AAA中A1~A10符合AA001的位置後,寫在工作表CCC的Cells(4, 1)位置
如此還是會找不到目標喔~ 能幫忙指點嗎~~ 不好意思了

TOP

回復 3# citizen0923
  1. Private Sub CommandButton1_Click()
  2.     'Cells(4, 1) = Application.Match(A3, Sheets("AAA").Range("A1:A10"), 0)
  3.     Cells(4, 1) = Application.Match([A3], Sheets("AAA").Range("A1:A10"), 0)
  4.     Cells(4, 1) = Application.Match(Range("A3"), Sheets("AAA").Range("A1:A10"), 0)
  5. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 信心、毅力、勇氣三者具備,則天下沒有做不成的事。
返回列表 上一主題