質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%

Q&A

解決済

3回答

4105閲覧

ExcelのセルにIPアドレスが入力された時のOKとする入力規則

yutkts

総合スコア20

1グッド

3クリップ

投稿2019/01/16 06:56

Excelの入力規則についての質問となるのですが、
Excelのあるセルに入力規則を設定し、
IPアドレスが入力された場合のみ、入力を許可するような動きを
実現したいと考えています。

動きとしては、A1セルに入力規則を指定し、
以下のような数値の場合のみ、入力OKとしたいです。
(セルに全角英字や記号などが入力された場合もNG)

[許可]
192.168.1.1
192.168.1.2

[NG]
192.168.101.
256.256.256.256

上記のようなことは、Excelの入力規則の数式などで実現は可能でしょうか?

ご教授いただければ幸いです。
よろしくお願いします。

ikore908👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2019/01/16 07:02

マクロを使うのはありですか?
yutkts

2019/01/16 07:13

コメントありがとうございます。 マクロを使うのもありです。 よろしくお願いします。
guest

回答3

0

ベストアンサー

入力規則の数式ではマクロは使えないようでしたので、ネットで調べたらちょうどいいのがありました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11156148536
この中のwas********さんの回答が使えそうです。
以下、転載。

Excel

1=PRODUCT(N(MID(SUBSTITUTE(SUBSTITUTE(B2,".","X",4),".",REPT(" ",100)),ROW(A$1:A$4)*100-99,100)*1<2^8),LEFT(B2))

B2のところをチェックしたいセルのアドレスにしてください。
詳しく解析はしてませんが、すごそうなのはわかる。

投稿2019/01/16 07:52

編集2019/01/16 07:53
ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutkts

2019/01/17 01:54

入力規則の場合、転載いただいた数式を利用することでIPチェックができました! 解析は難しそうですが、こちらで調べてみます。 回答いただきありがとうございました。BAとさせていただきます。
ikadzuchi

2019/02/09 14:46

「1e-2」などの指数表記も数値として扱われてしまうのが微妙ですね。
guest

0

関数ゴリゴリ書くのもわかりにくいので、標準モジュールに判定関数を書いて、その結果を条件付き書式に設定すればよいかな、とか思いますがどうでしょう?

雑いですが、正しいIP(v4)アドレスならばtrueを返す関数はこんな感じです。

VBA

1Function IsIPv4Str(TestString As String) 2 'とりあえず判定結果はNGとする 3 IsIPv4Str = False 4 5 '「.」で区切る 6 Address = Split(TestString, ".") 7 8 '区切った結果の配列が4でなければ終了 9 If UBound(Address) <> 3 Then Exit Function 10 11 '各要素をチェック 12 For i = 0 To 3 13 '1要素取り出す 14 Octet = Address(i) 15 '対象の要素が、数値として判別できないか、0より小さいか、255より大きければ、判定終了 16 If Not (IsNumeric(Octet)) Or Val(Octet) < 0 Or 255 < Val(Octet) Then Exit Function 17 Next 18 19 'ここまでの判定が通れば判定結果をOKとする 20 IsIPv4Str = True 21End Function

投稿2019/01/16 07:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2019/01/16 23:59

条件付き書式ではなく入力規則ですね。 ところで入力規則でユーザー関数って使えます?
退会済みユーザー

退会済みユーザー

2019/01/17 01:01

ご指摘ありがとうございます。入力規則でしたね。失礼しました。 入力規則だとユーザー関数は使えない(はず…。)なので、WorkSheet_Changeイベントで同様の判定を行い、Application.Undoするとかでしょうか。 こんなことするなら、難解でも関数駆使のほうがよさそうですね。
ttyp03

2019/01/17 01:10

ワークのセルに判定結果を入れておいて、それを入力規則で使うって手もありますね。 いずれにしても直接ユーザー関数が使えないのは不便ですよね。
yutkts

2019/01/17 01:55

入力規則で難しい場合、最悪VBAで実装も検討しておりましたので、 いただいたコードも参考にさせていただきます。 ご回答いただきありがとうございました。
guest

0

できそうですが、面倒なので途中で挫折しました。

  1. LEFTやRIGHTとFINDを駆使して、.で区切られた要素を4つみつける(これが大変だと思う)
  2. 上記のそれぞれをVALUEにかけて数値化して、0以上、255以下であることをANDで判定
  3. 4セグメントを全部ANDにかける

上記で組んだ関数を入力規則のユーザ設定に入れる

投稿2019/01/16 07:12

編集2019/01/16 07:31
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutkts

2019/01/16 07:28

LEFTやRIGHTやFINDについて調べて見たいと思います。 コメントいただきありがとうございました。
papinianus

2019/01/16 08:01 編集

=AND(VALUE(LEFT(B2, FIND(".",B2) - 1)) > -1, VALUE(LEFT(B2, FIND(".",B2) - 1)) < 256) いちおう最初のセグメントはこれで取れます。 =AND(VALUE(MID(B2,FIND(".",B2)+1,(FIND(".",B2,FIND(".",B2)+1)) - 1 -(FIND(".",B2)))) > -1, VALUE(MID(B2,FIND(".",B2)+1,(FIND(".",B2,FIND(".",B2)+1)) - 1 -(FIND(".",B2)))) < 256) 次のセグメントはこんな感じ =AND(VALUE(LEFT(MID(B2, FIND(".", B2) + 1, LEN(B2) - FIND(".", B2)), FIND(".",MID(B2, FIND(".", B2) + 1, LEN(B2) - FIND(".", B2))) - 1)) > -1, VALUE(LEFT(MID(B2, FIND(".", B2) + 1, LEN(B2) - FIND(".", B2)), FIND(".",MID(B2, FIND(".", B2) + 1, LEN(B2) - FIND(".", B2))) - 1)) < 256) 第二セグメントはこうすべきかな
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問