Excel VBA サブネットマスクをワイルドカード形式に変換する

Excel VBA サブネットマスクをワイルドカード形式に変換するマクロです。

(例)”255.255.255.0″ → “0.0.0.255”

ワイルドカードマスクは、アクセスリストなどのネットワーク指定に使われたりします。

ワイルドカードマスクの対応表

ワイルドカードマスクは以下の表のように表記されます。

サブネットマスク ワイルドカードマスク
0.0.0.0 255.255.255.255
128.0.0.0 127.255.255.255
192.0.0.0 63.255.255.255
224.0.0.0 31.255.255.255
240.0.0.0 15.255.255.255
248.0.0.0 7.255.255.255
252.0.0.0 3.255.255.255
254.0.0.0 1.255.255.255
255.0.0.0 0.255.255.255
255.128.0 0.127.255.255
255.192.0.0 0.63.255.255
255.224.0.0 0.31.255.255
255.240.0.0 0.15.255.255
255.248.0.0 0.7.255.255
255.252.0.0 0.3.255.255
255.254.0.0 0.1.255.255
255.255.0.0 0.0.255.255
255.255.128.0 0.0.127.255
255.255.192.0 0.0.63.255
255.255.224.0 0.0.31.255
255.255.240.0 0.0.15.255
255.255.248.0 0.0.7.255
255.255.252.0 0.0.3.255
255.255.254.0 0.0.1.255
255.255.255.0 0.0.0.255
255.255.255.128 0.0.0.127
255.255.255.192 0.0.0.63
255.255.255.224 0.0.0.31
255.255.255.240 0.0.0.15
255.255.255.248 0.0.0.7
255.255.255.252 0.0.0.3
255.255.255.254 0.0.0.1
255.255.255.255 0.0.0.0

表を見ると、以下の規則があるのが分かります。

  • サブネットマスクとワイルドカードのドット(.)で区切られた、各部分をそれぞれ足すと、255になっています。

※正しくは、もう少し別の意味があるのですが、ここではプログラムを作成する、という観点から、ワイルドカードの意味の詳細説明は省略します。

この規則をプログラムで書いていきます。

プログラム例

Function ConvertSubnetMaskWild(ByVal strSubnetMask As String) As String

 

    Dim strIP() As String
    Dim lngLen As Long ‘in_strIpMaskの文字数
    Dim i As Long
    Dim strSubnet As String ‘IPアドレス形式のサブネットマスク

    strSubnet = “”

    ‘文字列を配列変換
    strIP = Split(strSubnetMask, “.”)

    For i = LBound(strIP) To UBound(strIP)
        If strSubnet <> “” Then strSubnet = strSubnet & “.”
        strSubnet = strSubnet & CStr(255 – CLng(strIP(i)))
    Next

    ‘***戻り値を設定する
    ConvertSubnetMaskWild = strSubnet

 

End Function

以下の部分は、サブネットマスクのドット(.)で区切った文字れ列を、配列strIP()に格納しています。

strIP = Split(strSubnetMask, “.”)

以下の部分は、配列strIP()の最小値から最大値まで順番に255から配列strIP()の値を引いて、ドット(.)で文字を結合しています。

For i = LBound(strIP) To UBound(strIP)
    If strSubnet <> “” Then strSubnet = strSubnet & “.”
    strSubnet = strSubnet & CStr(255 – CLng(strIP(i)))
Next

まとめ

IPアドレス形式のサブネットマスクをワイルドカード形式に変換するマクロは、まず規則性を見つけて、プログラムに書いていきました。

以上、サブネットマスクをワイルドカード形式に変換するマクロでした。