VBA中的宏来获取前缀

时间:2015-12-18 00:38:52

标签: excel-vba vba excel

在我的工作中,我经常创建前缀。从上周开始,我认为我可以用excel中的宏来加快我的工作,但我以前从未在 VBA 中开发并需要你的帮助。

我们从任何供应商处获得包含商品编号的列表,然后我必须为我们的系统创建前缀。我们的系统正在寻找前缀,然后它知道供应商。如果前6个字符与另一个供应商完全相同,那么来自两个供应商的前缀将变得更长到7个字符。如果它再次相同,则前缀为8个字符,依此类推
例如:

article numbers from supplier_1:
04012384724993
04012384473373
04012384111453
...
article numbers from supplier_2:
12345671846219
12345629946120
12345629815294
...
article numbers from supplier_3:
12345694724109
12345694715268
12345694724773
...

现在您看到每个供应商的第一个字符是相同的。 对于Supplier_1,所有数字都以“040123”开头,因此这是第一个前缀。 Supplier_2 ans 3具有相同的前6个字符,所以在这里我们再使用一个来识别他。

Supp_2 -> "1234567" and "1234562"
Supp_3 -> "1234569"

Supplier_2现在有2个前缀,因为第7个位置在某些商品编号上有所不同,但不像supplier_3在此位置使用的那样。

现在我有一张带有A列和B列的Excel表格。 在A栏中,我粘贴了supplier_1和B列中的所有商品编号,我从supplier_2粘贴了这些商品编号。 现在我想运行一个宏,用Cell A1中的前6个字符创建一个变量“search”,并根据B列进行检查。如果B列中的一个数字相同,那么变量“search”将获得额外的来自Cell A1的char并再次检查。如果现在在B列中找不到前7个字符,则它是supplier_1的第一个前缀。我想将其粘贴到D列中。 现在,变量“搜索”从A列中的下一个单元格获得前6个字符,(A2),后面的A3,...并且对照B列进行检查。

我不知道,如何将前6个字符放入变量“search”中。 有人可以帮帮我吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

以尽可能小的方式处理大问题总是一个好主意。实际上,将字符串的前几个字符分配给变量可能是一个好的开始。快速Google搜索很可能会指向Left功能。以下是MSDN page的链接,以获取有关其工作原理和使用方法的更多信息。

我还建议您启用立即窗口,默认情况下可以使用 Ctrl + G 完成。在编写新代码时,使用Debug.Print将是您最强大的工具之一。

Sub Example1()

    Dim searchRange As Range
    Dim search As String

    Set searchRange = ThisWorkbook.Worksheets("Sheet1").Range("A1")

    search = Left(searchRange.Value, 6)
    Debug.Print search
End Sub

这是一个片段,让您了解如何解决问题的下一步。

Sub Example2()

    Dim compareRange As Range
    Dim cell As Range
    ' SpecialCells is one of many ways to find all populated cells
    Set compareRange = ThisWorkbook.Worksheets("Sheet1").Columns(2) _
                      .SpecialCells(xlCellTypeConstants)

    For Each cell In compareRange
        Debug.Print cell.Value
    Next
End Sub

请记住,StackOverflow可以帮助您解决特定的编码问题,而这些问题是您无法通过在线查找的资源来解决的。

答案 1 :(得分:0)

我很难解读你所需要的东西,但这就是我想出的。

我将假设您知道如何将模块插入Excel工作表,复制代码和运行宏。如果您不知道如何请告诉我,我会尽力协助您。

如果这不是您所需要的,请向我提供一个示例数据集以及您希望从宏中获得的答案,以便我可以在开发时进行比较。祝你的项目好运!

VBA模块代码

'This subroutine will take the contents of column A cells and search column B for matching digits
'   if they are not found it will copy the current search term into column D
Option Explicit

Sub searchPrefix()

    Dim cellContents As String
    Dim tempSearchVariable As String
    Dim isFound As Boolean
    Dim quantitySearchCharacters As Integer
    Dim entryCounter As Integer
    Dim i As Integer

    isFound = False
    quantitySearchCharacters = 6
    entryCounter = 0

    'counts number of entries in column A
    Cells.Range("A1").Select
    Do Until IsEmpty(ActiveCell)

     entryCounter = entryCounter + 1
     ActiveCell.Offset(1, 0).Select

    Loop

' gets value of comparison cell in column A
For i = 0 To entryCounter - 1

    cellContents = Cells(1 + i, 1).Value

    tempSearchVariable = Left(cellContents, quantitySearchCharacters)

        Cells.Range("B1").Select

        Do Until IsEmpty(ActiveCell)

            ' detects if B1 column cell content matches the current search terms and then adds more characters if required
            If Left(ActiveCell.Value, quantitySearchCharacters) = tempSearchVariable Then

                quantitySearchCharacters = quantitySearchCharacters + 1
                tempSearchVariable = Left(cellContents, quantitySearchCharacters)
                isFound = True

            End If

            If isFound Then

                isFound = False 'reset flag
                Cells.Range("B1").Select

            Else
                    ActiveCell.Offset(1, 0).Select
            End If


        Loop

   Cells(1 + i, 4).Value = tempSearchVariable ' prints the discovered unique prefix to column D

Next i

End Sub