ฉันจะรับเซลล์ใน Excel ที่มีที่อยู่ IP เพื่อจัดเรียงอย่างถูกต้องได้อย่างไร


34

ฉันกำลังทำงานกับรายการที่อยู่ IP จำนวนมาก (หลายพันรายการ)

อย่างไรก็ตามเมื่อฉันจัดเรียงคอลัมน์ที่มีที่อยู่ IP พวกเขาจะไม่เรียงลำดับในวิธีที่ง่ายหรือติดตามได้ง่าย

ตัวอย่างเช่นหากฉันป้อนที่อยู่ IP ดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

แล้วถ้าฉันเรียงลำดับจากน้อยไปมากฉันจะได้รับสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

มีวิธีที่ฉันจะจัดรูปแบบเซลล์เพื่อให้ตัวอย่างเช่นที่อยู่ IP ของ 17.255.253.65 ปรากฏขึ้นหลังจาก 1.128.96.254 และก่อน 103.236.162.56 เมื่อเรียงลำดับจากน้อยไปหามาก?

ถ้าไม่มีจะมีวิธีอื่นอีกไหมในการบรรลุเป้าหมายสูงสุดนี้?


3
การเรียงลำดับไม่ได้รับผลกระทบจากการจัดรูปแบบเซลล์
แบลควูด

1
น่าสนใจ - ฉันค่อนข้างแน่ใจว่ารูปแบบของเซลล์จะมีผลต่อการเรียงลำดับในบางกรณีและคิดว่านี่อาจเป็นหนึ่งในนั้น ขอขอบคุณสำหรับการชี้แจง!
Monomeeth

1
และบรูซช่วยคุณถ้าสิ่งใดสิ่งนี้ต้องการจัดการกับที่อยู่ IPv6!
Criggie

คำตอบ:


42

อย่างที่คุณอาจทราบอยู่ IP ของคุณจะถือว่าเป็นข้อความไม่ใช่ตัวเลข พวกเขาจะถูกจัดเรียงเป็นข้อความซึ่งหมายความว่าที่อยู่ที่ขึ้นต้นด้วย "162" จะมาก่อนที่อยู่ที่ขึ้นต้นด้วย "20" (เพราะตัวอักษร "1" มาก่อนตัวอักษร "2"

คุณสามารถใช้สูตรที่ให้ไว้ในคำตอบนี้: https://stackoverflow.com/a/31615838/4424957เพื่อแยกที่อยู่ IP ออกเป็นส่วนต่างๆ

หากที่อยู่ IP ของคุณอยู่ในคอลัมน์ A ให้เพิ่มคอลัมน์ พ.ศ. ตามที่แสดงด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ใส่สูตร

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

ในเซลล์ B2 และคัดลอกไปยังคอลัมน์ BE ในทุกแถวเพื่อรับสี่ส่วนของที่อยู่ IP แต่ละรายการ ตอนนี้จัดเรียงช่วงทั้งหมดตามคอลัมน์ B ถึง E (ตามลำดับ) ดังที่แสดงด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณไม่ต้องการเห็นคอลัมน์ตัวช่วย (BE) คุณสามารถซ่อนคอลัมน์ได้


12
แทนที่จะแยกเป็นสี่คอลัมน์อาจจะเป็นการดีกว่าถ้าคุณ "เชื่อมต่อ" ไบต์first*256^3+second*256^2+third*256+fourthในคอลัมน์เดียว
Ruslan

โดยเฉพาะอย่างยิ่งเนื่องจากที่อยู่ IPv4 เป็นเพียง 32 บิตเท่านั้น วิธีการแสดงหมายเลข 4 บิตสี่บิตสำหรับการอ่านของมนุษย์
Kat

@Kat ฉันยอมรับว่าจะใช้งานได้และต้องใช้เพียงหนึ่งคอลัมน์ผู้ช่วยแทนที่จะเป็นสี่คอลัมน์ แต่สูตรในคอลัมน์นั้นจะค่อนข้างยาวดังนั้นฉันเลือกที่จะใช้สี่คอลัมน์ (ฉันอาจซ่อนไว้ไม่ว่าในกรณีใด)
แบลควูด

10

3 ขั้นตอนที่ง่ายที่สุดในการแก้ปัญหาที่ฉันขอแนะนำให้คุณคือ ,,,

  1. เลือกคอลัมน์ที่อยู่ IP ใช้คำสั่งText to Column

  2. ในคอลัมน์ที่อยู่ติดกันเขียนสูตรนี้

    = CONCATENATE (B3 "" C3 "" D3 "" E3)

  3. ในที่สุดก็เรียงลำดับจากน้อยไปมาก

ตรวจสอบภาพหน้าจอ

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ:

Redคือที่อยู่ IP ดั้งเดิม (ในคอลัมน์ A)

สีเขียวหลังจากปรับใช้ข้อความเป็นคอลัมน์ (คอลัมน์ B ถึง E)

สีดำคือใช้หลังจากเรียงต่อกัน & เรียงลำดับ (คอลัมน์ F)

เหตุผลนั้นง่ายมาก แต่เดิมที่อยู่ IP คือ Data Text และ Excel ไม่ยอมรับ Cell Format ใด ๆ เพื่อเปลี่ยนเป็น Number

หวังว่านี่จะช่วยคุณได้


4
อันนี้แย่มาก คุณไม่ต้องการรวมข้อมูลจากแถวที่แตกต่างกัน
MaxW

@ MaxW ,, ฉันไม่ได้รับสิ่งที่คุณต้องการจะพูด !!
Rajesh S

2
เขาหมายความว่าคุณควรรวมคอลัมน์ต้นฉบับ A ไว้ในการเรียงลำดับดังนั้นที่อยู่ IP จะเหมือนกันในแต่ละแถว
Bandersnatch

1
ไม่ ,,, ไม่มีอะไรผิดฉันต้องการ OP คือการเรียงลำดับที่อยู่ IP ในการเรียงลำดับธรรมชาติ (หมายเลข) และคอลัมน์ A ใน RED ไม่ได้ถูกจัดเรียง คอลัมน์ F มีที่อยู่ IP เรียงลำดับเป็นสีดำ
Rajesh S

1
+1 นี่คือทางออกที่ง่ายที่สุดในหน้า @RajeshS อาจเปลี่ยนคำว่า 'ปรับ' เป็น 'ติดกับ' ในคำตอบของคุณ - ฉันคิดว่าคุณหมายถึงหนึ่งในText To Columnคอลัมน์ที่มี @ MaxW เค้าโครงเป็นเพียงการสาธิต หากคุณต้องการให้ IP ดั้งเดิมเรียงลำดับเพียงแค่ข้ามขั้นตอนที่ 2 สูตร "VALUE (TRIM (MID (SUBSTITUTE)" ขนาดใหญ่) ในคำตอบที่ยอมรับควรถูกแทนที่ด้วย 'Text To Columns' และคำตอบที่เหลือก็เป็นเช่นนี้
mcalex

9

นี่คือฟังก์ชั่น VBA ฉันได้เขียนบางเวลาที่ผ่านมาเพื่อแก้ปัญหาเดียวกัน มันสร้างเวอร์ชันที่อยู่เบาะของ IPv4 ซึ่งเรียงลำดับอย่างถูกต้อง

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

ตัวอย่างง่ายๆ:

ผล

ผล

สูตร

สูตร

คุณสามารถจัดเรียงตามคอลัมน์ 'เรียงได้' และซ่อน


4
ฉันแค่ต้องการที่จะทราบว่าที่อยู่ IP ที่เรียงได้จะแยกเป็นที่อยู่ที่แตกต่างจากที่อยู่เดิม (เพราะคนงี่เง่าบางคนเลือกที่จะตีความเหล่านั้นเป็นแปด) ดังนั้นใช้สำหรับการเรียงลำดับและไม่ถือว่าเป็น IP ที่เหมาะสม
CodesInChaos

หากคุณกำลังจะดึง vba ออกมาทำไมไม่เพียงแค่มี vba ทำการเรียงลำดับ
Richard Tingle

1
@RichardTingle 1. มันมีมากขึ้น (น้อยไปกว่า) 2. ฉันอาจต้องการเรียงลำดับรายการในหลาย ๆ วิธีในช่วงเวลาที่แตกต่างกัน
grahamj42

6

นี่คือคำตอบที่จะใช้เวลาเพียง 1 คอลัมน์ในตารางของคุณและแปลงที่อยู่ IPv4 ให้เป็นเลขฐาน 10

เมื่อคุณใส่ข้อมูลลงในคอลัมน์ "M" สิ่งนี้จะเริ่มต้นในเซลล์ M2 (M1 เป็นฉลาก) การห่อหุ้มมันเป็นรหัสทำให้เกิดความวุ่นวายอย่างมากดังนั้นฉันจึงใช้ blockquote:

= INT (ซ้าย (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) + 1) - FIND (".", M2, FIND ("." , M2) + 1) - 1)) * 256 + INT (ขวา (M2, LEN (M2)) - FIND (".", M2, FIND (".", M2, FIND (".", M2) + 1 ) + 1)))

ไม่ใช่สูตรที่อ่านง่ายที่สุด แต่คุณสามารถคัดลอกและวางลงในเซลล์ของคุณได้ (ควรเป็น N2 หรืออย่างอื่นในแถวเดียวกับที่อยู่ IP แรกของคุณ) มันสันนิษฐานว่าการจัดรูปแบบที่เหมาะสมของที่อยู่ IP เป็นการแก้ไขข้อผิดพลาดในสูตรจะทำให้แย่ยิ่งขึ้นสำหรับการแยกวิเคราะห์ของมนุษย์


3

หากคุณไม่ต้องการใช้สูตรหรือ VBA ให้ใช้ Power Query (ใน Excel 2016, Get & Transform, ใน Excel 2010 หรือ 2013 ติดตั้ง Add-in PowerQuery เพื่อทำตาม)

  1. นำตารางลงในตัวแก้ไข PowerQuery
  2. ทำซ้ำคอลัมน์โดยคลิกขวาที่ "ทำซ้ำคอลัมน์"
  3. "แยกคอลัมน์" โดยตัวคั่นบนแท็บหน้าแรก เลือก "ตัวคั่นแต่ละตัวเกิดขึ้น"
  4. เรียงลำดับแต่ละคอลัมน์ Asc จากซ้ายไปขวา.
  5. เลือกคอลัมน์ที่แบ่งก่อนหน้านี้คลิกขวาและลบปิดและโหลด

3

เป็นซับที่คล้ายกันที่เปลี่ยน octet เป็นฟิลด์ 3 หลักที่ช่วยให้การเรียงลำดับที่เหมาะสม

10.1.0.1510001000015จะกลายเป็น

=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
เพื่อให้การเรียงลำดับใช้งานได้คุณจะต้องวาง octet แรกด้วยศูนย์นำหน้าด้วย
แบลควูด

2

ดังที่ปรากฏในคำถามคอลัมน์ Mคือที่อยู่ IP (IPv4) เริ่มต้นจาก M2

โดยการได้รับคะแนนที่ดีจากคำตอบของทุกคนนี่คือทางออกของฉัน ต้องการเพียง 1 คอลัมน์ตัวช่วยเท่านั้น เราพยายามจัดรูปแบบที่อยู่ IPv4 เป็น012.198.043.009รูปแบบจากนั้นจัดเรียง:

  • 12.198.43.9เพื่อ12 198 43 9แล้ว012.198.043.009

  1. จัดรูปแบบที่อยู่ IPv4เป็น012.198.043.009รูปแบบโดยการป้อนในN2และกรอกข้อมูลลงด้านล่าง:

    = 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. จัดเรียงตามคอลัมน์ N


ชี้แจง

ด้วยการSUBSTITUTEอิงจุดที่. มีช่องว่าง 6 รายการเราจะได้รับสิ่งต่อไปนี้เพื่อให้สามารถแยกได้อย่างถูกต้อง

                   |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===
  • อักขระ 1-3 มีและประกอบด้วยส่วนแรกเท่านั้น
  • อักขระ 8-12 มีและประกอบด้วยส่วนที่สองเท่านั้น
  • อักขระ 15-21 มีและประกอบด้วยส่วนที่สามเท่านั้น
  • อักขระสูงสุด 3 ตัวมีเพียงส่วนที่สี่เท่านั้น

TEXT(..., "000")แล้วแยกและจัดรูปแบบโดยแต่ละส่วน


2

หากคุณใช้ Excel รุ่นล่าสุดใน Windows คุณสามารถใช้สูตรต่อไปนี้เพื่อคำนวณค่าทศนิยม 32 บิตของที่อยู่ IP

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

คุณสามารถเรียงลำดับโดยใช้ค่าทศนิยมที่ได้รับ แทนที่[@ipbase]ด้วยตำแหน่งเซลล์ของที่อยู่ IP4 ที่ถูกต้อง

ฟังก์ชั่น "FILTERXML" ใช้งานได้ใน Windows เท่านั้นดังนั้นคุณจึงไม่โชคดีถ้าคุณใช้ระบบปฏิบัติการอื่น


0

ฉันยังมีสายการบินหนึ่งที่จะให้คุณรูปแบบเบาะ IP (000.000.000.000) สำหรับการเรียงลำดับอัลฟา

= 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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.