Я заставляю себя сумасшедшим с этим в течение дня, искал высоко и низко, и, наверное, стараюсь быть слишком милым, так что я полностью застрял.Найти строку в ячейке с помощью VBA
Я пытаюсь запустить простой, если затем
Если ячейка содержит «%» Я хотел бы, чтобы сделать одну вещь, а если нет другого. По причинам, которые я не понимаю, я не могу заставить его работать. Я ясно взял пару идей из других источников, но до сих пор не могу заставить его работать.
Усложняющие факторы. Я не хочу запускать это на весь столбец, просто таблицу, поэтому он встроен в более крупный блок, используя партии или относительные ActiveCells. Я никогда не знаю, где в столбце A я собираюсь запустить «% Change», поэтому Range всегда должен быть переменным. Я хочу, чтобы VBA/VBE делал что-то другое, когда дело касалось ячейки с «%» в ней. SO
Вот что выглядит исходные данные, как
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
Но когда я запускаю следующий он застревает в плохом цикле, где он должен быть вытащил в «If Then» в отличие от " Else "часть под.
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
Вся помощь приветствуется, спасибо!
Это простая часть головоломки, которую я отсутствовал. Я все еще относительно новый, так что не подумал (хорошо, может быть, известно :) о способности делать набор rng.offset внутри if. Это здорово и очень полезно. Я также использовал истинное ложное, а не = 0 для функции InStr, которое я до сих пор не полностью понял, но ценю. Огромное спасибо! –
Хорошая сделка - рад, что она сейчас работает на вас. Похоже, у вас есть 3 полезные ответы. Идите вперед и нажмите галочку рядом с наиболее полезной, чтобы принять ее как «ответ». И добро пожаловать в stackoverflow. –
+ 1 Красиво сделано :) –