在一个工作表中,我有以下数据:
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?然后,我如何计算合同发生的次数?
答案 0 :(得分:0)
正如我在上面的评论中提到的,可以使用简单的通配符Number of Sales Org
来获取COUNTIF
。
见下面的截图:
基本上,我在开头和结尾添加了*
,将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
。如果没有相应修改。这会更改A1
中Sheet
中的数据,以包含与Sheet2
相关的所有与合同编号相关的数据。请参阅下面的屏幕截图。
<强> Sheet 1中:强>
<强> Sheet 2中:强>
运行代码后
如果有帮助,请告诉我们。