2016-12-10 5 views
1

Mein Code funktioniert nur für die ausgewählte Zelle. Ich mag es für jede Zelle in Spalte A arbeitenFunktion auf alle Zellen in einer Spalte anwenden

Hier ist mein Code bisher:

Sub Splitter() 

Dim i As Integer 
Dim Text As String 
Dim Item As Variant 

Text = ActiveCell.Select 
Item = Split(ActiveCell, "-") 

For i = 0 To UBound(Item) 
    Cells(3, i + 2).Value = Item(i) 
Next i 

If Range("B3").Value = "CHOP" Then 
    Range("D3").Value = "chopsticks" 
ElseIf Range("B3").Value = "NAPK" Then 
    Range("D3").Value = "napkins" 
ElseIf Range("B3").Value = "RICE" Then 
    Range("D3").Value = "white rice" 
ElseIf Range("B3").Value = "SOYS" Then 
    Range("D3").Value = "soy sauce" 
ElseIf IsEmpty(Range("D3").Value) = True Then 
    Range("D3").Value = "other" 
End If 

End Sub 

ich auch, es zu bekommen versuchen weiterhin zu arbeiten, wenn Zeilen hinzugefügt werden.

+0

was für Daten sehen Sie in der Spalte A haben? Ist es nur etwas wie "ABCD-xxx", oder hast du manchmal "ABCD-xxx-xxx-xxx"? (Wenn mehr als ein Bindestrich vorhanden ist, wirkt sich dies auf das aus, was Sie in Spalte D einfügen möchten, dh "andere" oder was im dritten "Teil" der ursprünglichen Zelle in Spalte A war.) – YowE3K

+0

Ihr Code ruft nach 'Select Case Range ("B3"). Value ", dann in den folgenden Zeilen" Case "CHOP", etc .. –

+0

Meine Daten haben nur ABCD-xxxx ist alles. Ich habe also herausgefunden, wie man die richtige Funktion ausführt, kann sie aber nur auf die ausgewählte Zelle anwenden und bin mir nicht sicher, wie man sie anwendet. –

Antwort

0

Der folgende Code durchläuft alle Zeilen in Spalte A von Zeile 3 bis zur letzten Zeile mit Daten.

Ich verwende Select Case .Range("B" & LRow).Value anstelle von mehreren ElseIf.

Ich nehme an, Ihre letzte ElseIf IsEmpty(Range("D3").Value) = True Then war ein Typfehler, und Sie meinten ElseIf IsEmpty(Range("B3").Value) = True Then.

-Code

Option Explicit 

Sub Splitter() 

Dim i As Integer 
Dim Text As String 
Dim Item As Variant 
Dim LastRow As Long 
Dim LRow As Long 

' modify "sheet1" to your sheet's name 
With Sheets("Sheet1") 

    ' find last row in Column A 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

    For LRow = 3 To LastRow 

     Item = Split(.Range("A" & LRow), "-")    
     For i = 0 To UBound(Item) 
      .Cells(LRow, i + 2).Value = Item(i) 
     Next i 

     Select Case .Range("B" & LRow).Value 
      Case "CHOP" 
       .Range("D" & LRow).Value = "chopsticks" 

      Case "NAPK" 
       .Range("D" & LRow).Value = "napkins" 

      Case "RICE" 
       .Range("D" & LRow).Value = "white rice" 

      Case "SOYS" 
       .Range("D" & LRow).Value = "soy sauce" 

      Case "CHOP" 
       .Range("D" & LRow).Value = "chopsticks" 

      Case Else 
       .Range("D3").Value = "other" 

     End Select 

    Next LRow   
End With 

End Sub 
+0

Dies ist ziemlich perfekt! Der einzige Teil, der nicht funktioniert, ist in Spalte D, wenn Spalte B nichts anderes als CHOP, NAPK, SOYS, RICE ist, dann muss es "anders" sein. Ich habe ursprünglich leer gestellt, weil es leer wäre, wenn es keines dieser Dinge wäre. –

+0

@TravisWilliamCarter Versuchen Sie den bearbeiteten Code und lassen Sie mich wissen, wenn das ist, was Sie gemeint haben –

+0

$ !! Sie sind eine riesige Hilfe! –

Verwandte Themen