簡體   English   中英

VBA-匹配范圍以查看單元格值是否在數組中

[英]VBA - Match range to see if cell value is in array

ISOmatch包含數組sISO和sISOnew中的所有值。 我正在從一個文件中復制大約200個不同工作簿中的值。 ISOmnatch是陣列中所有ISO代碼的一列。

我試圖讓它遍歷每本書,復制一個值,找到ISO匹配項並粘貼該值,然后移至下一本書,找到iso匹配項,等等。

這是到目前為止我編寫的代碼。 我遇到的主要問題是如何檢測是否存在匹配項,例如“如果cell.value = sISO()或sISOnew()然后”。 我不太確定如何實現嵌入式excel匹配功能,或者甚至更容易實現。

    Sub NTSDM_Econ()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim isoWF, isoNWF As String
Dim sISO As Variant
Dim sISOnew As Variant

isoWF = "J:\Washington\Groups\CIG\GRS\Workfiles\"
isoNWF = "J:\Washington\Groups\CIG\GRS\Workfiles\New Countries\"

sISO = Array( _
"AFG", "AGO", "ALB", "ARE", "ARG", "ARM", "AUS", "AUT", "AZE", "BDI", "BEL", "BFA", "BGD", _
"BGR", "BHR", "BIH", "BLR", "BOL", "BRA", "BTN", "BWA", "CAN", "CHE", "CHL", "CHN", _
"CIV", "CMR", "COG", "COL", "CRI", "CUB", "CYP", "CZE", "DEU", "DNK", "DOM", "DRC", "DZA", _
"ECU", "EGY", "ESP", "EST", "FIN", "FRA", "GAB", "GBR", "GEO", "GHA", "GIN", "GNQ", "GRC", _
"GTM", "HKG", "HND", "HRV", "HUN", "IDN", "IND", "IRL", "IRN", "IRQ", "ISL", "ISR", "ITA", _
"JOR", "JPN", "KAZ", "KEN", "KGZ", "KHM", "KOR", "KOS", "KWT", "LAO", "LBN", "LBR", "LBY", _
"LKA", "LSO", "LTU", "LVA", "MAR", "MDA", "MDG", "MEX", "MKD", "MLI", "MMR", "MNE", "MNG", _
"MOZ", "MRT", "MUS", "MWI", "MYS", "NAM", "NCL", "NER", "NGA", "NIC", "NLD", "NOR", "NPL", _
"NZL", "OMN", "PAK", "PAN", "PER", "PHL", "PNG", "POL", "PRI", "PRT", "PRY", "QAT", "ROM", _
"RUS", "SAU", "SDN", "SEN", "SGP", "SLE", "SLV", "SRB", "SSD", "SVK", "SVN", _
"SWE", "SWZ", "SYR", "TGO", "THA", "TJK", "TKM", "TLS", "TTO", "TUN", "TUR", "TWN", "TZA", _
"UGA", "UKR", "URY", "USA", "UZB", "VEN", "VNM", "YEM", "ZAF", "ZMB", "ZWE")

sISOnew = Array( _
"ABW", "AIA", "AND", "ASM", "ATG", "BEN", "BHS", "BLZ", "BMU", "BRB", "BRN", "CAF", "COM", _
"CPV", "CUW", "CYM", "DJI", "DMA", "ERI", "ETH", "FJI", "FSM", "GMB", "GNB", "GRD", "GUF", _
"GUM", "GUY", "HTI", "JAM", "KIR", "KNA", "LCA", "LIE", "LUX", "MAC", "MCO", "MDV", "MHL", _
"MLT", "MTQ", "NRU", "PLW", "PRK", "PSE", "REU", "RWA", "SLB", "SMR", "SOM", "STP", "SUR", _
"SXM", "SYC", "SYC", "TCD", "TON", "TUV", "VCT", "VIR", "VUT", "WSM")

' smaller array used to test
sISO = Array("AFG", "AGO")

For Each ctry In sISO
    For Each Cell In Range("B4:B214")
        If UBound(Filter(sISO, Cell.Value)) > -1 Then

            '' do some stuff

            ActiveWorkbook.Close
        End If
    Next
Next ctry

End Sub

您可以使用Filter()測試項目是否在數組中。 而不是If cell.value = sISO() or sISONew() ,例如, if UBound(Filter(sISO, cell.value)) > -1 or UBound(Filter(sISONew, cell.value)) > -1 then ...應該管用。

您可以使用函數InStr()來查看值是否匹配,但是然后需要將所有值都放在字符串中。 這是代碼中可以做到這一點的部分。 只需確保在進入循環之前填充數組即可

Dim ISOlist As String
Dim i As Long
Dim myVal As String

'Fill the two arrays into one long string with comma-separated values.
'The string need to make sure there is a comma both before and after each value
For i = LBound(sISO) To UBound(sISO)
    ISOlist = ISOlist & "," & sISO(i)
Next
For i = LBound(sISOnew) To UBound(sISOnew)
    ISOlist = ISOlist & "," & sISOnew(i)
Next
ISOlist = ISOlist & ","        'the ending comma is important

        'Get the value that I should test, adding a comma before and after
        myVal = "," & cell.value & ","

        'If cell.Value = sISO() Or sISOnew() Then
        If InStr(myVal, ISOlist) > 0 Then

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM