例えば、10.121.0.1 ~ 10.121.52.254
この範囲のアドレスすべてをエクセルに一つずつ抽出する方法はありますでしょうか。
コマンドからテキストでもこの範囲が抽出されれば助かります。
10.121.0.1をセルに入力し、ドラッグしていくと10.121.0.254 の時点で手入力で10.121.1.1を入力し、そこから254までドラッグ。
しかも、52までとなると時間もかなりかかってしまいます。
また、エクセルの区切り位置で、IPアドレスをドット記号で分割しましたが、
こちらも時間はかかります。
効率の良い方法があればご教示いただきたくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答7件
0
自分ならこうするというのを書きますと、
A1に '10.121. B1に 0 C1に 1 D1に =A1&B1&"."&C1 それぞれの列をCtrlを押してか離してか覚えていないけれど適切な方で下へちょっと伸ばす。(もしくは第2列にも適切な値を入れる) さらに全体を254列まで下へ伸ばす。 B255に =B1+1 C255に =C1 さらにそれぞれ適宜下へ伸ばす。
投稿2018/07/29 13:25
総合スコア3047
0
例えば、10.121.0.1 ~ 10.121.52.254
10進数のまま考えるからいけないのであって、16進数に変換すれば一つの数値として扱えるので、
IPアドレス | 16進数値 |
---|---|
10.121.0.1 | 0a790001 |
10.121.52.254 | 0a7934fe |
上限値になるまでインクリメントしていけば、解が出ます。
Re: Yupon さん
投稿2018/07/29 01:44
編集2018/07/29 01:51総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
ワークシート関数でがんばるなら以下のようなイメージでしょうか(後はオートフィル)
A | B | C | D | E |
---|---|---|---|---|
=B1&"."&C1&"."&D1 | ="10.121" | =QUOTIENT(E1,254) | =MOD(E1,254)+1 | 0 |
=B2&"."&C2&"."&D2 | ="10.121" | =QUOTIENT(E2,254) | =MOD(E2,254)+1 | 1 |
類型作業があり、それら作業を楽にしたいということでしたらVBAなどプログラミング言語を覚えるのも手です。
コード部左上の四角形の中(VBA・powershell)が言語の種類なので、実行の仕方は調べてください(両方ともExcelが入っているWindows環境ならまず使えるはずです)。
vba
1Sub CreateIPAddressList() 2'https://teratail.com/questions/138392 3'IPアドレスの一覧生成 4'速度は度外視 5 6 '出力先のセル 7 Dim destCell As Excel.Range 8 Set destCell = ActiveCell '今アクティブなセルからスタート 9 10 '整数としてi,jを用意 11 Dim i As Long, j As Long 12 13 'iを0 ~ 52 まで順番にループ 14 For i = 0 To 52 15 16 'jを1 ~ 254 まで順番にループ 17 'iが0の間にjが1~254まで変化し、iが1になったときにもjが1~254まで変化する 18 For j = 1 To 254 19 20 '出力先のセルの値を設定 21 destCell.Value() = "10.121." & i & "." & j 22 23 '次の出力先は、今のセルから1行下にずらしたところ 24 Set destCell = destCell.Offset(1) 25 26 Next j 27 28 Next i 29 30End Sub
powershell
1# https://teratail.com/questions/138392 2 3# 保存先のファイルパス 4[string]$outputFile = 'C:\ip.txt' 5 6# foreach { ~ } 内の結果を $results に取得 7[string[]]$results = 8 # $i には 0 ~ 52 までが順番に入る 9 foreach ( $i in 0..52) { 10 # $j には 1 ~ 254 までが順番に入る 11 foreach ( $j in 1..254) { 12 # {0} を $i、 {1} を $j に置き換える 13 '10.121.{0}.{1}' -f $i , $j 14 } 15 } 16 17# $results を CRLF(改行文字) でくっつけて(-join) 18$results -join "`r`n" | 19 # $outputFile に出力(上書き) 20 Out-File -FilePath $outputFile -Encoding default
投稿2018/07/29 01:27
総合スコア2166
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
A列に1,2,3,...と入れて
B1に下記を入力し、B列全体にコピーする。
=CONCATENATE("10.121.",ROUNDDOWN((A1-1)/254,0),".",MOD(A1-1,254)+1)
第3オクテットは1-254で0、255-508で1。1引いた数を254で割れば良い。
第4オクテットは1-254の繰り返しなので、0-253の繰り返し+1にすれば良い。
後はつなげるだけ
投稿2018/07/29 00:53
総合スコア596
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
10.121.0.1をセルに入力し、ドラッグしていくと10.121.0.254 の時点で手入力で10.121.1.1を入力し、そこから254までドラッグ。
しかも、52までとなると時間もかなりかかってしまいます。
多分、この質問書いてる時間より、短時間で実現できると思うけど。。。
コスト意識持ったほうがいいよ。
投稿2018/07/29 00:47

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
以下、xを一ずつ増やしながら反復
xを254で割る。
商をyとする。
余り+1をzとする。
10.121.y.zを出力する。
動作未確認
投稿2018/07/29 00:24
総合スコア4853
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。