Menyortir kolom Excel berdasarkan alamat IP

17

Saya memiliki spreadsheet Excel yang cukup besar (lebih dari 200 baris) yang mencantumkan item dalam jaringan saya (yaitu printer, server, workstation, proyektor jaringan, dll), dan salah satu kolom pertama adalah bidang Alamat IP, yang berbentuk formulir 192.168.x.y. Masalah saya ketika saya mencoba untuk mengurutkannya adalah ia pergi (sebagai contoh) dari 192.168.0.85ke 192.168.0.9. Apa yang saya ingin melihat apakah menyortir berdasarkan 3 oktet pertama, maka oktet terakhir logis (yaitu .1, .2, .3, dll). Apakah ini mungkin? Jika ya, bagaimana caranya?

Luke Kanada
sumber

Jawaban:

19

Seperti nixda yang disebutkan dalam komentar, kolom pembantu akan memungkinkan ini. Anda memiliki dua opsi untuk mempertahankan sheet sesudahnya:

  • Tambahkan semua IP baru di kolom pembantu pembantu.
  • Ulangi prosedur Teks-ke-kolom untuk penambahan baru.

Inilah prosedurnya:

  1. Pilih kolom IP Anda dan klik Data>Text-to-Columns teks-ke-kolom

  2. Pilih opsi Delimted dan klik Next. Centang Otherkotak dan masukkan titik .. Klik Selanjutnya. pilih.  sebagai pembatas

  3. Simpan semua kolom, pertahankan sebagai Umum, klik ikon rentang untuk mengedit Destinationbagian. ubah dest 1

  4. Pilih kolom di mana Anda ingin teks baru muncul. Tekan tombol Enter. ubah dest 2

  5. Pastikan rentang Anda dipilih dan klik Data> Sort. Masukkan kriteria penyortiran. Terus tambahkan level untuk setiap oktet. penyortiran

  6. Inilah hasil akhirnya: hasil

rishimaharaj
sumber
@nixda Ya, colek lambat: P Berharap saya bisa melempar beberapa perwakilan dengan cara Anda
Luke Kanada
Maaf, @nixda! Apakah Anda juga menambahkan jawaban Anda ilegal?
rishimaharaj
Ya, itu berhasil ... Waktunya bagi kalian berdua untuk memperebutkan 15 poin rep tambahan
Luke Kanada
7

Saya menyadari ini adalah pos lama, tetapi untuk kepentingan memberikan solusi yang berfungsi, saya sajikan berikut ini.

Cukup masukkan rumus ini di sel yang berdekatan dan perbarui referensi untuk menunjuk ke sel yang berisi alamat IP Anda (A1 dalam contoh ini). Ini akan menghasilkan hasil yang mirip dengan 010.121.008.030, yang kemudian dapat diurutkan (dengan benar) berdasarkan abjad. Kemudian atur lebar kolom baru ke nol dan voila. Saatnya menikmati secangkir kopi.

=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
sumber
2
Cintai ini, sempurna. Satu formula, satu kolom "pembantu". Terima kasih.
Earls
Seperti semua rumus Excel, Anda mungkin perlu menggunakan titik koma ( ;) alih-alih koma ( ,) berdasarkan pengaturan regional sistem Anda.
Scott
1
Anda bisa meninggalkan periode gabungan ( …&"."&…) dan mendapatkan angka dua belas digit, seperti 010121008030, yang juga akan mengurutkan dengan benar (walaupun fungsi sortir mungkin melempar kotak dialog yang mengganggu pada Anda).
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
sumber
Saya tidak dapat mengujinya sekarang (tidak di tempat kerja), tetapi saya akan mencobanya ketika saya mulai bekerja. Sepertinya ini akan lebih mudah beradaptasi dengan daftar yang lebih panjang, terutama jika saya hanya menambahkan tombol 'Resor' untuk menjalankan makro ini
Kanada Luke
@ CanadianLuke Anda juga dapat membuat kolom BigIntIP. Kemudian Anda bisa mengurutkan semua alamat IP dan sebaliknya AZ.
STTR
Ini sangat bagus! Satu-satunya permintaan saya adalah bahwa itu menggunakan kembali kolom lama sebagai printer ditambahkan
Kanada Luke
@ CanadianLuke Jika Anda mengganti nama subjek "IP 1 Oktober" maka kolom akan ditambahkan ke kanan. Dan yang lama tetap ada. Ini kalau kamu butuh cerita. Misalnya, ketika bermigrasi dari satu jaringan ke jangkauan lain. Mungkin saya tidak mengerti pertanyaannya ...
STTR
0

Selain jawaban John Homer, saya di sini menyediakan formula yang juga berfungsi di aplikasi Bilangan Apple, karena TEXTfungsinya tidak ada di sana. Juga diuji di Google Documents.

=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
sumber