2016-05-06 5 views
1

Я немного смущен, если мой текущий метод является лучшим, но у меня есть файлы excel, в которых первая строка имеет разные заголовки столбцов, в зависимости от того, от кого я их получаю. Я пытаюсь стандартизировать заголовки в строке 1.трудно найти vba find

Как бы написать сценарий для поиска, позволяет сказать:

находки = «clname» или «первое имя» или «полное имя»
заменить = «Имя»

находки = «адрес» или «адр» или «место»
заменить = «Cl_Adress»

мне нужно сделать около 15 различных находок и заменить. Есть ли лучший способ сделать это. Я сейчас работаю с этим скриптом.

Sub findrep() 
    Dim i As String 
    Dim k As String 

    i = "Find" 
    k = "Text to replace" 
    Rows(1).replace what:=i, replacement:=k, lookat:=xlPart, MatchCase:=False 
End Sub 
+0

вы уверены, что хотите 'LookAt: = xlPart'? Мне кажется, что заголовки заголовков столбцов должны быть содержимым всей ячейки. – Jeeped

ответ

2

Использовать два варианта массивов одинакового размера; один для значений what:=, а другой для значений replacement:=. Пройдите через них, чтобы выполнить замены.

Sub blahblah() 
    Dim v As Long, fnd As Variant, rpl As Variant 

    fnd = Array("clname", "first name", "full name", _ 
       "address", "adr", "location") 
    rpl = Array("name", "name", "name", _ 
       "Cl_Adress", "Cl_Adress", "Cl_Adress") 

    With Worksheets("Sheet1") 
     With .Rows(1) 
      For v = LBound(fnd) To UBound(fnd) 
       .Replace what:=fnd(v), replacement:=rpl(v), _ 
         MatchCase:=False, lookat:=xlWhole 
      Next v 
     End With 
    End With 
End Sub 
+0

Спасибо, Jeeped, это сработало отлично – Leofig123

0

Я бы сделал это с использованием регулярного выражения. Установить ссылку на "Microsoft VBScript регулярных выражений 5.5", а затем сделать это цикл по столбцам в первой строке

Sub ReplaceMultipleItems() Dim RX1 как новый RegExp Dim RX2 As New RegExp Dim intColCount As Integer Dim intColCounter As Integer

intColCount = ActiveSheet.UsedRange.Columns.Count 

rx1.Pattern = "clname|first name|full name" 
rx2.Pattern = "address|adr|location" 

For intColCounter = 1 To intColCount 
    ActiveSheet.Cells(1, intColCounter).Value = _ 
    rx2.Replace(rx1.Replace(ActiveSheet.Cells(1, intColCounter).Value, "Name"), "Cl_Adress") 
Next intColCounter 

End Sub

Смежные вопросы