所以我要么太具体,要么搜索不够好,因为我找不到任何能回答我问题的东西。所以我来这里寻求帮助。情况如下:
我有一张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
答案 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