プロが教える店舗&オフィスのセキュリティ対策術

 Access2000のモジュールで取得したIPアドレスの数値が、頭にゼロが入っている(例:111.011.011.011)ものと入っていない(例:111.11.11.11)ものがあります。
 整合を図る時のことを考えて、表示のルールを統一(後者に)したいのですが、中々良い案が出ず困っています。
 クエリや関数、VBAなど色々試したのですが(桁数が全て同じであれば、MID関数・Format関数でできそうですが、ばらばらでそれができないのが難しくなっている原因です)
 桁数を揃える良い案はないでしょうか?

A 回答 (3件)

Access使ってないのではずしてるかもしれませんが


ExcelのVBAだと以下のような感じでSplit()を使って
できると思うので、Accessでもできないでしょうか。

Option Explicit

Sub Main()
Dim ary() As String
Dim ip As String


MsgBox Normalize("111.11.11.11")
MsgBox Normalize("192.168.0.1")

End Sub

Function Normalize(ip As String) As String
Dim octets() As String
Dim r As String

octets = Split(ip, ".")
r = ""

Dim i As Integer
For i = 0 To UBound(octets)
octets(i) = Format(Val(octets(i)), "##0")
Next i
Normalize = Join(octets, ".")
End Function
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。頂いたプログラムで必要としていたものを十分求めることができました。
今回のIPアドレスは、他のAPIから取得したデータでテキスト型に変換されていますので、8進数ではないようです。

お礼日時:2005/06/01 20:25

あっ・・・


VBの仕様がわかってませんでした。
#2さんの説が正解です。
#1の方法の場合は、"0"が付く場合に&Oをつければ
多分つじつまは合うと思います。
でもAPIにあるならそっちを使ったほうがいいのでしょうね。

Function Normalize(ip As String) As String
Dim octets() As String
Dim r As String

octets = Split(ip, ".")
r = ""

Dim i As Integer
For i = 0 To UBound(octets)
If InStr(octets(i), "0") = 1 Then
octets(i) = "&O" & octets(i)
End If

octets(i) = Format(octets(i), "##0")
Next i
Normalize = Join(octets, ".")
End Function
    • good
    • 0
この回答へのお礼

AccessクエリでSplitがなぜか使えず困っていたのですが、頂いたプログラムで勉強になりました。Splitに加えUBoundやJoin関数は今後も色々と使えそうです。ありがとうございました。

お礼日時:2005/06/01 20:38

頭に0がついてるのは、本当に10進数ですか?


普通(多分??)頭に0が付いた数値はunixやネットワークの世界では8進数と見なしちゃいます。。。

以下のコードを実行してみてください。

Declare Function inet_addr Lib "ws2_32" (ByVal ipaddress As String) As SOCKADDR_IN

Type SOCKADDR_IN
b1 As Byte
b2 As Byte
b3 As Byte
b4 As Byte
End Type


Sub xxx()
Dim IP As SOCKADDR_IN

IP = inet_addr("195.123.011.02")
MsgBox IP.b1 & "." & IP.b2 & "." & IP.b3 & "." & IP.b4
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
今回のIPアドレスは、他のAPIから取得したデータでテキスト型に変換されてテーブルに入れていますので、8進数ではないようです。
頭に0の付いた数値がネットワークの世界で8進数と見なされることは勉強になりました。頂いたAPIも参考になりました。

お礼日時:2005/06/01 20:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す