IPアドレスによるExcel列の並べ替え


17

ネットワーク内のアイテム(プリンター、サーバー、ワークステーション、ネットワークプロジェクターなど)を一覧表示するかなり大きな(200行を超える)Excelスプレッドシートがあり、最初の列の1つはIPアドレスフィールド192.168.x.yです。ソートしようとすると、問題は(例として)からに192.168.0.85なり192.168.0.9ます。私が見たいのは、それは論理的に(つまり、最後のオクテット、その後、最初の3つのオクテットに基づいてソートされ.1.2.3、など)。これは可能ですか?もしそうなら、どのように?

回答:


19

コメントでnixdaが言及したように、ヘルパー列はこれを可能にします。シートを後で維持するための2つのオプションがあります。

  • スプリットヘルパー列にすべての新しいIPを追加します。
  • 新しい追加については、テキストから列への手順を繰り返します。

手順は次のとおりです。

  1. IP列を選択し、Data> をクリックしますText-to-Columns テキストから列へ

  2. Delimtedオプションを選択し、Nextをクリックします。チェックOtherボックスをオンにして、期間を入力します.。次へをクリックします。 を選択します。 区切り文字として

  3. すべての列を保持し、一般のままにして、範囲アイコンをクリックしてDestinationセクションを編集します。 変更先1

  4. 新しいテキストを表示する列を選択します。Enterキーを押します。 変更先2

  5. 範囲が選択されていることを確認し、Data> をクリックしますSort。ソート基準を入力します。各オクテットのレベルを追加し続けます。 仕分け

  6. 最終結果は次のとおりです。 結果


@nixdaええ、遅い突く:P私もあなたの方法でいくつかの担当者を投げることができます
カナダのルークREINSTATE MONICA

すみません、@ nixda!あなたもあなたの答えを追加することは違法ですか?
リシマハラジ

まあ、それはうまくいきました...あなた2人が余分な15 repポイントを争う時間
カナダのルークREINSTATE MONICA

7

これは古い投稿であることがわかりましたが、実用的なソリューションを提供するために、以下を紹介します。

この式を隣接セルに入力し、参照を更新して、IPアドレス(この例ではA1)を含むセルを指すようにします。これにより、010.121.008.030のような結果が生成され、アルファベット順に(正しく)ソートできます。次に、新しい列の幅をゼロに設定します。一杯のコーヒーを楽しむ時間。

=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
これが大好き、完璧。単一の式、「ヘルパー」単一列。ありがとう。
アールズ

すべてのExcel数式と同様に、システムの地域設定に基づいて、;コンマ(,)ではなくセミコロン()を使用する必要がある場合があります。
スコット

1
連結されたピリオド(…&"."&…)を省略し、010121008030のような12桁の単純な数字を取得することもできます。これも正しく並べ替えられます(ただし、並べ替え機能により迷惑なダイアログボックスが表示される場合があります)。
スコット

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

私は今のところ(仕事中ではなく)それをテストすることはできませんが、仕事に着いたらそれを試します。それのようなこのルックスは、私はちょうどこのマクロを実行するための「リゾート」ボタンを追加する場合は特に、長いリストに、より適応だろう
カナダのルークREINSTATE MONICA

@CanadianLuke列BigIntIPを作成することもできます。その後、すべてのIPアドレスを並べ替えることができ、逆もまた同様です。
STTR

これはうまくいきます!プリンタが追加された私の唯一の要求は、それが古い列を再利用していることだろう
カナダのルークREINSTATE MONICAを

@CanadianLukeサブジェクトの名前を「IP oct 1」に変更すると、列が右側に追加されます。そして、古いままです。これは、ストーリーが必要な場合です。たとえば、あるネットワークから別の範囲に移行する場合。たぶん私は質問をよく理解していなかったかもしれません
...-STTR

0

ジョン・ホーマーの答えに加えて、ここでは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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.