前提・実現したいこと
あるIPアドレスを入力すると、IPアドレスの一覧表(Prefix表記)から、該当する表記を出力するテーブルorプログラムを作成したいです。
例)
一覧表
10.222.2.32/28 本社
10.222.22.0/24 支社
・
・
・
入力
10.222.2.34
10.222.255.254
10.222.22.254
出力
本社
(N/A)
支社
全て/24だとExcelのvlookup等で完結しそうですが、
何か良いアイデアが有れば仰って頂けると幸いです。
触ったことが有る程度なのが上記のタグの言語です。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
改めて、今回の目的はA,B列のIP部署一覧から H列に一斉入力したIPがK列にどの部署か出力したいというものでした。
A列IPアドレス B部署名データ E下限10進数 F上限10進数 H入力値→貼り付け J列10進数探索 K列 該当部署名
VBA
1Sub testip1() 2 3For r = 1 To 7 4 5a = Cells(r, 1).Value '値取得 6b = Split(a, "/") 'b(1):/以降 7c = Split(b(0), ".") 8 9 10k = ((c(0) * 256 + c(1)) * 256 + c(2)) * 256 + c(3) 11 12e = 2 ^ (32 - b(1)) 13 14j = k + e - 1 '上限 15 16Cells(r, 5).Value = k 17Cells(r, 6).Value = j 18 19Next 20 21End Sub
VBA
1Sub testip2() 2 3For m = 1 To 7 4p = Cells(m, 8).Value '入力値取得 5 6q = Split(p, ".") 7 8n = ((q(0) * 256 + q(1)) * 256 + q(2)) * 256 + q(3) '実際の値 9 10Cells(m, 10).Value = n 11Next 12 13For u = 1 To 7 14 15v = Cells(u, 10).Value 16 For t = 1 To 7 17 18 x2 = Cells(t, 5).Value 19 x3 = Cells(t, 6).Value 20 x4 = Cells(t, 2).Value 21 22 If v >= x2 And v <= x3 Then 23 Cells(u, 11).Value = x4 24 25 End If 26 Next t 27 28Next u 29 30End Sub
投稿2019/01/24 03:03

退会済みユーザー
総合スコア0
0
投稿2019/01/22 09:30
総合スコア4828
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
teratailyh さんが一番分かるツールで作られるのが「良い」と思います.
入力がどこからどういう形式で来て、出力はどういう形式でどこに行くのか等まで投げられては, なにが「良い」のか分からないと思います.
一覧がデータベースにあって入力はCSVファイルで出力は標準出力なコマンドと, JavaのGUIを設計して一覧を一覧テキスト欄に入力しておき入力テキスト欄にIPアドレスを入力すると出力テキスト欄に表示されるのと, 一覧が入ったマスターEXCELファイルが別にあり今開いているEXCELシートを入力として新しいEXCELシートを生成して結果を書き込むのと...等で, どれが「良いアイデア」なのか判断は出来ないのではないでしょうか.
投稿2019/01/22 08:57
総合スコア13327
0
ベストアンサー
VBAで書くしかないんじゃないでしょうか。
各ネットワークアドレスに対して、IPアドレス32ビット整数値の下限と上限をあらかじめ算出しておき、各IPアドレスを32ビット整数値に変換して、さっきの上限下限の間にあるかどうかを順番に調べる。
VBA
1a = "10.222.2.32/28" 2b = Split(a, "/") 3c = Split(b(0), ".") 4d = ((c(0) * 256 + c(1)) * 256 + c(2)) * 256 + c(3) 5If d > 2 ^ 31 Then d = d - 2 ^ 31 6e = 2 ^ (32 - b(1)) 7f = 2 ^ 32 - e 8If f > 2 ^ 31 Then f = f - 2 ^ 31 9下限 = d And f 10上限 = 下限 + e - 1
#追記
回答の方にも追記しておきますが、下限を求めるときにビット演算は不要で、そのまま d が下限になるのでした。ということで、Longの範囲に収めるための if ~ の行2つと、変数 f は不要です。
投稿2019/01/22 08:16
編集2019/01/24 03:13総合スコア86301
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2019/01/24 01:31

退会済みユーザー
2019/01/24 01:55

退会済みユーザー
2019/01/24 02:57

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。