Classificando a coluna do Excel por endereço IP

17

Eu tenho uma planilha do Excel bastante grande (com mais de 200 linhas) que lista itens na minha rede (ou seja, impressoras, servidores, estações de trabalho, projetores de rede etc.) e uma das primeiras colunas é o campo Endereço IP, que assume o formulário 192.168.x.y. Meu problema quando tento classificar é que ele passa (como exemplo) de 192.168.0.85para 192.168.0.9. O que eu gostaria de ver é a classificação com base nos primeiros 3 octetos, então o último octeto logicamente (ou seja .1, .2, .3, etc). Isso é possível? Se sim, como?

Canadian Luke
fonte

Respostas:

19

Como o nixda mencionado nos comentários, as colunas auxiliares tornarão isso possível. Você tem duas opções para atualizar a planilha posteriormente:

  • Adicione todos os novos IPs nas colunas auxiliares divididas.
  • Repita o procedimento Texto para colunas para novas adições.

Aqui está o procedimento:

  1. Selecione sua coluna IP e clique em Data>Text-to-Columns texto para colunas

  2. Escolha a opção Delimitado e clique em Avançar. Marque a Othercaixa de seleção e insira um período .. Clique em Avançar. escolha.  como delimitador

  3. Mantenha todas as colunas, mantenha-as como Geral, clique no ícone de intervalo para editar a Destinationseção. mudar dest 1

  4. Selecione as colunas onde deseja que o novo texto apareça. Pressione a tecla Enter. alterar dest 2

  5. Verifique se o seu intervalo está selecionado e clique em Data> Sort. Digite os critérios de classificação. Continue adicionando níveis para cada octeto. Ordenação

  6. Aqui está o resultado final: resultado

rishimaharaj
fonte
@nixda Sim, retarde o puxão: P Gostaria de poder jogar algum representante seu caminho bem
canadense Luke
Desculpe, @nixda! É ilegal você adicionar sua resposta também?
Rishimaharaj
Bem, funcionou ... O tempo para vocês dois para lutar ao longo dos extra de 15 pontos rep
canadense Luke
7

Sei que este é um post antigo, mas no interesse de fornecer uma solução funcional, apresento o seguinte.

Basta colocar esta fórmula em uma célula adjacente e atualizar as referências para apontar para a célula que contém seu endereço IP (A1 neste exemplo). Isso produzirá um resultado semelhante a 010.121.008.030, que pode ser classificado (corretamente) em ordem alfabética. Em seguida, defina a largura da nova coluna como zero e pronto. Hora de tomar uma xícara de café.

=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")
John Homer
fonte
2
Amo isso, perfeito. Uma única fórmula, uma coluna única "auxiliar". Obrigado.
Earls
Como em todas as fórmulas do Excel, pode ser necessário usar ponto-e-vírgula ( ;) em vez de vírgulas ( ,) com base nas configurações regionais do sistema.
Scott
1
Você pode deixar de fora os períodos concatenados ( …&"."&…) e obter um número simples de doze dígitos, como 010121008030, que também será classificado corretamente (embora a função de classificação possa gerar uma caixa de diálogo irritante para você).
Scott
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
STTR
fonte
Não posso testar isso agora (não no trabalho), mas tentarei quando chegar ao trabalho. Parece que seria mais adaptável a listas mais longas, especialmente se eu apenas adicionar um botão 'Resort' para executar essa macro
canadense Luke
@CanadianLuke Você também pode criar uma coluna BigIntIP. Depois, você pode classificar todos os endereços IP e vice-versa AZ.
STTR 17/07
Isso funciona muito bem! Meu único pedido seria que reutiliza as antigas colunas como impressoras são adicionados
canadense Luke
@CanadianLuke Se você renomear um assunto "IP oct 1", a coluna será adicionada à direita. E os velhos permanecem. Isso é se você precisar de uma história. Por exemplo, ao migrar de uma rede para outro intervalo. Talvez eu não entendo muito bem a questão ...
STTR
0

Além da resposta de John Homer, forneço aqui uma fórmula que também funciona no aplicativo Numbers da Apple, pois a TEXTfunção não existe lá. Também testado no Google Docs.

=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)
Hipska
fonte