我有一列有關鍵字,另一列有產品名稱,我想將產品名稱與關鍵字相匹配

列A有產品名稱。E列的關鍵字分為1、2和3個單詞。列F有一個目錄名稱。

我希望每次產品名稱與關鍵字匹配時,B欄都填寫目錄名稱。

我已經結束了100.00 0rows,你會怎么做才能讓它變快?使用Arrays?字典?

我試著做嵌套循環,但效率很低,速度也很慢。

此代碼所做的是將第一組關鍵字拆分為單獨的單詞。示例:紅色三菱轉換為:aWord(0):紅色aWord(1):三菱

然后,它將中的第一個產品名稱分隔為單獨的單詞。示例:Red Cool Mitsubishi pWord(0):Red pWord(1):Cool pWord(2):三菱

然后,如果第一個關鍵字的每個單詞在第一個產品的單詞中找到一個相等的單詞,那么我們找到了匹配項。

它將對每個產品名稱執行此操作。一旦完成,它將傳遞到第二組關鍵字,并再次對每個產品名稱執行相同操作,直到完成所有關鍵字。

Sub MatchinKeyWords()
    Dim keyWordsArr, productNameArr
    Dim i As Long, x As Long, N As Long
    Dim keyword, productWord
    Dim matchFound As Boolean
    Dim matchedRows() As Boolean

    ' Load arrays from ranges
    productNameArr = Range("A1").CurrentRegion.Value
    keyWordsArr = Range("D1").CurrentRegion.Value

    ' Initialize the array to track matched rows
    ReDim matchedRows(LBound(productNameArr, 1) To UBound(productNameArr, 1))
    For i = LBound(matchedRows) To UBound(matchedRows)
        matchedRows(i) = False
    Next i

    ' Iterate over keyWordsArr
    For i = LBound(keyWordsArr, 1) + 1 To UBound(keyWordsArr, 1)
        keyword = Split(keyWordsArr(i, 1))

        ' Check against each productNameArr
        For x = LBound(productNameArr, 1) + 1 To UBound(productNameArr, 1)
            ' Skip if this productNameArr row was already matched
            If matchedRows(x) Then GoTo NextProduct

            productWord = Split(productNameArr(x, 1))
            matchFound = True

            ' Check each keyword
            For N = LBound(keyword) To UBound(keyword)
                If IsError(Application.Match(keyword(N), productWord, 0)) Then
                    matchFound = False
                    Exit For
                End If
            Next N

            ' If match is found
            If matchFound Then
                productNameArr(x, 2) = keyWordsArr(i, 2) ' Fill in the match info
                matchedRows(x) = True ' Mark this row as matched
            End If

NextProduct:
        Next x
    Next i

    ' Print updated productNameArr to the worksheet
    Range("A1").Resize(UBound(productNameArr, 1), UBound(productNameArr, 2)).Value = productNameArr
End Sub

? 最佳回答:
  • 為了節省時間,請在Dictionary對象中組織關鍵字。
  • 注意:關鍵字表與您的略有不同。

For example,

第一步是組織關鍵詞。對于任何包含“CAR”的產品名稱,它應該只使用前兩個關鍵字進行驗證。

objDic("CAR")是一個嵌套的字典對象,包含兩個項。

  • [關鍵字:三菱RED CAR,值:三菱]
  • [關鍵字:現代UGLY CAR,值:現代]
Key Words Catalogue
MITSUBISHI RED CAR MITSUBISHI
HYUNDAI UGLY CAR HYUNDAI
FAST SPEED

Option Explicit

Sub Demo()
    Dim objDic As Object, rngData As Range
    Dim i As Long, j As Long, sKey As String
    Dim arrData, arrKW, vProd, vWord, vKey, aKey
    Dim bMatch As Boolean
    Set objDic = CreateObject("scripting.dictionary")
    ' Load key words into Dict
    arrKW = Range("D1").CurrentRegion
    For i = LBound(arrKW) + 1 To UBound(arrKW)
        sKey = arrKW(i, 1)
        For Each vKey In Split(arrKW(i, 1))
            If objDic.exists(vKey) Then
                objDic(vKey)(sKey) = arrKW(i, 2)
            Else
                Set objDic(vKey) = CreateObject("scripting.dictionary")
                objDic(vKey)(sKey) = arrKW(i, 2)
            End If
        Next
    Next i
    ' Load product name
    Set rngData = Range("A1").CurrentRegion
    arrData = rngData.Value
    ' Loop through products
    For i = LBound(arrData) + 1 To UBound(arrData)
        sKey = arrData(i, 1)
        ' Check each words in product name
        For Each vProd In Split(arrData(i, 1))
            If objDic.exists(vProd) Then
                ' Matching related key words
                For Each vKey In objDic(vProd).Keys
                    bMatch = True
                    For Each vWord In Split(vKey)
                        If InStr(1, sKey, vWord, vbTextCompare) = 0 Then
                            bMatch = False
                            Exit For
                        End If
                    Next
                    ' Fully matching
                    If bMatch Then
                        arrData(i, 2) = objDic(vProd)(vKey)
                        Exit For
                    End If
                Next
            End If
        Next
    Next i
    rngData.Value = arrData
End Sub


順便說一句,如果你應用與上一篇文章中相同的邏輯來組織具有更多單詞的關鍵字作為字典關鍵字,這可以為大型數據集節省更多時間。

使用VBA計算產品名稱中重復次數最多的3個單詞

主站蜘蛛池模板: 美女视频免费看一区二区| 视频一区视频二区日韩专区| 无码国产精品一区二区免费虚拟VR| 麻豆果冻传媒2021精品传媒一区下载| 亚洲av片一区二区三区| 在线观看亚洲一区二区| 好湿好大硬得深一点动态图91精品福利一区二区 | 精品乱人伦一区二区| 精品久久久久久无码中文字幕一区| 99久久精品费精品国产一区二区| 国产一区二区三区四| 国产精品无码一区二区三区在| 亚洲福利一区二区三区| 日本内射精品一区二区视频| 中文字幕在线观看一区二区三区| 福利一区二区视频| 国产美女露脸口爆吞精一区二区| 国产怡春院无码一区二区 | 国产精品第一区第27页| 国产精品综合一区二区三区| av一区二区三区人妻少妇| 加勒比无码一区二区三区| 亚洲国产AV一区二区三区四区| 亚洲AV无码国产精品永久一区| 波多野结衣久久一区二区| 中文无码一区二区不卡αv| 亚洲日韩国产欧美一区二区三区 | 亚洲色精品vr一区二区三区| 99久久精品国产高清一区二区| 国产午夜福利精品一区二区三区 | 亚洲国产综合无码一区二区二三区| 国产成人av一区二区三区在线 | 天海翼一区二区三区高清视频| 国产SUV精品一区二区四| 日韩三级一区二区三区| 国产福利电影一区二区三区,亚洲国模精品一区 | 成人丝袜激情一区二区| 后入内射国产一区二区| 午夜福利国产一区二区| 亚洲一区二区三区偷拍女厕| 秋霞无码一区二区|