所以我要么太具体了,要么搜索得不够好,因为我找不到任何答案。所以我来这里寻求帮助。情况如下:
我有一个excel工作表,我们称之为“CustomerCodeReference”,它有一列(a)客户代码(即A2001、A2002、B3900、Q2838等,不一定按顺序排列),大约3000个,在(B)上的下一列中,我有代码所代表的组(即Accounts Primary、Accounts Secondary、Admin组、User组,只是不同的名称等等)
现在,从我们公司的服务器上,我可以导出客户报告的电子表格,但问题是,他们用客户代码+报告序列号来标记。工作表导出为多个列,但其中一列(G)包含客户代码和序列号,每行是一个报告,有时根据设置的日期范围有数百个。因此,与此示例保持一致,假设它是来自“Accounts Primary”的报告,其标签为A2001234567(其中客户代码“A2001”后的所有内容都是报告序列号)。有时,报告可能来自多个客户,因此列中每行可能有多个代码+序号。
鉴于我有数千个这样的代码和组,是否有一些宏可以创建,每次我导出报告电子表格时,我可以复制“CustomerCodeReference”表,让它自动搜索客户代码和SNs列,然后用实际名称替换代码,或将实际名称放在后面的另一行(空)。所以我基本上可以很容易地引用它是谁的报告,而不必每次都查找代码?
我意识到我需要在VBA中完成这项工作,因为我想不出任何公式能够奏效。
我想我有一些职业球员:
-我已经有了主代码列表,所以即使有数千个代码,它们都列在A列中,它们引用的组的实际名称在B列中。
-代码是一致的,一个字母,后跟4个数字,所以总是5个字符长。
-拉取报告时,它总是将工作表命名为“Customer Reports”,以便于参考
这些是常量。因此,我需要实际的客户名称来替换代码(同时保持序列号不变),或者如果更简单,将实际名称添加到同一行的下一个空列中。我可能还需要与同事分享这一点,所以基本上只需向他们发送“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