Znajdź ciąg w komórce za pomocą VBA
Doprowadzałem się do szaleństwa na ten dzień, szukałem wysoko i nisko, i prawdopodobnie staram się być zbyt słodki, więc całkowicie utknąłem.
Próbuję uruchomić prosty, jeśli tak
Jeśli komórka zawiera „%”, chciałbym, aby zrobiła jedną rzecz, a jeśli nie inną. Z powodów, których nie rozumiem, nie mogę tego zmusić. Wyraźnie zebrałem kilka pomysłów z innego miejsca, ale nadal nie mogę go uruchomić.
Czynniki komplikujące - nie chcę tego uruchamiać w całej kolumnie, tylko w tabeli, więc jest ona osadzona w większym subwooferze za pomocą wielu lub względnych ActiveCells. Nigdy nie wiem, gdzie w kolumnie A natknę się na „% zmiany”, więc zakres zawsze musi być zmienny. Chcę, aby VBA / VBE zrobiło coś innego, gdy trafi na komórkę z „%”. WIĘC
Oto jak wyglądają surowe dane
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
Ale gdy uruchomię następującą, utknie ona w złej pętli, w której powinna była wyjść do „If Then” w przeciwieństwie do „Else” części 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
Cała pomoc jest doceniana, dziękuję!