Findet eine Zeichenfolge innerhalb einer Zelle mit VBA
Ich hätte fahren mich verrückt mit dieser für einen Tag, suchte hoch und niedrig, und werde wohl versuchen, zu nett zu sein also bin völlig stecken.
Ich versuche zu laufen, eine einfache wenn-dann -
Wenn eine Zelle enthält "%" würde ich es mögen, eine Sache zu tun, und wenn nicht die andere. Aus Gründen, die ich nicht verstehe kann ich es nicht zu funktionieren. Ich habe eindeutig ein paar Ideen von anderswo, aber immer noch nicht bekommen kann es arbeiten.
Komplizierenden Faktoren - möchte ich nicht führen dies auf die ganze Spalte, nur ein Tisch, also es ist eingebettet in einen größeren sub mit viel oder relativ ActiveCells. Ich weiß nie, wo Sie in die A-Säule werde ich in die " Veränderung in%", so dass der Bereich muss immer variabel sein. Ich möchte VBA/VBE, etwas anderes zu tun, wenn es auf eine Zelle mit dem "%". SO
Hier ist, was die raw Daten Aussehen
Initial Value (6/30/06)
Value (12/31/06)
Net Additions (9/30/07)
Withdrawal (12/07)
Value (12/31/07)
Withdrawal (2008)
Value (12/31/08)
Addition (8/26/09)
Value (12/31/09)
Value (12/31/10)
Value (12/30/11)
Value (3/31/12)
% Change 1st Quarter
% Change Since Inception
Aber wenn ich das folgende er bleibt stecken in einer schlechten Schleife, wo es haben sollte, zog in der "Wenn, Dann" als Gegensatz zu den "Else" - Teil der sub.
Sub IfTest()
'This should split the information in a table up into cells
Dim Splitter() As String
Dim LenValue As Integer 'Gives the number of characters in date string
Dim LeftValue As Integer 'One less than the LenValue to drop the ")"
Dim rng As Range, cell As Range
Set rng = ActiveCell
Do While ActiveCell.Value <> Empty
If InStr(rng, "%") = True Then
ActiveCell.Offset(0, 0).Select
Splitter = Split(ActiveCell.Value, "% Change")
ActiveCell.Offset(0, 10).Select
ActiveCell.Value = Splitter(1)
ActiveCell.Offset(0, -1).Select
ActiveCell.Value = "% Change"
ActiveCell.Offset(1, -9).Select
Else
ActiveCell.Offset(0, 0).Select
Splitter = Split(ActiveCell.Value, "(")
ActiveCell.Offset(0, 9).Select
ActiveCell.Value = Splitter(0)
ActiveCell.Offset(0, 1).Select
LenValue = Len(Splitter(1))
LeftValue = LenValue - 1
ActiveCell.Value = Left(Splitter(1), LeftValue)
ActiveCell.Offset(1, -10).Select
End If
Loop
End Sub
Alle Hilfe ist willkommen, danke!
InformationsquelleAutor Tommy Z | 2012-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vereinfacht Ihren code zu isolieren, die den test für "%" in der Zelle. Sobald Sie bekommen, um zu arbeiten, können Sie fügen Sie in den rest des Codes.
Versuchen Sie dies:
InStr
zurück, die Anzahl der Zeiten, die Ihrer Suche text erscheint in der Zeichenfolge. Ich änderte Ihrif
test, um zu überprüfen, für die keine übereinstimmungen zuerst.Den message-Boxen und die
.Selects
gibt es einfach für Sie, um zu sehen, was passiert, während du schrittweise durch den code. Nehmen Sie Sie heraus, sobald Sie es zu arbeiten.Guter deal-froh, dass es nun für Sie arbeiten. Wie es aussieht hast du 3 hilfreiche Antworten. Gehen Sie vor und klicken Sie auf das Häkchen neben sehr hilfsbereit, es zu akzeptieren, als "Antwort". Und herzlich willkommen auf stackoverflow.
+ 1 Schön Gemacht 🙂
Dank Siddharth.
InformationsquelleAutor Jon Crowell
Sie nie ändern Sie den Wert von
rng
damit es immer Punkte, die zu der ersten Zellekopieren Sie die
Set rng = rng.Offset(1, 0)
um eine neue Zeile vor der Schleifeauch, Ihre
InStr
test wird immer fehlschlagenTrue
-1 ist, aber die Rückkehr vonInStr
wird größer sein als 0, wenn die Zeichenfolge gefunden wurde. ändern Sie den test, um zu entfernen = Trueneuen code:
InformationsquelleAutor SeanC
Für eine such-routine, die Sie sollten schauen, um zu verwenden
Find
,AutoFilter
oder variant-array-Ansätze. Bereich Schleifen sind nomally zu langsam, wieder schlimmer, wenn SieSelect
Den code unten Aussehen wird für die variable strText in einem vom Benutzer ausgewählten Bereich, er fügt dann alle Treffer auf einer range-Variablen
rng2
um Sie dann weiter zu verarbeitenInformationsquelleAutor brettdj