Страницы: 1
RSS
Выборка строк с IP адресами
 
Здравствуйте.
В общем есть 4 столбца. В одном из столбцов есть ip-адреса, но они идут не в каждой ячейке, а в хаотичном порядке.
Нужно выбрать и скопировать на новый лист, только те строки, в которых имеются ip-адреса.
Теоретически немного представляю, как это реализовать, но это только теоретически...

Буду очень признателен за помощь.
 
вариант: автофильтр по столбцу с адресами, условие - (непустые), копи, пасте.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Как записать так, чтобы производился поиск IP адресов. По идеии нужно писать регулярное выражение...
 
Цитата
Евгений пишет: В общем есть 4 столбца.
Нам хватит двух: 1 -  в котором адреса, и 2 - куда надо выбрать... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Ну в общем да  :D
 
Хорошо, что Вы согласны. Не будете против, если вместо Вас кто-то пример покажет?
 
файл с примером вы не приложили, написали просто:
Цитата
Евгений пишет: В одном из столбцов есть ip-адреса
о том, что в этом же столбце есть что-то ещё, кроме ip-адресов вы постеснялись упомянуть?
потом стеснение побороли...
Цитата
Как записать так, чтобы производился поиск IP адресов. По идеии нужно писать регулярное выражение...
но файла как не было, так и нет.

вы вообще хотите свою задачу решить?
или просто со скуки поболтать зашли?  :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Ну хорошо, вот пример. Я просто думал, смысл задачи и так ясен, для чего ещё пример.
 
для такого примера ответ здесь
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Я не понимаю, что вы хотите этим сказать?
 
файл
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Возможно я не много не корректный пример показал... Извините  :oops:  
Там просто ещё и текст есть в ячейках с ip адресами...
В общем выкладываю ещё один пример, уже с реальной задачей
Изменено: Евгений - 20.01.2013 16:40:17
 
В третий столбец =ЕСЛИОШИБКА(ПОИСК("*IpAddress*";B2);0)
Такой вариант подойдет :?:
 
Да, нормально. Спасибо большое. Я пытался что-то городить с VBA... Оказалось, всё намного проще.
Вопрос, попутно: а если примеру, IP адреса не будут идти с надпись IpAddress перед ними, а к примеру хаотично разбросаны по тексту, тогда как быть? (просто такие варианты тоже часто попадаются)
Изменено: Евгений - 20.01.2013 17:14:01
 
=ЕСЛИОШИБКА(ПОИСК(".***.***.";B2);0)
=ЕСЛИОШИБКА(ЕСЛИ(ПОИСК(".***.***.";B2)>0;1;0);0)
Что-то типа этого
 
Цитата
Евгений пишет: нужно писать регулярное выражение...
вы, в общем-то, правы.
для общего случая.
но, во-первых, регулярные выражения более медленны по сравнению с другими способами.
особенно - правильные регулярные выражения. которые, к примеру, не возьмут "адрес" с одним из чисел, не попадающим в диапазон 1..256.
во-вторых, задачу обычно удаётся упростить (если приглядеться к данным и предварительно проанализировать особенности).
и если такой способ находится - то лучше использовать его.
в-третьих, вы ведь пока не умеете использовать регулярки? а по готовому примеру сможете разобраться и, в случае нужды, изменить?
Изменено: ikki - 20.01.2013 17:31:23
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Вот такой функцией с помощью рег.выражений можно определить ячейки с ip адресом:
Код
Function GetMatch(rCell As Range)
    Dim objRegExp As Object, objMatches As Object
    Dim sStr As String, li As Long

    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True: objRegExp.IgnoreCase = True

    objRegExp.Pattern = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
    Set objMatches = objRegExp.Execute(rCell.Value)

    GetMatch = objMatches.Count
End F unction


Думаю, далее не соствит труда выцепить сами ячейки. Если захотите полной автоматизации - просто воткнуть функцию в цикл(правда, я бы советовал тогда инициализацию объекта RegExp вынести за пределы функции и назначать только перед циклом, а в цикле лишь вычислять)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
мой вариант шаблона для регэкспа:
Код
"(?:^|\s)((2[0-4]\d|25[0-6]|1\d\d|\d{1,2})\.){3}(2[0-4]\d|25[0-6]|1\d\d|\d{1,2})([^\d]|$)"

пс. не проверял.  :oops:
Изменено: ikki - 20.01.2013 17:45:24
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Всем спасибо за помощь
Цитата
ikki пишет:
в-третьих, вы ведь пока не умеете использовать регулярки? а по готовому примеру сможете разобраться и, в случае нужды, изменить?
Да если честно, то регулярными выражениями, собственно как и VBA, особо как-то не пользовался за ненадобностью. Как-то обходился.. Возможно задачи не сложные. Поэтому знаю, как уже говорил, в теории , так сказать :)
 
на случай усложнения задач и пояаления надобности:
http://msdn.microsoft.com/en-us/library/ms974570.aspx
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Ок. Спасибо
Страницы: 1
Наверх