赞
踩
背景:
本人做ETL,在接触新项目的时候,会同时翻看处理大量的sql脚本文件,面对动辄几百个字段名和表名,无法快速阅读理解代码,于是想把所有的表名和字段名添加上注释,这样可以快速看懂代码。
适用情况:
有数据字典:所有需要翻译的表名或者字段名都有对应的中文解释。
事前准备:
按图中样式准备好excel表,A列为需要翻译的内容,B列为A列+对应注释。
思路及原理:
本代码的思路是利用两层循环,按特定顺位把A列内容替换成B列内容。
外层循环:
(用来循环行数,从1行到最后一行,通过行数可以选定A列和B列的单元格)
内层循环:
(获取到A列单元格内容后,在代码中循环获取可以执行替换的顺位号)
替换操作:按照对应的顺位号执行替换
结束内层循环
结束外层循环
代码实现:
Sub trans_usecells() Dim source As Range Dim target As Range Dim sourceArea As Range Dim sCol As Integer Dim tCol As Integer Dim FirstRow As Integer Dim LastRow As Integer On Error GoTo 100: Set source = Application.InputBox("请选择要替换掉的内容所在列", "选择单元格", , , , , , 8) sCol = source.Column FirstRow = source.End(xlUp).Row LastRow = source.End(xlDown).Row Debug.Print ("要替换掉的内容所在区域为:" & source.End(xlUp).Address & ":" & source.End(xlDown).Address) Set target = Application.InputBox("请选择要替换成的内容所在列", "选择单元格", , , , , , 8) tCol = target.Column Debug.Print ("要替换成的内容所在区域为:" & target.End(xlUp).Address & ":" & target.End(xlDown).Address) Set sourceArea = Application.InputBox("请选择要翻译的单元格", "选择单元格", , , , , , 8) Debug.Print ("翻译的单元格地址为:" & sourceArea.Address) Dim i%, stnum%, x%, j%, k%, w, ss As String Dim c_num() For i = FirstRow To LastRow Do x = InStr(x + 1, sourceArea, Cells(i, sCol)) If x = 0 Then Exit Do '第一个和第二个like后面的"[]"中,分别填写要替换的内容前后相邻的特征字符(比如本例中:在替换ID的时候,ID的前面和后面 '只可能出现“,. ()”这些字符,如果没有这种特征字符,[]里面可以写*代表所有),避免替换“王浩”的时候误伤“王浩然”。 If Mid(sourceArea, x - 1, 1) Like "[(., ]" And Mid(sourceArea, x + Len(Cells(i, sCol)), 1) Like "[),. ]" Then j = j + 1 k = k + 1 ReDim Preserve c_num(1 To j) c_num(j) = k Else k = k + 1 End If Loop If j > 0 Then For Each w In c_num sourceArea = Application.WorksheetFunction.Substitute(sourceArea, Cells(i, sCol), Cells(i, tCol), w) Next w = 0 End If x = 0 j = 0 k = 0 Next i 100: Exit Sub End Sub
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。