VBAマクロでサブネットマスクからSIDR表記に変換するコードを紹介します。
コードをコピーすればすぐに使えます。
コピペ前提なので短さを優先してコードを書きました。
サンプルでは1行だけですが複数行でも対応しています。
変換
SM→CIDR
セルB1を選択してマクロを実行
A | B | C | D | E | |
1 | 192.168.10.1 | 255.255.255.0 |
実行後
A | B | C | D | E | |
1 | 192.168.10.1 | 24 |
Sub SMからCIDR変換() 選択範囲 = Range(Cells(Selection(1).Row, Selection(1).Column), Cells(Selection(Selection.Count).Row + 1, Selection(Selection.Count).Column)) Selection.ClearContents For R = 1 To UBound(選択範囲, 1) - 1 二進数SM = "" For Each 十進数 In Split(選択範囲(R, 1), ".") 二進数 = "" 余り = "" Do Until 十進数 < 2 余り = 十進数 Mod 2 十進数 = Int(十進数 / 2) 二進数 = 余り & 二進数 Loop 二進数 = Format(十進数 & 二進数, "00000000") 二進数SM = 二進数SM & 二進数 Next Cells(Selection(1).Row + R - 1, Selection(1).Column) = InStr(二進数SM & "0", "0") - 1 Next End Sub
CIDR→SM
セルB1を選択してマクロを実行
A | B | C | D | E | |
1 | 192.168.10.1 | 24 |
実行後
A | B | C | D | E | |
1 | 192.168.10.1 | 255.255.255.0 |
Sub CIDRからSM変換() 選択範囲 = Range(Cells(Selection(1).Row, Selection(1).Column), Cells(Selection(Selection.Count).Row + 1, Selection(Selection.Count).Column)) Selection.ClearContents For R = 1 To UBound(選択範囲, 1) - 1 二進数 = "" For i = 1 To 32 If i <= 選択範囲(R, 1) Then 二進数 = 二進数 & "1" If i > 選択範囲(R, 1) Then 二進数 = 二進数 & "0" Next For i = 32 To 0 Step -1 If i Mod 8 = 0 Then If i = 32 Then 十進数SM = "" If i < 32 Then 十進数SM = "." & 十進数 & 十進数SM If i = 0 Then Exit For 十進数 = 0 累乗 = 1 Else 累乗 = 累乗 * 2 End If If Mid(二進数, i, 1) = 1 Then 十進数 = 十進数 + 累乗 Next Cells(Selection(1).Row + R - 1, Selection(1).Column) = Mid(十進数SM, 2) Next End Sub
右のセルへ入力
SM→CIDR
セルB1を選択してマクロを実行
A | B | C | D | E | |
1 | 192.168.10.1 | 255.255.255.0 |
実行後
A | B | C | D | E | |
1 | 192.168.10.1 | 255.255.255.0 | 24 |
Sub SMからCIDR変換右のセルへ入力() 選択範囲 = Range(Cells(Selection(1).Row, Selection(1).Column), Cells(Selection(Selection.Count).Row + 1, Selection(Selection.Count).Column)) For R = 1 To UBound(選択範囲, 1) - 1 二進数SM = "" For Each 十進数 In Split(選択範囲(R, 1), ".") 二進数 = "" 余り = "" Do Until 十進数 < 2 余り = 十進数 Mod 2 十進数 = Int(十進数 / 2) 二進数 = 余り & 二進数 Loop 二進数 = Format(十進数 & 二進数, "00000000") 二進数SM = 二進数SM & 二進数 Next Cells(Selection(1).Row + R - 1, Selection(1).Column + 1) = InStr(二進数SM & "0", "0") - 1 Next End Sub
CIDR→SM
セルB1を選択してマクロを実行
A | B | C | D | E | |
1 | 192.168.10.1 | 24 |
実行後
A | B | C | D | E | |
1 | 192.168.10.1 | 24 | 255.255.255.0 |
Sub CIDRからSM変換右のセルへ入力() 選択範囲 = Range(Cells(Selection(1).Row, Selection(1).Column), Cells(Selection(Selection.Count).Row + 1, Selection(Selection.Count).Column)) For R = 1 To UBound(選択範囲, 1) - 1 二進数 = "" For i = 1 To 32 If i <= 選択範囲(R, 1) Then 二進数 = 二進数 & "1" If i > 選択範囲(R, 1) Then 二進数 = 二進数 & "0" Next For i = 32 To 0 Step -1 If i Mod 8 = 0 Then If i = 32 Then 十進数SM = "" If i < 32 Then 十進数SM = "." & 十進数 & 十進数SM If i = 0 Then Exit For 十進数 = 0 累乗 = 1 Else 累乗 = 累乗 * 2 End If If Mid(二進数, i, 1) = 1 Then 十進数 = 十進数 + 累乗 Next Cells(Selection(1).Row + R - 1, Selection(1).Column + 1) = Mid(十進数SM, 2) Next End Sub
VBAはどうやって覚える?
プログラムのコードが読めないと、参考にしているコードの理解や自分でプログラムを書くときに時間がかかってしまいます。そんな時は基礎から学ぶと応用もできるようになり自分の作りたいプログラムがスムーズに作れるようになります。
無料でやるならネット上の学習サイトを参考にするといいです。
こちらはVBAの基礎から説明している無料のWEBサイトになります。
>>基礎から学べるWEBサイトを見てみる
過去にネットでの学習でつまずいた方には専門書をオススメします。
本なら基礎から学べる事はもちろん、読者視点で分かりやすい解説になっています。
一人で集中してコツコツ進めたい方は書籍を試してください。
本を読んでもわからない所が多すぎたり、誰かに質問したい場合はオンラインスクールを見てみましょう。
カウンセリングから目的に応じた学習プランと教材を提供してくれるので、プログラミングの敷居がとても低くなります。
誰かに相談できるのは心強いです。
>>オンラインスクールを無料体験で始める