Здравствуйте! Прошу помощи с макросом. В общем имеется таблица данных (ооочень большая) по объектам недвижимости, необходимо пройти по всем ячейкам и вытащить из каждой номер ID объекта с ошибкой. Пример прикрепляю. Заранее благодарю!
Ну учитывая то что я в макросах ничего не шарю, то помощь нужна комплексная)) Пока умею прогнать цикл по всем ячейкам. Не могу понять как реализовать цикл в самой ячейке. надо 1. сохранить в переменную номер 1-го ID (найти ID по маске), далее по строке скопировать все ошибки данного ID в столбец 2. перейти на следующую строку ячейки. Вот как-то так Может подскажете какие функции мне помогут? и как они работают?
Все понятно, надо сделать все с нуля за Вас. Учитывая, что в данных у Вас полный бардак, в одной ячейке по нескольку ID, разделители разные(запятая, точка с запятой), может есть смысл сделать заказ здесь: http://www.planetaexcel.ru/forum/?PAGE_NAME=list&FID=7 ?
Sub t()
Set r1 = CreateObject("vbscript.regexp")
Set r2 = CreateObject("vbscript.regexp")
r1.Pattern = "\((\d*)\)"
r2.Pattern = "[);]\s*([^;]*)": r2.Global = True
For Each c In Sheets(1).[b2:b4]
x = Split(c.Text, vbLf)
For Each s In x
Set m1 = r1.Execute(s)
If m1.Count Then
ss = m1(0).submatches(0)
Set m2 = r2.Execute(s)
For i = 0 To m2.Count - 1
j = j + 1
Sheets(2).Cells(j, 1) = ss
Sheets(2).Cells(j, 2) = m2(i).submatches(0)
Next
End If
Next
Next
End Sub
разделители ошибок в исх.данных, конечно, подразумеваются одинаковые - точка с запятой.
split, right, mid, len, trim, instr, ubound и т.д.
хватит пары из указанных
Код
Sub tt()
For Each c In Sheets(1).[b2:b4]
For Each s1 In Split(c.Text, vbLf)
ss = Split(Split(s1, ")")(0), "(")(1)
For Each s2 In Split(Split(s1, ")")(1), ";")
j = j + 1
Sheets(2).Cells(j, 1) = ss
Sheets(2).Cells(j, 2) = Trim(s2)
Next
Next
Next
End Sub
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
всем всем большое спасибо, особенно ikki! ikki, ваш код просто шедевр, работает) но есть небольшое "но", скобки в ячейках редко (это не критично, просто хотелось бы совершенный код), но появляются до ID, тогда по какому признаку делить? в целом же задача решена! еще раз спасибо!
скобки в ячейках редко (это не критично, просто хотелось бы совершенный код), но появляются до ID
мне отсюда не видно - как именно они у вас появляются а варианты могут быть возможно, по длине или по содержимому того, что находится в скобках или брать последние скобки (с цифрами)
не вижу, честное слово.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг