"Vlookup" and "Match" in VBA
- 帖子
- 65
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- Window 7
- 軟體版本
- 2007
- 閱讀權限
- 20
- 註冊時間
- 2010-5-4
- 最後登錄
- 2012-5-21
|
本帖最後由 am0251 於 2011-6-27 18:14 編輯
謝謝Hsieh大大的出手相助......可是還是不行.........,可以再告訴我,我又錯在哪裡呢?萬二分感謝!- Private Sub Start_Click()
- Dim x As Integer, y As Integer, z As Integer, S1 As Integer, S2 As Integer, myRowCount As Integer
- Dim ShipDate As Double
- Dim ItemName As String
- z = 2
- myRowCount = Range("A1").CurrentRegion.Rows.Count
- ShipDate = Format(Calendar1.Value, "d-mmm-yy")
- For i = 2 To myRowCount
- ItemName = Worksheets("Sheet1").Range("A" & z).Value
- x = Application.Match(ItemName, Sheet2.Range("A1:A" & myRowCount), 0)
- y = Application.Match(ShipDate, Sheet2.[B1:AF1], 0)
- S1 = Workbooks("Book1").Worksheets("Sheet2").Cells(x, y).Value
- S2 = Workbooks("Book1").Worksheets("Sheet1").Cells(z, 2).Value
- S1 = S1 + S2
- z = z + 1
- Next i
- Unload Me
- MsgBox "Done"
- End Sub
複製代碼 |
|
50 字節以內
不支持自定義 Discuz! 代碼
|
|
|
|
|
- 帖子
- 65
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- Window 7
- 軟體版本
- 2007
- 閱讀權限
- 20
- 註冊時間
- 2010-5-4
- 最後登錄
- 2012-5-21
|
23#
發表於 2011-6-27 14:03
| 只看該作者
是這樣的,我的設計是想把"SHEET1"的資料按日期,名稱,每頁的名稱,放到對應的位置,可惜功力不夠,千差萬錯,希望各位高手指點一下~~謝謝!!
test.rar (30.27 KB)
|
|
50 字節以內
不支持自定義 Discuz! 代碼
|
|
|
|
|
- 帖子
- 65
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- Window 7
- 軟體版本
- 2007
- 閱讀權限
- 20
- 註冊時間
- 2010-5-4
- 最後登錄
- 2012-5-21
|
25#
發表於 2011-6-28 11:41
| 只看該作者
完美的解決~~!!不過可以再教我多一個功能嗎?就是想每次把資料送到目標位置時不用"="而是相加,例如,"SHEET1" 的"AAA"的資料是"1",但目標位置本來就有"2"的話,運作之後就可以變成"3",那就是我的目了..謝謝!! |
|
50 字節以內
不支持自定義 Discuz! 代碼
|
|
|
|
|
- 帖子
- 38
- 主題
- 19
- 精華
- 0
- 積分
- 84
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office 2007
- 閱讀權限
- 20
- 性別
- 男
- 來自
- taichung
- 註冊時間
- 2011-7-6
- 最後登錄
- 2022-3-29
|
27#
發表於 2011-7-12 11:38
| 只看該作者
|
|
|
|
|
|
- 帖子
- 56
- 主題
- 8
- 精華
- 0
- 積分
- 81
- 點名
- 0
- 作業系統
- Window7
- 軟體版本
- OFFICE2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2011-6-25
- 最後登錄
- 2016-1-17
|
28#
發表於 2011-7-17 01:31
| 只看該作者
看了上面的帖子,對於函數使用於VBA 還是一知半解
不知可否將常用的函數組合運用於 VBA 呈現,配合自定義函數使用
但應該是對於資料形態還不了解,再加上函數的寫法更是剛用
所以寫了一個應該是錯誤不少,改了數次都亂了譜
如附件,希望有先進可以協助一下看是否可行
函數組合為
=IF(ISNA(VLOOKUP($A2,設備清單!$A$1:$B$20,MATCH(D$1,設備清單!A$1:B$1,0),0)),"無設備資料",(VLOOKUP($A2,設備清單!$A$1:$B$20,MATCH(D$1,設備清單!A$1:B$1,0),0)))
希望呈現
=vlmatch($A2,E$1,無設備資料,設備清單!$A$1:$B$20,設備清單!$A$1:$B$1)
vlmatch 為自定義函數,只需輸入 $A2,E$1,無設備資料,設備清單!$A$1:$B$20,設備清單!$A$1:$B$1即可
改了數次,最後錯誤,寫了如下- Public Function VLMatch(tt$, KK$, NN$, DALL As Range, dt As Range) As String
- Dim i%, j$, k As Boolean
- i = Evaluate("Match(kk, dt, 0)")
- j = Evaluate("VLookup(tt, DALL, i, 0)")
- k = Evaluate("IsNA(j)")
- If k = False Then
- VLMatch = NN
- Else
- VLMatch = j
- End If
-
- End Function
複製代碼
自定義函數 VLOOK+Match.rar (108.68 KB)
|
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
29#
發表於 2011-7-17 08:45
| 只看該作者
回復 28# Happkkevin - Public Function VLMatch(tt$, KK$, NN$, DALL As Range, dt As Range) As String
- 'Match 找到值則傳回數字,沒找到值則傳回錯誤值
- 'VLookup 找到傳回字串,沒找到傳回錯誤值
- Dim i As Variant, j As Variant '變數需設定為Variant資料型態
- 'Variant資料型態是所有沒被明確宣告為任一其他型態
- i = Application.Match(KK, dt, 0) 'vba中使用工作表函數-> Application.工作表函數
- '請看vba中可使用的工作表函數
- j = Application.VLookup(tt, DALL, i, 0)
- '*** Evaluate("VLookup(tt, DALL, i, 0)")=[VLookup(tt, DALL, i, 0)]
- '不接受變數 tt, DALL, i ***
- If IsError(j) Then 'j傳回錯誤值
- VLMatch = NN
- Else: 'j傳回字串
- If j = "" Then VLMatch = NN Else VLMatch = j
- End If
- End Function
複製代碼 |
|
|
|
|
|
|
- 帖子
- 56
- 主題
- 8
- 精華
- 0
- 積分
- 81
- 點名
- 0
- 作業系統
- Window7
- 軟體版本
- OFFICE2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2011-6-25
- 最後登錄
- 2016-1-17
|
30#
發表於 2011-7-17 11:58
| 只看該作者
本帖最後由 Happkkevin 於 2011-7-17 12:00 編輯
回復 Happkkevin
GBKEE 發表於 2011-7-17 08:45 
GBKEE 版大,真的是太厲害囉
每每我花了許久時間修正只要經過此處先進的指導
不只問題解決,更讓我學到許多
至於VBA可用函數之前我沒有確認只是 if 發生問題才處理
說明中 我的軟體關於 vlookup 與 match 沒有說明,但我想應該是與函數相同
感謝你的指導
修正為你的語法加上修正 NN輸入""即符合我的需求
=vlmatch($A2,E$1,"無設備資料",設備清單!$A$1:$B$20,設備清單!$A$1:$B$1) |
|
|
|
|
|
|