Excel'de düzgün şekilde sıralamak için IP adresleri içeren hücreleri nasıl alabilirim?


34

Şu anda geniş bir IP adresi listesiyle (binlerce tanesi) çalışıyorum.

Ancak, IP adreslerini içeren sütunu sıraladığımda, sezgisel ya da takip etmesi kolay bir şekilde sıralamazlar.

Örneğin, IP Adreslerini aşağıdaki gibi girersem:

görüntü tanımını buraya girin

Ve sonra artan düzende sıralarsam şunu alırım:

görüntü tanımını buraya girin

Hücreleri, örneğin 17.255.253.65 IP adresinin 1.128.96.254’ten sonra ve 103.236.162.56’dan önce artan düzende sıralandığında görünecek şekilde biçimlendirmesinin bir yolu var mı ?

Olmazsa, bu nihai hedefe ulaşmam için başka bir yol var mı?


3
Sıralama, hücre biçimlendirmesinden etkilenmez.
Blackwood

1
Bu ilginç - Bir hücrenin formatının bazı durumlarda sıralama yapmayı etkileyeceğinden emindim ve bunun belki de onlardan biri olduğunu düşündüm. Açıklama için teşekkürler!
Monomeeth

1
Bunlardan herhangi birinin IPv6 adreslerini işlemesi gerekiyorsa Bruce size yardım eder!
Criggie

Yanıtlar:


42

Fark etmiş olabileceğiniz gibi, IP adresleriniz sayı değil metin olarak kabul edilir. Metin olarak sıralanıyorlar, bu "162" ile başlayan adreslerin "20" ile başlayan adreslerden önce geleceği anlamına geliyor. (çünkü "1" karakteri "2" karakterinden önce gelir.

IP adresini parçalarına bölmek için bu cevapta verilen formülü kullanabilirsiniz: https://stackoverflow.com/a/31615838/4424957 .

IP adresleriniz A sütunundaysa, aşağıda gösterildiği gibi BE sütunlarını ekleyin.

görüntü tanımını buraya girin

Formülü girin

=VALUE(TRIM(MID(SUBSTITUTE($A2,".",REPT(" ",999)),(B$1)*999-998,999)))

B2 hücresinde ve her IP adresinin dört bölümünü almak için tüm satırlardaki BE sütunlarına kopyalayın. Şimdi tüm aralığı B ile E arasındaki sütunlara göre sıralayın (aşağıdaki sırayla):

görüntü tanımını buraya girin

Yardımcı sütunları (BE) görmek istemiyorsanız, bunları gizleyebilirsiniz.


12
Dört sütuna bölmek yerine, first*256^3+second*256^2+third*256+fourthbir sütunda olduğu gibi baytları "birleştirmek" daha iyi olabilir mi?
Ruslan

Özellikle IPv4 adresleri aslında sadece 32 bit sayılar olduğundan. IP adreslerini görüntülemenin 4 bitlik dört yolu yalnızca insan tarafından okunabilirlik içindir.
Kat

@Kat Bunun işe yarayacağına katılıyorum ve dört yerine yalnızca bir yardımcı sütun gerektiriyor. Ancak bu sütundaki formül oldukça uzun olacaktı, bu yüzden dört sütun kullanmayı seçtim (muhtemelen her durumda onları gizlerdim).
Blackwood

10

En kolay, 3 adımda Çözüm Size önerebilirim ,,,

  1. IP Adresi Sütunu'nu seçin, Metin'e Sütuna komutunu uygulayın.

  2. Bitişik sütununda bu formülü yazın.

    = BİRLEŞTİR (B3 "" C3, "", D3, "", E3)

  3. Sonunda, artan düzende sıralayın.

Ekran görüntüsünü kontrol edin.

görüntü tanımını buraya girin

NB:

Kırmızı , Orijinal IP Adresidir (A Sütununda).

Metin Sütuna uygulandıktan sonra yeşil (B Sütunu E ile E).

Siyah uygulandıktan sonra birleştirme ve sıralama (F sütunu).

Nedeni aslında çok basittir IP adresi Metin Verisidir ve Excel, Sayı'ya çevirmek için herhangi bir Hücre Formatını kabul etmemektedir.

Umarım bu size yardımcı olur.


4
Bu korkunç. Farklı satırlardaki verileri hiçbir zaman karıştırmak istemezsiniz.
MaxW

@MaxW ,, tam olarak söylemek istediğini elde değilim!
Rajesh S

2
Orijinal A sütununu sıralamaya dahil etmeniz gerektiği anlamına gelir, bu nedenle iP adresleri her satırda aynı olur.
Bandersnatch

1
Hayır, yanlış bir şey yapmadım, OP talebi IP Adresini Doğal Düzene Göre Sıralamaktı (Sayı) ve KIRMIZI A Sütunu sıralanmamıştır. F sütunu, IP adresini SİYAH olarak sıraladı.
Rajesh S

1
+1 Bu sayfadaki en kolay çözümdür. @RajeshS belki de "ayarlanmış" kelimesini cevabınızda "bitişik" olarak değiştirir - Text To Columnorada bulunan sütunlardan birini kastettiniz . @MaxW, düzen sadece gösteri içindir. Orijinal IP'nin sıralanmasını istiyorsanız sadece 2. adımı yok sayın. Kabul edilen cevaptaki büyük "VALUE (TRIM (MID (SUBSTITUTE)" formülü), 'Sütunlara Metin' ile değiştirilmelidir ve cevabın geri kalanı esas olarak bununla aynıdır.
mcalex

9

İşte bir VBA işlevi aynı sorunu çözmek için bir süre önce yazdım. Doğru şekilde sıralanan bir IPv4 adresinin yastıklı versiyonunu oluşturur.

Function SortAddress(Address As String)                     '   format address as XXX.XXX.XXX.XXX to permit sorting

Dim FirstByte As Integer, LastByte As Integer, I As Integer

SortAddress = ""
FirstByte = 1

For I = 0 To 2                                          '   process the first three bytes

    LastByte = InStr(FirstByte, Address, ".")           '   find the dot
                                                        '   append the byte as 3 digits followed by dot
    SortAddress = SortAddress & Format(Mid(Address, FirstByte, LastByte - FirstByte), "000\.")

    FirstByte = LastByte + 1                            '   shift the start pointer

Next I

SortAddress = SortAddress & Format(Mid(Address, FirstByte), "000") ' process the last byte

End Function

Basit örnek:

Sonuç

Sonuç

Formüller

Formüller

'Sıralanabilir' sütununa göre sıralayabilir ve gizleyebilirsiniz.


4
Sadece sıralanabilir IP adresinin asıl adresinden farklı bir adres olarak ayrıştırılacağını belirtmek istiyorum (çünkü bazı aptallar bunları sekizli olarak yorumlamayı seçti). Bu yüzden onları sadece sıralama için kullanın ve bunları uygun IP'ler olarak kabul etmeyin.
CodesInChaos

Eğer vba'yı çıkaracaksanız, niçin sadece sıralama yapmasın, vba'nın neden sıralama yapması gerekmiyor
Richard Tingle

1
@RichardTingle 1. Bu (biraz) daha fazla iş 2. Listeyi farklı anlarda birkaç farklı şekilde sıralamak isteyebilirim
grahamj42

6

İşte tablonuzun sadece 1 sütununu alacak ve IPv4 adresini 10 numaralandırmasına dönüştürecek bir cevap.

Verilerinizi "M" sütununa yerleştirdiğiniz için, bu M2 hücresinde başlar (etiket M1'dir). Kod olarak kodlamak tek bir korkunç karmaşa verir, bu yüzden blockquote kullandım:

= INT (SOL (M2, FIND (".", M2) - 1)) * 256 ^ 3 + INT (MID (M2, FIND (".", M2) + 1, FIND (".", M2, FIND) (".", M2) + 1) - FIND (".", M2) -1)) * 256 ^ 2 + INT (MID (M2, FIND (".", M2, FIND (".", M2) + 1) + 1, FIND (".", M2, FIND (".", M2, FIND (".", M2) + 1) + 1) - FIND (".", M2, FIND ("." , M2) + 1) -1)) * 256 + INT (SAĞ (M2, LEN (M2) - FIND (".", M2, FIND (".", M2, FIND (".", M2) + 1) ) + 1)))

Tam olarak en kolay okunabilen formül değil, ancak hücrenize kopyalayıp yapıştırabilirsiniz (tercihen N2 veya ilk IP adresinizle aynı satırdaki başka bir şey). IP adresinin uygun şekilde biçimlendirildiğini, formülde yapılan hata düzeltmesinin insan ayrıştırması için daha da kötü hale getireceğini varsaymaktadır.


3

Formül veya VBA kullanmak istemiyorsanız, Power Query'yi kullanın. (Excel 2016'da, Get & Transform, Excel 2010 veya 2013'te birlikte takip etmek için PowerQuery eklentisini yükleyin).

  1. Tabloyu PowerQuery düzenleyicisine getirin.
  2. "Sütunu Çoğalt" ı sağ tıklatarak sütunu çoğaltın
  3. Giriş sekmesinde, ayırıcıya göre "Sütun Böl". "Sınırlayıcının her kopyası" seçeneğini seçin
  4. Her sütunu sırala soldan sağa.
  5. Önceden bölünmüş sütunları seçin, sağ tıklayın ve kaldırın, kapatın ve yükleyin.

3

Oktetleri uygun sıralama sağlayan 3 haneli alanlara dönüştüren benzer bir astardır.

10.1.0.15olur 10001000015.

=LEFT(B85, FIND(".", B85) - 1) * 1000000000
+ MID(B85, FIND("x", SUBSTITUTE(B85, ".", "x", 1)) + 1, FIND("x", SUBSTITUTE(B85, ".", "x", 2)) - FIND(".", B85) - 1) * 1000000
+ MID(B85, FIND("x", SUBSTITUTE(B85, ".", "x", 2)) + 1, FIND("x", SUBSTITUTE(B85, ".", "x", 3)) - FIND("x", SUBSTITUTE(B85, ".", "x", 2)) - 1) * 1000
+ RIGHT(B85, LEN(B85) - FIND("x", SUBSTITUTE(B85, ".", "x", 3)))

3
Sıralamanın işe yaraması için, ilk okteti de baştaki sıfırlarla doldurmanız gerekir.
Blackwood

2

Söz konusu gibi, M sütunu M2'den başlayarak IP adresleridir (IPv4).

Herkesin cevabından iyi puanlar alarak, benim çözümüm. Sadece 1 yardımcı sütun gereklidir. IPv4 adreslerini 012.198.043.009biçimlendirmeye ve sıralamaya çalışırız :

  • 12.198.43.9için 12 198 43 9, sonra012.198.043.009

  1. Biçim IPv4 adresleri içine 012.198.043.009de girerek biçimi N2 ve aşağıya doğru doldurun:

    = TEXT( LEFT(SUBSTITUTE(M2, ".", "      "), 3    ), "000") & "."
    & TEXT(  MID(SUBSTITUTE(M2, ".", "      "), 8, 5 ), "000") & "."
    & TEXT(  MID(SUBSTITUTE(M2, ".", "      "), 15, 7), "000") & "."
    & TEXT(RIGHT(SUBSTITUTE(M2, ".", "      "), 3    ), "000")
    
  2. Sütuna N göre sırala


Açıklama

By SUBSTITUTEnoktayı ing . 6 boşluklarla onlar doğru bir şekilde çıkarıldı, böylece biz aşağıdakileri elde edersiniz:

                   |123456789|123546789|123456789|
1.1.1.1         ->  1      1      1      1
11.11.11.11     ->  11      11      11      11
111.111.111.111 ->  111      111      111      111
                    =1=    ==2==  ===3===
  • Karakter 1-3, yalnızca ilk kısmı içerir ve içerir.
  • Karakter 8-12 ve sadece ikinci kısmı içerir.
  • Karakter 15-21 içerir ve sadece üçüncü kısmı içerir.
  • En fazla 3 karakter içerir ve sadece dördüncü kısmı içerir.

Ve sonra, her bir parçayı çıkartıp formatlayın TEXT(..., "000").


2

Windows'ta Excel'in en son bir sürümünü kullanıyorsanız, IP adresinin 32 bit ondalık değerini hesaplamak için aşağıdaki formülü kullanabilirsiniz.

=SUMPRODUCT(FILTERXML("<I><o v="""&SUBSTITUTE([@ipbase],".","""/><o v=""")&"""/></I>","//o/@v"),{16777216;65536;256;1})

Daha sonra türetilmiş ondalık değeri kullanarak sıralama yapabilirsiniz. Değiştirin [@ipbase]geçerli IP4 adresinin hücre konumu ile.

"FILTERXML" işlevi yalnızca Windows'ta çalışır, bu nedenle başka bir işletim sistemi kullanıyorsanız şansınız kalmaz.


0

Ayrıca size alfa sıralaması için IP (000.000.000.000) dolgulu bir format verecek tek bir gömleğe de sahibim.

= 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")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.