2016-09-08 8 views
0

Ich muss Leerzeichen am Anfang, Ende der Zeichenfolge löschen und String Proper Case machen.Excel VBA Zwei Funktionen in einem Array

Ich habe zwei Skripte gefunden:

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 

die Räume auf Zeichenfolge und ein anderes Skript löscht:

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 

Welche macht Proper Case von String. Diese beiden Skripte arbeiten an Bereichen, um alle Nicht-Null-Zellen in der R-Spalte auszuwählen. Ich muss in der ersten Funktion ein zweites Skript machen.

Hinzufügen dieser Code in der ersten Skript (/// ADDING HIER) Punkt: arrReturnData (i, j) = StrConv (arrData (i, j), vbProperCase)

machen meine Ausgabe im korrekten Fall aber mit Leerzeichen. Können Sie vorschlagen, wie Sie zwei Skriptfunktionen in einem Schlaganfall machen?

Vielen Dank!

+1

Ganz einfach: 'arrReturnData (i, j) = StrConv (Trimmen (arrData (i, j)), vbProperCase) ' – Rory

+0

Wenn Sie es in String ohne Leerzeichen zwischen Wörtern konvertieren möchten, dann müssen Sie die Leerzeichen mit VbNullString nach ProperCasing ersetzen, Ersetzen (StrnConv (..), Leerzeichen (1), vbnullstring) – tsolina

+0

@Rory Vielen Dank jetzt ist klar, wie man Funktionen für mich verbindet. –

Antwort

1

Dies wird die ganze ohne Schleifen tun:

Sub Function01()  

    Dim rng As Range 

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

End Sub 

Bevor:

enter image description here

Nach:

enter image description here

+0

Heilige Mutterlucker. Es ist einfacher als ein Tee Rezept. –