返回列表 上一主題 發帖

"Vlookup" and "Match" in VBA

謝謝指教~~!!感覺功力提昇了不小!!
50 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 GBKEE 於 2011-6-23 13:46 編輯

回復 8# am0251
Sub test()
Dim x As Integer
Dim y As Integer
Dim z As Integer
Dim ItemName As String
z = 2
Do While Range("A" & z).Value <> ""
'ItemNam = Worksheets("Sheets1").Range("A" & z).Value       '你的附檔中沒有Sheets1工作表
'x = Evaluate("MATCH(""ItemNam"",Sheet(Sheets2)!A:A,0)")    你的附檔中沒有Sheets2工作表
'x = Application.WorksheetFunction.Match(Worksheets("Sheets1").Range("A" & z).Value, Sheets("Sheets2").Range("A:A")) '如上的錯誤
ItemNam = Worksheets("Sheet1").Range("A" & z).Value
x = Evaluate("MATCH(""" & ItemNam & """,Sheet2!A:A,0)")   'ItemNam是變數要用&來連接
x = Application.WorksheetFunction.Match(Worksheets("Sheet1").Range("A" & z).Value, Sheets("Sheet2").Range("A:A"))
Debug.Print x, y
z = z + 1
Loop
End Sub

TOP

本帖最後由 am0251 於 2011-6-23 15:03 編輯

如果我想把變數"y"的值等於,我的UserFrom 內的 Calendar 的值,可是我寫了"y = Calendar1.Value"出來的結果是"1/六月/2011 ",我的屬性已經改"英文(簡短)"的了,要在哪裡可以改成"1-Jun-11"呢?
因為我要把"x" "y"變成Cells(x,y)的痤標,"x"就是ItemName,"y"就是日期,如B2="1-Jun-11"; C2="2-Jun-11"............有可能做的到嗎?
50 字節以內
不支持自定義 Discuz! 代碼

TOP

y = Format(Calendar1.Value, "d-mmm-yy")
MsgBox y

TOP

不好意思......我又失敗了...... Book1.rar (22.21 KB)
50 字節以內
不支持自定義 Discuz! 代碼

TOP

Cells(x, y)裡面的x,y都必須是數字
不能是日期。

TOP

本帖最後由 am0251 於 2011-6-24 15:36 編輯

謝謝指點,已改好了,可是.......還是不行......... Book1.rar (23.12 KB)

Book1.rar (23.12 KB)

50 字節以內
不支持自定義 Discuz! 代碼

TOP

剛好有利用到~~感謝oobird
Private Sub CommandButton1_Click()
Dim x As Integer, y As Integer, z As Integer, ItemName As String
z = 6
Do While Range("N" & z).Value <> ""
ItemNam = Sheet3.Range("N" & z).Value
Sheet3.Range("S" & z).Value = Application.VLookup(ItemNam, Sheet4.[A1:B29], 2, 0)
z = z + 1
Loop

End Sub

TOP

本帖最後由 am0251 於 2011-6-25 14:39 編輯

不好意思,小的沒看懂....這是我的程序
  1. Private Sub Start_Click()

  2. Dim x As Integer, y As Integer, z As Integer, S1 As Integer, S2 As Integer, myRowCount As Integer
  3. Dim ShipDate As Date
  4. Dim ItemName As String

  5. z = 2

  6. myRowCount = Range("A1").CurrentRegion.Rows.Count

  7. ItemName = Worksheets("Sheet1").Range("A" & z).Value

  8. ShipDate = Format(Calendar1.Value, "d-mmm-yy")

  9. For i = 2 To myRowCount

  10. x = Application.Match(ItemName, Sheet2.["A1", "A" & myRowCount], 0)
  11. y = Application.Match(ShipDate, Sheet2.[B1:AF1], 0)


  12. S1 = Workbooks("Book1").Worksheets("Sheet1").Cells(z, 2).Value
  13. S2 = Workbooks("Book1").Worksheets("Sheet2").Cells(x, y).Value

  14. S2 = S2 + S1

  15. z = z + 1

  16. Next i

  17. Unload Me

  18. MsgBox "Done"

  19. End Sub
複製代碼
50 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 Hsieh 於 2011-6-25 18:51 編輯

回復 19# am0251
x = Application.Match(ItemName, Sheet2.["A1", "A" & myRowCount], 0)
這是錯誤語法,改為
x = Application.Match(ItemName, Sheet2.Rnage("A1:A" & myRowCount), 0)

日期在工作表內被視為Double資料型態
所以應宣告為
Dim ShipDate As Double
這樣你的y值才會找的到
學海無涯_不恥下問

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題