• ベストアンサー

ipアドレスを並び替えたい

普通は桁数をそろえますが、 xxx.xxx.xxx.11 xxx.xxx.xxx.101 をちゃんと昇順にソートしようとすれば何かいい方法ありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

ユーザー定義関数を使用する方法です。 ExcelということですがVerが不明なので、一応97から対応するようにSplit関数を 使っていません。 使用方法は、A1にIPアドレスがあるとして =IpAdd(A1) と入力すると3桁ずつの IPアドレスが表示されます。  コードの設定方法: Alt + F11 を押し、メニューから[挿入]->[標準モジュール]で開いたウインドウに 下記コードを貼り付けます。 Function IpAdd(Ip As String) As String   Dim StrIp As String   Dim s As String   If IsEmpty(Ip) Then     IpAdd = ""     Exit Function   End If   StrIp = Mid("00" & Ip, InStr(Ip, ".") - 1, 4)   s = Right(Ip, Len(Ip) - InStr(Ip, "."))   StrIp = StrIp & Mid("00" & s, InStr(s, ".") - 1, 4)   s = Right(s, Len(s) - InStr(s, "."))   StrIp = StrIp & Mid("00" & s, InStr(s, ".") - 1, 4)   s = Right(s, Len(s) - InStr(s, "."))   StrIp = StrIp & Right("00" & s, 3)   IpAdd = StrIp End Function

takkk
質問者

お礼

ありがとうございました。 ばっちりでございます!

その他の回答 (4)

  • Mozisan
  • ベストアンサー率43% (130/299)
回答No.5

#3です。 VB使ったja7awuさんがベターかと思いますが、 関数だけで求める方法です。 (でも、ピリオド位置を求めるセルが3列必要でしたし、やはり式がなが~くなります) B列~E列まで利用します。 B1:=FIND(".",A1,1) C1:=FIND(".",A1,B1+1) D1:=FIND(".",A1,C1+1) E1=TEXT(MID(A1,1,B1-1),"000")&"."&TEXT(MID(A1,B1+1,C1-B1-1),"000")&"."&TEXT(MID(A1,C1+1,D1-C1-1),"000")&"."&TEXT(MID(A1,D1+1,3),"000") それぞれ、=以下を貼り付けてください。 以下は#3、#4、この方法で使えますが、 整形ができたら、整形結果が入った列を選び、コピー、形式を選んで貼り付け-値 を行うと、式が消えるので、必要ない列を削除すればすっきりします。

takkk
質問者

お礼

ありがとうございました。 まだ前々述の方も試せてないですが、 マクロ使わない方法も欲しいので検討してみたいと思います。

  • Mozisan
  • ベストアンサー率43% (130/299)
回答No.3

エクセルですよね。 数値が3つなら簡単ですが、4つなのでちょいと手間がかかります。 方法は、各数値を3桁(000.000.000.000)形式に整え直すしかないと思います。 関数を使い一度に直す方法もありますが、 「区切り位置」を使い4つの数値に分解する方法を考えてみました。 1.ipアドレス列(A列とします)の右に4列挿入します。 2.ipアドレス列をコピーし、B列に貼り付けます。 3.B列を選び、メニューバー「データ」-「区切り位置」をクリックします。 4.「元データの形式」は上の「カンマや…」を選び「次へ」を押します。 5.「区切り文字」を「その他」にし、右にある資格の中に「.」(ピリオド)を入力します。「完了」を押します。 6.B~E列にピリオドで区切られていた数値が入ります。 7.AとB列の間に列を挿入します。 8.=TEXT(C1,"000")&"."&TEXT(D1,"000")&"."&TEXT(E1,"000")&"."&TEXT(F1,"000") と入力します。 9.コピーし、貼り付け先範囲を選び、貼り付けます。 10.B列で並び替えます。

takkk
質問者

補足

エクセルです。 非表示列のワークエリアとしてもうけましょか。 何百台となるとなかなか処理が重たくなりそうなのは 避けたいというのもあったのですが…。 もう少し研究してみます。

  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.2

どういう環境下で実施したいのか不明ですが、 xxx.xxx.xxx.が同値であると仮定して、 使用しているOSがWindowsNT/XPだと仮定すると。 コマンドプロンプトで、sortコマンドが使えます。 例えば、A.txt というファイルに xxx.xxx.xxx.101 xxx.xxx.xxx.11 というデータが入ってた場合、 コマンドプロンプトで、 sort /R < A.txt と入れると、昇順にソートされます。 要件に合わなければご容赦を・・。

takkk
質問者

補足

早速ありがとうございました。 エクセルの表という環境でございます… でも、プロンプトのTIP一つ学習しました。

回答No.1

一般論ですが、以下の方法があります。  ・桁数が3桁に満たないものは頭に0をつけて3桁にしてから比較する   (比較後、0をとる)  ・文字列としてではなく、数値として比較する 例えばPerlでしたら、splitを使ってIPアドレスを 区切ってから、各桁を順に比較していけばよいですね。

takkk
質問者

補足

早速ありがとうございました。 エクセルでございます…

関連するQ&A