- ベストアンサー
ipアドレスを並び替えたい
普通は桁数をそろえますが、 xxx.xxx.xxx.11 xxx.xxx.xxx.101 をちゃんと昇順にソートしようとすれば何かいい方法ありますか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ユーザー定義関数を使用する方法です。 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
その他の回答 (4)
- Mozisan
- ベストアンサー率43% (130/299)
#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、この方法で使えますが、 整形ができたら、整形結果が入った列を選び、コピー、形式を選んで貼り付け-値 を行うと、式が消えるので、必要ない列を削除すればすっきりします。
お礼
ありがとうございました。 まだ前々述の方も試せてないですが、 マクロ使わない方法も欲しいので検討してみたいと思います。
- Mozisan
- ベストアンサー率43% (130/299)
エクセルですよね。 数値が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列で並び替えます。
補足
エクセルです。 非表示列のワークエリアとしてもうけましょか。 何百台となるとなかなか処理が重たくなりそうなのは 避けたいというのもあったのですが…。 もう少し研究してみます。
- rara_sun
- ベストアンサー率50% (271/539)
どういう環境下で実施したいのか不明ですが、 xxx.xxx.xxx.が同値であると仮定して、 使用しているOSがWindowsNT/XPだと仮定すると。 コマンドプロンプトで、sortコマンドが使えます。 例えば、A.txt というファイルに xxx.xxx.xxx.101 xxx.xxx.xxx.11 というデータが入ってた場合、 コマンドプロンプトで、 sort /R < A.txt と入れると、昇順にソートされます。 要件に合わなければご容赦を・・。
補足
早速ありがとうございました。 エクセルの表という環境でございます… でも、プロンプトのTIP一つ学習しました。
- neue_reich
- ベストアンサー率21% (138/647)
一般論ですが、以下の方法があります。 ・桁数が3桁に満たないものは頭に0をつけて3桁にしてから比較する (比較後、0をとる) ・文字列としてではなく、数値として比較する 例えばPerlでしたら、splitを使ってIPアドレスを 区切ってから、各桁を順に比較していけばよいですね。
補足
早速ありがとうございました。 エクセルでございます…
お礼
ありがとうございました。 ばっちりでございます!