Làm cách nào để có được các ô trong Excel có chứa địa chỉ IP để sắp xếp đúng?


34

Tôi hiện đang làm việc với một danh sách lớn các địa chỉ IP (hàng ngàn trong số chúng).

Tuy nhiên, khi tôi sắp xếp cột chứa địa chỉ IP, chúng không sắp xếp theo cách trực quan hoặc dễ theo dõi.

Ví dụ: nếu tôi nhập Địa chỉ IP như sau:

nhập mô tả hình ảnh ở đây

Và sau đó nếu tôi sắp xếp theo thứ tự tăng dần tôi sẽ nhận được điều này:

nhập mô tả hình ảnh ở đây

Có cách nào để tôi định dạng các ô sao cho, ví dụ: địa chỉ IP 17.255.253,65 xuất hiện sau 1.128.96.254 và trước 103.236.162.56 khi được sắp xếp theo thứ tự tăng dần?

Nếu không, có cách nào khác để tôi đạt được mục đích cuối cùng này không?


3
Sắp xếp không bị ảnh hưởng bởi định dạng ô.
Blackwood

1
Điều đó thật thú vị - Tôi khá chắc chắn rằng định dạng của một tế bào sẽ ảnh hưởng đến việc sắp xếp trong một số trường hợp và nghĩ rằng có lẽ đây là một trong số đó. Cảm ơn bạn đã làm rõ!
Monomeeth

1
Và Bruce giúp bạn nếu bất kỳ điều này cần xử lý địa chỉ IPv6!
Criggie

Câu trả lời:


42

Như bạn có thể nhận ra, địa chỉ IP của bạn được coi là văn bản chứ không phải số. Chúng đang được sắp xếp dưới dạng văn bản, có nghĩa là các địa chỉ bắt đầu bằng "162" sẽ đến trước các địa chỉ bắt đầu bằng "20." (vì ký tự "1" xuất hiện trước ký tự "2".

Bạn có thể sử dụng công thức được cung cấp trong câu trả lời này: https://stackoverflow.com/a/31615838/4424957 để chia địa chỉ IP thành các phần của nó.

Nếu địa chỉ IP của bạn nằm trong cột A, hãy thêm các cột BE như hiển thị bên dưới.

nhập mô tả hình ảnh ở đây

Nhập công thức

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

trong ô B2 và sao chép nó vào các cột BE trong tất cả các hàng để lấy bốn phần của mỗi địa chỉ IP. Bây giờ sắp xếp toàn bộ phạm vi theo các cột B đến E (theo thứ tự đó) như dưới đây:

nhập mô tả hình ảnh ở đây

Nếu bạn không muốn xem các cột trợ giúp (BE), bạn có thể ẩn chúng.


12
Thay vì chia thành bốn cột, có lẽ tốt hơn là "nối" các byte như first*256^3+second*256^2+third*256+fourthtrong một cột?
Ruslan

Đặc biệt là địa chỉ IPv4 thực sự chỉ là số 32 bit. Bốn cách hiển thị địa chỉ IP 4 bit chỉ dành cho khả năng đọc của con người.
Kat

@Kat Tôi đồng ý rằng nó sẽ hoạt động, và nó chỉ yêu cầu một cột trợ giúp thay vì bốn. Nhưng công thức trong một cột đó sẽ khá dài, vì vậy tôi đã chọn sử dụng bốn cột (tôi có thể sẽ ẩn chúng trong mọi trường hợp).
Blackwood

10

Giải pháp đơn giản nhất, 3 bước tôi có thể gợi ý cho bạn là ,,,

  1. Chọn Cột Địa chỉ IP, áp dụng lệnh Văn bản cho Cột .

  2. Trong cột liền kề viết Công thức này

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

  3. Cuối cùng Sắp xếp theo thứ tự tăng dần.

Kiểm tra Ảnh chụp màn hình.

nhập mô tả hình ảnh ở đây

Lưu ý:

Màu đỏ là địa chỉ IP gốc (trong Cột A).

Màu xanh lá cây sau khi áp dụng Văn bản cho Cột (Cột B đến E).

Màu đen là sau khi áp dụng Ghép & Sắp xếp (Cột F).

Lý do rất đơn giản là địa chỉ IP ban đầu là Dữ liệu văn bản và Excel không chấp nhận bất kỳ Định dạng ô nào để biến nó thành Số.

Hy vọng điều này sẽ giúp bạn.


4
Thật kinh khủng. Bạn không bao giờ muốn trộn lẫn dữ liệu từ các hàng khác nhau.
MaxW

@MaxW ,, Tôi không hiểu chính xác những gì bạn muốn nói !!
Rajesh S

2
Anh ta có nghĩa là bạn nên bao gồm cột A ban đầu trong sắp xếp, vì vậy các địa chỉ iP sẽ giống nhau trên mỗi hàng.
Bandersnatch

1
Không ,,, không có gì sai tôi đã làm ,, yêu cầu của OP là Sắp xếp Địa chỉ IP theo thứ tự tự nhiên ,, (Số) và Cột A trong RED không được sắp xếp. Cột F đã sắp xếp địa chỉ IP bằng màu đen.
Rajesh S

1
+1 Đây là giải pháp dễ nhất trên trang. @RajeshS có thể thay đổi từ 'được điều chỉnh' thành 'liền kề' trong câu trả lời của bạn - tôi nghĩ bạn có nghĩa là một trong những Text To Columncột ở đó. @MaxW, cách bố trí chỉ để trình diễn. Nếu bạn muốn IP ban đầu được sắp xếp chỉ cần bỏ qua bước 2. Công thức "GIÁ TRỊ (TRIM (MID (SUBSTITUTE") trong câu trả lời được chấp nhận nên được thay thế bằng 'Chuyển văn bản thành cột' và phần còn lại của câu trả lời về cơ bản giống như thế này.
mcalex

9

Đây là một chức năng VBA tôi đã viết cách đây một thời gian để giải quyết vấn đề tương tự. Nó tạo ra một phiên bản đệm của một địa chỉ IPv4 sắp xếp chính xác.

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

Ví dụ đơn giản:

Kết quả

Kết quả

Công thức

Công thức

Bạn có thể sắp xếp theo cột 'Sắp xếp' và ẩn nó.


4
Tôi chỉ muốn lưu ý rằng địa chỉ IP có thể sắp xếp sẽ phân tích thành một địa chỉ khác với địa chỉ ban đầu (vì một số kẻ ngốc đã chọn giải thích chúng là bát phân). Vì vậy, chỉ sử dụng chúng để sắp xếp và không coi chúng là IP thích hợp.
CodeInChaos

Nếu bạn định kéo vba ra, tại sao không có vba thực hiện việc phân loại
Richard Tingle

1
@RichardTingle 1. Đó là (một chút) công việc nhiều hơn 2. Tôi có thể muốn sắp xếp danh sách theo nhiều cách khác nhau vào những thời điểm khác nhau
grahamj42

7

Dưới đây là câu trả lời sẽ chỉ mất 1 cột trong bảng của bạn và chuyển đổi địa chỉ IPv4 thành đánh số cơ sở 10.

Vì bạn đang đặt dữ liệu của mình vào cột "M", điều này bắt đầu trong ô M2 (M1 là nhãn). Đóng gói nó dưới dạng mã cho một mớ hỗn độn khủng khiếp, vì vậy tôi đã sử dụng blockquote:

= INT (TRÁI (M2, TÌM (".", M2) - 1)) * 256 ^ 3 + INT (MID (M2, TÌM (".", M2) + 1, TÌM (".", M2, TÌM (".", M2) + 1) - TÌM (".", M2) -1)) * 256 ^ 2 + INT (MID (M2, TÌM (".", M2, TÌM (".", M2) + 1) + 1, TÌM (".", M2, TÌM (".", M2, TÌM (".", M2) + 1) + 1) - TÌM (".", M2, TÌM ("." , M2) + 1) - 1)) * 256 + INT (ĐÚNG (M2, LEN (M2) - TÌM (".", M2, TÌM (".", M2, TÌM (".", M2) + 1 ) + 1)))

Không chính xác là công thức dễ đọc nhất, nhưng bạn chỉ có thể sao chép và dán vào ô của mình (tốt nhất là N2 hoặc một cái gì đó khác trong cùng hàng với địa chỉ IP đầu tiên của bạn). Nó giả định định dạng đúng của địa chỉ IP là sửa lỗi trong công thức sẽ làm cho việc phân tích cú pháp của con người trở nên tồi tệ hơn.


3

Nếu bạn không muốn sử dụng công thức hoặc VBA, hãy sử dụng Power Query. (Trong Excel 2016, Get & Transform, trong Excel 2010 hoặc 2013 cài đặt bổ trợ PowerQuery để làm theo).

  1. Đưa bảng vào trình soạn thảo PowerQuery.
  2. Sao y cột bằng cách nhấp chuột phải vào "Cột trùng lặp"
  3. "Tách cột" theo dấu phân cách, trên tab Trang chủ. Chọn "Mỗi lần xuất hiện của dấu phân cách"
  4. Sắp xếp từng cột. từ trái sang phải.
  5. Chọn các cột được phân chia trước đó, nhấp chuột phải và loại bỏ, đóng và tải.

3

Đây là một lớp lót tương tự biến đổi các octet thành các trường có 3 chữ số cho phép sắp xếp hợp lý.

10.1.0.15trở thành 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ắp xếp hoạt động, bạn cũng cần phải đệm octet đầu tiên với các số 0 đứng đầu.
Blackwood

2

Như được hiển thị trong câu hỏi, cột M là địa chỉ IP (IPv4), bắt đầu từ M2.

Bằng cách nhận được những điểm tốt từ câu trả lời của mọi người, đây là giải pháp của tôi. Chỉ cần 1 cột trợ giúp. Chúng tôi cố gắng định dạng các địa chỉ IPv4 thành 012.198.043.009định dạng và sau đó sắp xếp chúng:

  • 12.198.43.9đến 12 198 43 9, sau đó012.198.043.009

  1. Định dạng địa chỉ IPv4 thành 012.198.043.009định dạng bằng cách nhập N2 và điền xuống:

    = 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ắp xếp theo cột N


Giải thích

Bằng cách nhập SUBSTITUTEvào dấu chấm . với 6 khoảng trắng , chúng ta có được những điều sau đây, để chúng có thể được trích xuất chính xác:

                   |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===
  • Ký tự 1-3 chứa và chỉ chứa phần đầu tiên.
  • Ký tự 8-12 chứa và chỉ chứa phần thứ hai.
  • Ký tự 15-21 chứa và chỉ chứa phần thứ ba.
  • 3 ký tự bên phải chứa và chỉ chứa phần thứ tư.

Và sau đó, trích xuất và định dạng từng phần bằng TEXT(..., "000").


2

Nếu bạn đang sử dụng phiên bản Excel gần đây trong Windows, bạn có thể sử dụng công thức sau để tính giá trị thập phân 32 bit của địa chỉ IP.

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

Sau đó, bạn có thể sắp xếp bằng cách sử dụng giá trị thập phân dẫn xuất. Thay thế [@ipbase]với vị trí ô của một địa chỉ IP4 hợp lệ.

Chức năng "FILTERXML" chỉ hoạt động trong Windows, vì vậy bạn sẽ không gặp may nếu bạn đang sử dụng một hệ điều hành khác.


0

Tôi cũng có một lớp lót sẽ cung cấp cho bạn IP định dạng đệm (000.000.000.000) để sắp xếp alpha.

= 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")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.