В редакторе MS Excel, вплоть до версии 2008 (для MacOS), отсутствует такой тип данных, как IP-адрес.
При сортировке по возрастанию Эксель выдает нечто такое:
<> | A | B |
1 | host j | 1.2.3.4 |
2 | host x | 1.2.3.40 |
3 | host b | 1.2.3.5 |
4 | host k | 11.2.2.3 |
Простым решением этой задачи является перевод по прилагаемой ниже формуле адресов в точечной нотации в адреса в десятичной нотации с последующей их стандартной сортировкой с влиянием на смежные ячейки.
Формула перевода IP-адреса в десятичную форму для англоязычной версии Excel:
=((VALUE(LEFT(B1; FIND(“.”; B1)-1)))*256^3)+((VALUE(MID(B1; FIND(“.”; B1)+1; FIND(“.”; B1; FIND(“.”; B1)+1)-FIND(“.”; B1)-1)))*256^2)+((VALUE(MID(B1; FIND(“.”; B1; FIND(“.”; B1)+1)+1; FIND(“.”; B1; FIND(“.”; B1; FIND(“.”; B1)+1)+1)-FIND(“.”; B1; FIND(“.”; B1)+1)-1)))*256)+(VALUE(RIGHT(B1; LEN(B1)-FIND(“.”; B1; FIND(“.”; B1; FIND(“.”; B1)+1)+1))))
Формула перевода IP-адреса в десятичную форму для русскоязычной версии Excel:
=(((ЗНАЧЕН(ЛЕВСИМВ(B1;ПОИСК(“.”;B1)-1))))*256^3)+((ЗНАЧЕН(ПСТР(B1; ПОИСК(“.”; B1)+1; ПОИСК(“.”; B1; ПОИСК(“.”; B1)+1)-ПОИСК(“.”; B1)-1)))*256^2)+((ЗНАЧЕН(ПСТР(B1; ПОИСК(“.”; B1; ПОИСК(“.”; B1)+1)+1; ПОИСК(“.”; B1; ПОИСК(“.”; B1; ПОИСК(“.”; B1)+1)+1)-ПОИСК(“.”; B1; ПОИСК(“.”; B1)+1)-1)))*256)+(ЗНАЧЕН(ПРАВСИМВ(B1; ДЛСТР(B1)-ПОИСК(“.”; B1; ПОИСК(“.”; B1; ПОИСК(“.”; B1)+1)+1))))
В итоге получаем следующее:
<> | A | B | C |
1 | host j | 1.2.3.4 | 16909060 |
2 | host b | 1.2.3.5 | 16909061 |
3 | host x | 1.2.3.40 | 16909096 |
4 | host k | 11.2.2.3 | 184680963 |
Формула вставлена в ячейку C1.
Написано на основе статьи на mvps.org.