네트워크에있는 항목 (예 : 프린터, 서버, 워크 스테이션, 네트워크 프로젝터 등)을 나열하는 상당히 큰 (200 행 이상) Excel 스프레드 시트가 있으며 첫 번째 열 중 하나는 IP 주소 필드 192.168.x.y
입니다. 정렬하려고 할 때 내 문제는 (예를 들어)에서로 이동 192.168.0.85
한다는 것 192.168.0.9
입니다. 내가보고 싶은 것은 그것이 처음 3 옥텟에 따라 분류하고, 논리적으로 다음 마지막 옥텟 (즉 .1
, .2
, .3
, 등). 이게 가능해? 그렇다면 어떻게?
답변
nixda가 의견에서 언급했듯이 도우미 열은이를 가능하게합니다. 이후에 시트를 유지 보수하는 두 가지 옵션이 있습니다.
- split helper 열에 모든 새 IP를 추가하십시오.
- 새로운 추가를 위해 텍스트-컬럼 절차를 반복하십시오.
절차는 다음과 같습니다.
-
IP 열을 선택하고
Data
>를 클릭하십시오Text-to-Columns
-
Delimted 옵션을 선택하고 Next를 클릭하십시오. 체크
Other
체크 박스를하고 기간을 입력.
. 다음을 클릭하십시오.
-
모든 열을 유지하고 일반으로 유지하고 범위 아이콘을 클릭하여
Destination
섹션 을 편집 하십시오.
-
새 텍스트를 표시 할 열을 선택하십시오. Enter 키를 누르십시오.
-
범위가 선택되어 있는지 확인하고
Data
>를 클릭하십시오Sort
. 정렬 기준을 입력하십시오. 각 옥텟에 대한 레벨을 계속 추가하십시오.
-
최종 결과는 다음과 같습니다.
답변
나는 이것이 오래된 게시물이라는 것을 알고 있지만 작동하는 솔루션을 제공하기 위해 다음을 제시합니다.
이 수식을 인접한 셀에 넣고 IP 주소를 포함하는 셀 (이 예에서는 A1)을 가리 키도록 참조를 업데이트하십시오. 이 결과는 010.121.008.030과 비슷한 결과를 생성하며 알파벳순으로 (정확하게) 정렬 될 수 있습니다. 그런 다음 새 열의 너비를 0으로 설정하십시오. 한 잔의 커피를 즐길 시간입니다.
=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")
답변
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
답변
John Homer의 답변 외에도 TEXT
함수가 존재하지 않기 때문에 Apple의 Numbers 응용 프로그램에서도 작동하는 수식을 제공합니다 . 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)