2016-11-16 2 views
0

Ich habe ein Excel-Makro, um Spalten von einem Blatt in das neue Blatt zu transformieren.Excel-Makro zu If enthält sonst

Sub Macro1() 
' 
' Macro1 Macro 
' 

' 
Sheets.Add.Name = "Sheet2" 
Worksheets("Sheet2").Cells(1, 1).Value = "Column A" 
Worksheets("Sheet2").Cells(1, 2).Value = "Column B" 
Worksheets("Sheet2").Cells(1, 3).Value = "Column C" 
Worksheets("Sheet2").Cells(1, 4).Value = "Column D" 

Worksheets("data").Activate 
SourceColumn = 2 
SourceRow = 2 
Cells(SourceRow, 1).Activate 
TargetRow = SourceRow 
targetcolumn = 1 
batchValue = InputBox("Enter value for Batch ID column") 

While Cells(1, SourceColumn).Value <> "" 

While ActiveCell.Value <> "" 
Worksheets("Sheet2").Cells(TargetRow, 1).Value = batchValue 
Worksheets("Sheet2").Cells(TargetRow, targetcolumn + 1).Value = ActiveCell.Value 
Worksheets("Sheet2").Cells(TargetRow, targetcolumn + 2).Value = Worksheets("Data").Cells(1, SourceColumn).Value 
Worksheets("Sheet2").Cells(TargetRow, targetcolumn + 3).Value = Worksheets("Data").Cells(SourceRow, SourceColumn).Value 
SourceRow = SourceRow + 1 
targetcolumn = 1 
TargetRow = TargetRow + 1 
Cells(SourceRow, 1).Activate 
Wend 
SourceColumn = SourceColumn + 1 
SourceRow = 2 
Cells(SourceRow, 1).Activate 

Wend 
With Worksheets("Sheet2").Sort 
.SetRange Range(Cells(2, 1), Cells(TargetRow, 3)) 
     .Header = xlNo 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
End With 


End Sub 

Dies funktioniert gut, aber ich brauche Klammer von „Spalte C“ trimmen In der While-Anweisung konnte ich erfolgreich Klammer trimmt Mitte-Funktion, indem Sie den Code wie unten aktualisieren.

Worksheets("Sheet2").Cells(TargetRow, targetcolumn + 2).Value = mid(Worksheets("Data").Cells(1, SourceColumn).Value, 2, 36) 

Aber was ich fand, war, dass es einige Werte, die unterschiedliche Länge hat, die ....

mid(Worksheets("Data").Cells(1, SourceColumn).Value, 2, 10) 

Also ich brauche erfordert ..

wenn Spalte einfügen C enthält das Wort "Eltern" und dann Mitte ([Spalte C], 2,10) sonst Mitte ([Spalte C], 2,36)

Was ist der einfachste Weg, um diesen Job abzuschließen?

Vielen Dank!

Antwort

1

Wenn Sie nur die erste und letzte Zeichen trimmen müssen, dann können Sie die Länge der Zeichenfolge in den Funktionsparametern verwenden:

Worksheets("Sheet2").Cells(TargetRow, targetcolumn + 2).Value = mid(Worksheets("Data").Cells(1, SourceColumn).Value, 2, Len(Worksheets("Data").Cells(1, SourceColumn).Value) - 2) 

, die für jede Zeichenfolge funktionieren wird.

+0

das funktionierte. Vielen Dank! – user2747356