在另一个工作表中的另一个较大列值中查找列值

时间:2014-01-20 21:08:20

标签: excel vba excel-vba

在一个工作表中,我有以下数据:

    Contract    Status  Effective date  Expiry date
    20004         A          12/1/2010  11/30/2015

在第二张工作表中,我有以下数据:

    Customer    Sales org
    A25B020004  3000
    A25B020004  4000
    A00002064   3000
    A00002064   6000
    ....        ....

这就是我想要做的。我想在第二个工作表中找到所有实例,我可以从第一个工作表中找到合同20004。 如您所见,第二个工作表中的合同采用不同的格式(它具有A25B020004而不仅仅是数字20004)。首先,我需要能够在第二个工作表中搜索20004,查找发生的所有实例,然后返回附加到该特定合同的销售组织数量。

我的结果应该是这样的:

Contract  Number of Sales Org     Sales Org
20004           2                 3000
20004           2                 4000

我是Excel的新手。我不是要求一步一步的解决方案,但有人可以指导我应该看到什么样的功能?我现在的主要问题是试图在第二个工作表合同格式中找到20004。 Aka如何在A25B020004中搜索20004?然后,我如何计算合同发生的次数?

1 个答案:

答案 0 :(得分:0)

正如我在上面的评论中提到的,可以使用简单的通配符Number of Sales Org来获取COUNTIF

见下面的截图:

enter image description here

基本上,我在开头和结尾添加了*,将20004变为*20004*。有了这个,您可以拥有20004的前后字符,而COUNTIF仍然可以找到它。如果您确定20004只会在结尾显示,请删除第二个*,因为这不是一个好习惯。

根据您的电子表格进行相应调整,并告知我们结果。

修改

解决修改过的问题,请改用此代码:

Sub GetAllData()

    Dim Sh1 As Worksheet, Sh2 As Worksheet
    Dim StrToFind As String, ContractNameLastRow As Long
    Dim RngToLookIn As Range, Cell As Range, RngOfStr As Range
    Dim CountOfSpecificName As Long

    With ThisWorkbook
        Set Sh1 = .Sheets("Sheet1") 'Modify accordingly.
        Set Sh2 = .Sheets("Sheet2") 'Modify accordingly.
    End With

    Set RngOfStr = Sh1.Range("A1")
    StrToFind = RngOfStr.Value 'Modify accordingly.
    ContractNameLastRow = Sh2.Range("A" & Rows.Count).End(xlUp).Row 'Make sure it refers to column of contract names.
    Set RngToLookIn = Sh2.Range("A1:A" & ContractNameLastRow) 'Modify starting row accordingly.

    CountOfSpecificName = Application.CountIf(RngToLookIn, "*" & StrToFind & "*")
    RngOfStr.Resize(CountOfSpecificName, 1).Value = StrToFind
    RngOfStr.Offset(0, 1).Resize(CountOfSpecificName, 1).Value = CountOfSpecificName

    For Each Cell In RngToLookIn
        If InStr(1, Cell.Value, StrToFind) > 1 Then
            RngOfStr.Offset(0, 2).Value = Cell.Offset(0, 1).Value
            Set RngOfStr = RngOfStr.Offset(1, 0)
        End If
    Next Cell

End Sub

这假设有两件事:您要搜索的合同号位于A1中的Sheet1。您要引用的列表始于A1以及Sheet2。如果没有相应修改。这会更改A1Sheet中的数据,以包含与Sheet2相关的所有与合同编号相关的数据。请参阅下面的屏幕截图。

<强> Sheet 1中:

enter image description here

<强> Sheet 2中:

enter image description here

运行代码后

enter image description here

如果有帮助,请告诉我们。