Сортування стовпця Excel за IP-адресою


17

У мене досить велика електронна таблиця Excel (понад 200 рядків), в якій перераховані елементи в моїй мережі (тобто принтери, сервери, робочі станції, мережеві проектори тощо), і одним з перших стовпців є поле IP Address, яке приймає форму 192.168.x.y. Моя проблема , коли я намагаюся розібратися в тому , що це він йде ( в якості прикладу) від 192.168.0.85до 192.168.0.9. Те , що я хотів би бачити це сортування на основі перших 3 октетів, то останній октет логічно (тобто .1, .2, .3і т.д.). Чи можливо це? Якщо так, то як?

Відповіді:


19

Як згадується nixda в коментарях, помічницькі стовпці дозволять зробити це можливим. У вас є два варіанти збереження аркуша:

  • Додайте всі нові IP-адреси в розділені стовпчики-помічники.
  • Повторіть процедуру «Текст до стовпців» для нових доповнень.

Ось процедура:

  1. Виберіть свій стовпець IP та натисніть Data>Text-to-Columns текст у стовпці

  2. Виберіть параметр Розмежування та натисніть кнопку Далі. Поставте Otherпрапорець і введіть період .. Клацніть Далі. вибрати.  як роздільник

  3. Зберігайте всі стовпці, зберігайте їх як загальні, натисніть значок діапазону, щоб відредагувати Destinationрозділ. змінити призначення 1

  4. Виберіть стовпці, де ви хочете відобразити новий текст. Натисніть клавішу Enter. змінити призначення 2

  5. Переконайтесь, що вибрано діапазон і натисніть Data> Sort. Введіть критерії сортування. Продовжуйте додавати рівні для кожного октету. сортування

  6. Ось кінцевий результат: результат


@nixda Так, повільний ривок: P Хочете, щоб я також міг підкинути свій шлях
канадський Люк

Вибачте, @nixda! Чи незаконно ви також додавати свою відповідь?
rishimaharaj

Що ж, спрацювало ... Час для вас двох, щоб поборотись за додаткові 15 балів повторень
канадський Люк

7

Я усвідомлюю, що це стара посада, але в інтересах забезпечити робоче рішення я представляю наступне.

Просто помістіть цю формулу в сусідню комірку і оновіть посилання, щоб вказати на клітинку, що містить вашу IP-адресу (A1 у цьому прикладі). Це дасть результат, схожий на 010.121.008.030, який потім можна буде сортувати (правильно) за алфавітом. Потім встановіть нову ширину стовпця на нуль і вуаля. Час насолодитися чашкою кави.

=TEXT(MID(A1,1,FIND(".",A1)),"000")&"."&TEXT(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-1-FIND(".",A1)),"000")&"."&TEXT(MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-1-FIND(".",A1,FIND(".",A1)+1)),"000")&"."&TEXT(MID(A1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)+1,LEN(A1)),"000")

2
Любіть це, ідеально. Єдина формула, один стовпець «помічник». Спасибі.
Графи

Як і у всіх формулах Excel, можливо, вам доведеться використовувати крапки з комою ( ;) замість коми ( ,) на основі регіональних налаштувань вашої системи.
Скотт

1
Ви можете залишити зв'язані періоди ( …&"."&…) і отримати звичайний, дванадцятизначний номер, як 010121008030, який також буде сортувати правильно (хоча функція сортування може кинути на вас роздратуюче діалогове вікно).
Скотт

1
Sub IPSplit()

HeaderRow = 1
ColimnName = "A"
BeginIPaddsressData = 2

Dim HeaderArray As Variant
HeaderArray = Array("IP oct 1", "IP oct 2", "IP oct 3", "IP oct 4")

Dim Octet() As String
Dim RangeSearch As Range, RangeFound As Range, LastCell As Range
Dim LastCellRowNumber As Long, LastCellColumnNumber As Long, RowNumber As Long

With ActiveSheet
Set LastCell = .Cells(HeaderRow, .Columns.Count).End(xlToLeft)
LastHeaderColumnNumber = LastCell.Column

Set RangeSearch = Range("1:1")
Set RangeFound = RangeSearch.Find(What:=HeaderArray(0), LookIn:=xlValues)

If RangeFound Is Nothing Then
RowNumber = 2
    If .Cells(RowNumber, .Columns.Count) <> vbNullString Then
        Set LastCell = .Cells(RowNumber, .Columns.Count)
        LastCellColumnNumber = LastCell.Column
    Else
        Set LastCell = .Cells(RowNumber, .Columns.Count).End(xlToLeft)
'Specifies the last column LastCellColumnNumber.

        LastCellColumnNumber = LastCell.Column
    End If

Range(Cells(HeaderRow, LastCellColumnNumber + 1), Cells(HeaderRow, LastCellColumnNumber + 4)).Value = HeaderArray
'Insert Header

Else
LastCellColumnNumber = RangeFound.Column - 1
End If

Set LastCell = .Cells(.Rows.Count, ColimnName).End(xlUp)
'Specifies the last cell number in the column ColimnName.

LastCellRowNumber = LastCell.Row   
End With

    For I = BeginIPaddsressData To LastCellRowNumber

    Octet = Split(Cells(I, ColimnName).Value, ".")
    For O = 0 To 3       
'cells populate the values of octets 1-4.
      If (UBound(Octet) - O) >= 0 Then      
         Cells(I, ColimnName).Offset(0, LastCellColumnNumber + O).Value = Octet(O)
      End If
    Next
Next
End Sub

Я не можу перевірити це прямо зараз (не на роботі), але спробую це, коли прийду на роботу. Схоже, це було б більш пристосованим до довших списків, особливо якщо я просто додаю кнопку "Курорт", щоб запустити цей макрос
канадський Лука

@CanadianLuke Ви також можете створити стовпець BigIntIP. Потім ви можете сортувати всі IP-адреси та навпаки AZ.
STTR

Це чудово працює! Єдине моє прохання було б, щоб воно повторно використовувало старі стовпці, оскільки додані принтери
канадський Лука

@CanadianLuke Якщо ви перейменовуєте тему "IP oct 1", стовпець буде доданий праворуч. А старі залишаються. Це якщо вам потрібна історія. Наприклад, при переході з однієї мережі в інший діапазон. Можливо, я не зовсім зрозумів питання ...
STTR

0

Окрім відповіді Джона Гомера, я надаю формулу, яка також працює в додатку Numbers від Apple, оскільки TEXTфункція там не існує. Тестується також в Документах Google.

=DEC2HEX(LEFT(B2,FIND(".",B2)-1),2)
&
DEC2HEX(MID(
    B2,
    FIND(".",B2)+1,
    FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) - FIND(".",B2) - 1
),2)
&
DEC2HEX(MID(
    B2,
    FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) + 1,
    FIND(
        ".",
        B2,
        FIND(
            ".",
            B2,
            FIND(".",B2)+1
        )+1
    ) - FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) - 1
),2)
&
DEC2HEX(RIGHT(
    B2,
    LEN(B2) - FIND(
        ".",
        B2,
        FIND(
            ".",
            B2,
            FIND(".",B2)+1
        )+1
    )
),2)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.