在xlsx中搜索一个值,如果找到则替换为不同的值

时间:2018-04-13 14:29:38

标签: excel vba excel-vba reference

所以我要么太具体,要么搜索不够好,因为我找不到任何能回答我问题的东西。所以我来这里寻求帮助。情况如下:

我有一张excel表,我们称之为“CustomerCodeReference”,它有一列(A)客户代码(IE A2001,A2002,B3900,Q2838等,这些不一定是有序的)其中约有3000个,在(B)的下一栏中,我有代码所代表的组(IE帐户主帐户,帐户辅助帐户,管理员组,用户组,只是不同的名称等)

现在,我们可以从公司服务器导出客户报告的电子表格,但问题是,它们标有客户代码+报告序列号。工作表导出为多个列,但其中一列(G)包含客户代码和序列号,每行都是一个报表,有时会有数百个,具体取决于设置的日期范围。因此,请结合示例,让我们说这是来自“帐户主要”的报告它标记为A2001234567(其中“A2001”客户代码之后的所有内容都是报告序列号)有时,报告可能来自多个客户,因此该列可能每行有多个代码+ SN。

鉴于我有数千个这样的代码和组,是否有一些我可以创建的宏,每次导出报表的电子表格时,我都可以复制“CustomerCodeReference”表,并让它自动搜索列的客户代码和SN,然后用实际名称替换代码,或者将实际名称放在另一个(空)行中。所以我基本上可以轻松地引用它的报告,而不必每次都查找代码?

我意识到我需要在VBA中这样做,因为没有我能想到的公式可行。 我有一些职业选手,我认为适合我:

- 我已经拥有主代码列表,所以即使有数千个代码,它们都列在A列中,它们引用的组的实际名称在B列中。

- 代码是一致的,一个字母,后跟4个数字,所以总是5个字符长。

- 在提取报告时,它总是将工作表命名为“客户报告”,因此很容易引用

这些是常数。因此,我需要实际的客户名称来替换代码(同时保留序列号完整)或者如果更容易,请将实际名称添加到同一行的下一个空列。我也可能需要与同事分享这一点,所以基本上只需向他们发送“CustomerCodeReference”表,当他们将它添加到所有拉出的电子表格时,它也会做同样的事情。 (将启用宏,所以不用担心)

这个想法太复杂了吗?还是我可以把它拉下来?在此先感谢您的帮助!

编辑:我道歉,我完全忘了附上任何代码。这是我在VBA中提出的,但不确定我是否在正确的轨道上,因为它没有完成替换,我无法在下一个可用的空单元格中添加值。

Sub replaceStringInCell()

    'declaring my sheet I want to change change customer codes in
    Dim CustomerCodes As Range
    'declaring strings I will be replacing and with what I will be                    replacing them
    Dim ReportNumbers As Range
    Dim CustomerNames As Range

    'identifying column I am working to replace, also trying to shoot for next empty column
    Set CustomerCodes = PulledReports.Worksheets("Customer Reports").Range("G:G")

    'specifying my strings
    ReportNumbers = PulledReports.Worksheets("Customer Reports").Range("G:G")
    myReplacementString = PulledReports.Worksheets("Customer Code Reference").Range("A:A")

    'replace string in cell
    CustomerCodes.Value = Replace(Expression:=CustomerCodes.Value, Find:=ReportNumbers, Replace:=CustomerNames)

End Sub

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

Sub stack_overflow()

Dim cust As Worksheet
Dim ref As Worksheet

Set cust = ActiveWorkbook.Worksheets("Customer Reports")
Set ref = ActiveWorkbook.Worksheets("Customer Code Reference")

'Finding next empty column

Dim column As Integer
column = cust.UsedRange.Columns.column + 1

'Filling this columns

For Each cell In cust.Range("G2:G" & cust.Cells(Rows.Count, "G").End(xlUp).Row)
    cust.Cells(cell.Row, column).Value = Application.WorksheetFunction.VLookup(Left(cell.Value, 5), _
        ref.Range("A2:B" & ref.Cells(Rows.Count, "B").End(xlUp).Row), 2, False)
Next cell

End Sub