Classificação da coluna do Excel por endereço IP

15

Eu tenho uma planilha do Excel razoavelmente grande (mais de 200 linhas) que lista itens na minha rede (isto é, impressoras, servidores, estações de trabalho, projetores de rede, etc.) e uma das primeiras colunas é o campo Endereço IP, formulário 192.168.x.y . Meu problema ao tentar classificá-lo é como (por exemplo) 192.168.0.85 to 192.168.0.9 . O que eu gostaria de ver é a classificação baseada nos três primeiros octetos, depois no último octeto logicamente (por exemplo, .1 , .2 , .3 , etc). Isso é possível? Se sim, como?

    
por Canadian Luke 16.07.2013 / 20:27

3 respostas

19

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

  • Adicione todos os novos IPs nas colunas auxiliares de divisão.
  • Repita o procedimento de texto para colunas para novas adições.

Aqui está o procedimento:

  1. Selecione sua coluna IP e clique em Data > %código%

  2. EscolhaaopçãoDelimitadaecliqueemAvançar.VerifiqueacaixadeseleçãoText-to-ColumnseinsiraumperíodoOther.CliqueemNext.

  3. Mantenha todas as colunas, mantenha-as como Geral, clique no ícone do intervalo para editar a seção . .

  4. Selecioneascolunasondevocêdesejaqueonovotextoapareça.AperteateclaEnter.

  5. Verifique se o seu intervalo está selecionado e clique em Destination > %código%. Digite os critérios de classificação. Continue adicionando níveis para cada octeto.

  6. Esteéoresultadofinal:

por 16.07.2013 / 21:26
3

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

Basta colocar essa 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 ao 010.121.008.030, que pode ser classificado (corretamente) em ordem alfabética. Em seguida, defina a largura da nova coluna para zero e voila. 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")
    
por 16.01.2015 / 20:39
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
    
por 16.07.2013 / 22:55