จัดเรียงคอลัมน์ Excel ตามที่อยู่ IP


17

ฉันมีสเปรดชีต Excel ของ Excel ที่ค่อนข้างใหญ่ (มากกว่า 200 แถว) ซึ่งแสดงรายการในเครือข่ายของฉัน (เช่นเครื่องพิมพ์เซิร์ฟเวอร์เวิร์กสเตชันโปรเจ็คเตอร์เครือข่าย ฯลฯ ) และหนึ่งในคอลัมน์แรกคือฟิลด์ที่อยู่ IP ซึ่งใช้แบบฟอร์ม 192.168.x.yซึ่งใช้รูปแบบ ปัญหาของฉันเมื่อฉันพยายามที่จะเรียงลำดับมันคือการที่มันจะไป (เป็นตัวอย่าง) จากการ192.168.0.85 192.168.0.9สิ่งที่ผมอยากจะเห็นมันเรียงลำดับขึ้นอยู่กับ 3 octets แรกแล้ว octet ที่ผ่านมามีเหตุผล (เช่น.1, .2, .3ฯลฯ ) เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร

คำตอบ:


19

ดังที่ nixda กล่าวไว้ในความคิดเห็นคอลัมน์ผู้ช่วยจะทำให้เป็นไปได้ คุณมีสองทางเลือกในการบำรุงรักษาแผ่นงานภายหลัง:

  • เพิ่ม IP ใหม่ทั้งหมดในคอลัมน์ตัวช่วยแยก
  • ทำซ้ำขั้นตอน Text-to-Column สำหรับการเพิ่มใหม่

นี่คือขั้นตอน:

  1. เลือกคอลัมน์ IP ของคุณแล้วคลิกData>Text-to-Columns ข้อความเป็นคอลัมน์

  2. เลือกตัวเลือก Delimted และคลิกถัดไป ตรวจสอบช่องทำเครื่องหมายและป้อนระยะเวลาOther .คลิกถัดไป เลือก  เป็นตัวคั่น

  3. เก็บคอลัมน์ทั้งหมดเก็บไว้เป็นทั่วไปคลิกไอคอนช่วงเพื่อแก้ไขDestinationส่วน เปลี่ยนปลายทาง 1

  4. เลือกคอลัมน์ที่คุณต้องการให้ข้อความใหม่ปรากฏขึ้น กดปุ่ม Enter เปลี่ยน dest 2

  5. ตรวจสอบให้แน่ใจช่วงของคุณจะถูกเลือกและคลิก>Data Sortป้อนเกณฑ์การเรียงลำดับ เพิ่มระดับสำหรับแต่ละ octet ต่อไป การเรียงลำดับ

  6. นี่คือผลลัพธ์สุดท้าย: ผลลัพธ์


@nixda จ้ะช้าช้า: P หวังว่าฉันสามารถโยนตัวแทนของคุณเช่นกัน
ลุคแคนาดา

ขออภัย @nixda! การเพิ่มคำตอบเป็นสิ่งผิดกฎหมายหรือไม่?
rishimaharaj

มันใช้งานได้ดี ... ถึงเวลาที่คุณสองคนจะต้องสู้กับตัวแทน 15 คะแนนพิเศษ
ลุคแคนาดา

7

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่เพื่อประโยชน์ของการแก้ปัญหาการทำงานที่ฉันนำเสนอต่อไปนี้

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

=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")

2
รักสิ่งนี้ที่สมบูรณ์แบบ สูตรเดี่ยวหนึ่งคอลัมน์ "ผู้ช่วย" ขอบคุณ
Earls

เช่นเดียวกับสูตร Excel ทั้งหมดคุณอาจต้องใช้เครื่องหมายอัฒภาค ( ;) แทนเครื่องหมายจุลภาค ( ,) ตามการตั้งค่าภูมิภาคของระบบ
สกอตต์

1
คุณสามารถออกจากช่วงเวลาที่ต่อกัน ( …&"."&…) และรับตัวเลขธรรมดาสิบสองหลักเช่น 010121008030 ซึ่งจะเรียงลำดับได้อย่างถูกต้อง
สกอตต์

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

ฉันไม่สามารถทดสอบได้ในตอนนี้ (ไม่ใช่ที่ทำงาน) แต่ฉันจะลองเมื่อฉันไปทำงาน ดูเหมือนว่ามันจะปรับได้มากขึ้นสำหรับรายการที่ยาวขึ้นโดยเฉพาะถ้าฉันเพิ่มปุ่ม 'Resort' เพื่อเรียกใช้แมโครนี้
Canadian Luke

@CanadianLuke คุณยังสามารถสร้างคอลัมน์ BigIntIP จากนั้นคุณสามารถเรียงลำดับที่อยู่ IP ทั้งหมดและในทางกลับกัน AZ
STTR

มันใช้งานได้ดี! คำขอเดียวของฉันคือจะนำคอลัมน์เก่ามาใช้ใหม่เมื่อเพิ่มเครื่องพิมพ์
Canadian Luke

@CanadianLuke หากคุณเปลี่ยนชื่อเรื่อง "IP oct 1" ดังนั้นคอลัมน์จะถูกเพิ่มทางด้านขวา และของเก่ายังคงอยู่ นี่คือถ้าคุณต้องการเรื่องราว ตัวอย่างเช่นเมื่อย้ายจากเครือข่ายหนึ่งไปยังอีกช่วงหนึ่ง บางทีฉันอาจจะไม่ได้ค่อนข้างเข้าใจคำถาม ...
STTR

0

นอกเหนือจากคำตอบของจอห์นโฮเมอร์แล้วฉันยังมีสูตรที่ใช้กับแอปพลิเคชั่นเบอร์ของ Apple ด้วยเพราะTEXTฟังก์ชั่นไม่มีอยู่จริง ผ่านการทดสอบใน Google เอกสารแล้ว

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