如何从 excel 单元格中提取关键字

How to pull keywords from an excel cell

我从事采购工作,我试图查看包含部件号及其描述的单元格列表,但只从单元格中提取部件号并将其放在另一列中。

零件号有 10 个可能的前缀之一(即 ABC、DDA、GHF、AH 等)。这些单元格可能看起来像这样:

而且我希望能够搜索整个列表并仅将以下信息拉入另一列:

正如您从上面看到的那样,挑战在于零件号的长度各不相同,并且没有特定的约定。关于它们,您唯一知道的是它们可以有我上面提到的十种可能的前缀之一(ABC、GHF 等)。

我目前的解决方案是这样的:

C2=FIND("ABC", A2)
D2=FIND(" ", A2, C2)
E2=MID(A2, C2, D2)

其中单元格 A2 包含完整的零件号和描述,C2 通过搜索其前缀找到零件号的起始位置,D2 通过搜索 space 找到零件号的结束位置,然后 E2 在这两个位置之间拉出子字符串。

如您所见,这不是一个非常可靠的解决方案,它只允许我搜索以 ABC 开头的部分。我希望能够搜索所有 10 个可能的前缀(ABC、DDA、GHF、AH 等),但这不起作用。我尝试了以下方法:

C2=FIND({"ABC", "DDA", "GHF", "AH"}, A2)

但这只会搜索 ABC 部分而忽略其他前缀。非常感谢你们能提供的任何帮助!!

这不是最漂亮的公式,但它应该能让您上路。如果您对宏而不是公式感兴趣,肯定有 VBA 解决方案。

假设您的 Tire Pressure ABC123873 Monitor 在 A1 中,请在 B1 中输入:

=MID(SUBSTITUTE(SUBSTITUTE(A1," ",";",1)," ","-",1),SEARCH("ABC",SUBSTITUTE(SUBSTITUTE(A1," ",";",1)," ","-",1)),SEARCH(" ",SUBSTITUTE(SUBSTITUTE(A1," ",";",1)," ","-",1))-SEARCH("ABC",SUBSTITUTE(SUBSTITUTE(A1," ",";",1)," ","-",1)))

它是如何工作的,它需要你的 A1,然后首先使用 Substitute。我将第一个和第二个 [space] 替换为 ;-。 (注意,如果 space 多于两个,这将 运行 变成问题)。然后,我只使用 Mid 来提取单元格中以 ABC 开头的部分,直到它到达 space。如果你没有 "ABC" 开始你想要的值,你需要调整 Search("ABC"... 部分(或在那里使用数组)。我仍在努力,但希望这有助于提供一个想法。

这就是我要做的。我创建了一个前缀列表以在 G 列中搜索。您甚至可以将它们放在单独的页面上以使其更清晰。

=MID(A1,FIND(G1:G2,A1,1),FIND(" ", A1, FIND(G1:G2, A1, 1))-FIND(G1:G2,A1,1))

我只测试了两个前缀,只是将 G1:G2 更改为 G1:G10 并将所有前缀放入其中。该公式在 A1 中查找。第一个 FIND 查找起始字符编号。等式的其余部分是计算产品编号的末尾减去开头,即 return 到 return 的字符数量。重要的是要知道 MID 不需要开始和结束字符。它希望开始字符和之后的字符数为return。所以 FIND(" ", FIND(G1:G2, A1, 1)) 不起作用,因为它 return 的字符太多了。试一试。

哦,别忘了做 Ctrl+Shift+Enter 输入数组公式

VBA 答案是

Sub findProductCode()

    ' Variable Declarations
    Dim productName As String
    Dim productArray() As String
    Dim wordCount As Integer

    ' Sets the active sheet to use
    ' Change Sheet1 to the name of your sheet
    With Sheets("Sheet1")

        ' Selects the first cell to check
        ' Change A1 to the first cell with data
        Range("A1").Select

        ' Loops through all rows until an empty row
        ' It will end if you have any empty rows in the midle of data
        Do Until IsEmpty(ActiveCell)

            ' Reads text out of the cell
            'Change A to the proper column
            productName = Range("A" & ActiveCell.Row).Text

            ' Splits the string into individual words
            productArray = Split(productName, " ")

            ' Loops through array to find the product number
            For wordCount = LBound(productArray) To UBound(productArray)

                ' Check if the word has the desired 10 prefixes
                ' Add more Or Left(productArray(wordCount), 3) = "xxx" until you have 10 of your prefixes you need
                If Left(productArray(wordCount), 3) = "ABC" Or Left(productArray(wordCount), 3) = "GHF" Then

                    ' Sends the product number to its cell
                    ' Change B to the correct destination Cell
                    Range("B" & ActiveCell.Row).Value = productArray(wordCount)
                End If
            Next

            ' Increments the active cell to the next cell down
            ActiveCell.Offset(1, 0).Select
        Loop
    End With
End Sub

如果您不知道如何操作,您需要在 excel 中启用开发人员选项卡。 File->Options->Customize Ribbon 将开发人员添加到功能区。将您的工作sheet 另存为.xlsm 这是启用了宏的工作簿。然后转到开发人员选项卡,选择 "Visual Basic" 并双击 "ThisWorkBook"。粘贴代码。您可以 运行 那里的代码进行一次性交易,或者您可以在 sheet 上创建一个按钮,您可以随时 运行 这个宏。

要添加按钮,请返回您想要按钮的 sheet。在开发人员选项卡 select Insert 上,选择第一个表单控件 Button。在 sheet 上绘制按钮,将出现一个对话框。 select findProductCode 宏和 select OK。现在每次单击按钮时,它都会 运行 宏。