2016-09-08 2 views
0

Мне нужно удалить пробелы в начале, в конце строки и сделать строку «Правильный случай».Excel VBA Две функции на одном массиве

Я нашел два сценария:

Sub Function01() 

Dim arrData() As Variant 
Dim arrReturnData() As Variant 
Dim rng As Excel.Range 
Dim lRows As Long 
Dim lCols As Long 
Dim i As Long, j As Long 

    Range("R1", Range("R1").End(xlDown)).Select 
    lRows = Selection.Rows.Count 
    lCols = Selection.Columns.Count 

    ReDim arrData(1 To lRows, 1 To lCols) 
    ReDim arrReturnData(1 To lRows, 1 To lCols) 

    Set rng = Selection 
    arrData = rng.Value 

    For j = 1 To lCols 
    For i = 1 To lRows 
     arrReturnData(i, j) = Trim(arrData(i, j)) 
     ///ADDING HERE(read below) 

    Next i 
    Next j 

    rng.Value = arrReturnData 

    Set rng = Nothing 


End Sub 

который удаляет пробелы на строки и другой сценарий:

Sub ChangeCase() 
    Dim Rng As Range 
    On Error Resume Next 
    Err.Clear 
    Application.EnableEvents = False 
    For Each Rng In Selection.SpecialCells(xlCellTypeConstants, _ 
      xlTextValues).Cells 
     If Err.Number = 0 Then 
      Rng.Value = StrConv(Rng.Text, vbProperCase) 
     End If 
    Next Rng 
    Application.EnableEvents = True 
End Sub 

Который делает Надлежащий Случай строки. Эти два сценария работают с диапазонами для выбора всех не нулевых ячеек в столбце R. Мне нужно сделать второй скрипт функции в первом.

Добавление этого кода в первом сценарии в (/// ДОБАВЛЕНИЕ ЗДЕСЬ) Точка: arrReturnData (I, J) = StrConv (arrData (I, J), vbProperCase)

Создание мой выход в правильных случае, но с пробелами. Не могли бы вы, ребята, предложить, как сделать две функции скрипта в такте?

Спасибо!

+1

просто: 'arrReturnData (I, J) = StrConv (Trim (arrData (i, j)), vbProperCase) ' – Rory

+0

, если вы хотите преобразовать его в строку без пробелов между словами, тогда вам нужно заменить пробелы на vbNullString после их правильной установки, заменить (StrnConv (..), space (1), vbnullstring) – tsolina

+0

@Rory Большое спасибо сейчас ясно, как соединить функции для меня. –

ответ

1

Это будет делать всю без петель:

Sub Function01()  

    Dim rng As Range 

    Set rng = Selection 
    rng.Value = rng.Parent.Evaluate("INDEX(PROPER(TRIM(" & rng.Address & ")),)")  

End Sub 

До:

enter image description here

После:

enter image description here

+0

Святой Motherlucker. Это проще, чем чайный рецепт. –

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