Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1590 / 13644 ツリー ←次へ | 前へ→

【73268】IPアドレスを数字として判断するには? コンソール 12/12/16(日) 3:01 質問[未読]
【73269】Re:IPアドレスを数字として判断するには? UO3 12/12/16(日) 6:53 発言[未読]
【73274】Re:IPアドレスを数字として判断するには? コンソール 12/12/16(日) 20:14 お礼[未読]
【73270】Re:IPアドレスを数字として判断するには? UO3 12/12/16(日) 7:06 発言[未読]

【73268】IPアドレスを数字として判断するには?
質問  コンソール  - 12/12/16(日) 3:01 -

引用なし
パスワード
   IPアドレスが正しく記載されているかチェックを考えております。

下記のように簡単に作成したのですが、問題がありました。


Dim ckk As Variant

For ckk = 9 To Cells(4, 9).End(xlDown).Row

  If Cells(ckk, 4).Value Like "*.*.*.*" Then

End Sub

IPアドレスなので、数字であることも確認したい。(誤記載防止の為)
IsNumericを使って試しましたが、
ドット(.)が文字として認識判定されてしまいダメでした。
何か良い方法はないでしょうか。
アドバイスをお願いします。

【73269】Re:IPアドレスを数字として判断するには?
発言  UO3  - 12/12/16(日) 6:53 -

引用なし
パスワード
   ▼コンソール さん:

おはようございます

本題の前に。
処理対象の領域について

9 行目から Cells(4, 9).End(xlDown).Row つまり I4より下の I列 最終データまでと
しておられますね。 もし、I列にデータが 6行目までしかなかった場合、9 To 6 となりますよ?

一方、処理を行うセルは Cells(ckk, 4) これは D列ですね?

もし、D列が対象なら
For ckk = 9 To Cells(9, 4).End(xlDown).Row ではないですか?

以下は Dレを対象にするとした場合のサンプルです。
(セル記述、Cells でもいいのですが、見た目、わかりやすいと思いますのでRangeにしてあります)

Sub Sample1()
  Dim s As Variant
  Dim ckk As Long
  Dim n As String
  
  For ckk = 9 To Range("D9").End(xlDown).Row
    s = Range("D" & ckk).Value
    n = Replace(s, ".", "")
    If Not IsNumeric(n) Or Len(s) <> Len(n) + 3 Then
      MsgBox ckk & "行の値にエラーがあります" & vbLf & s
    End If
  Next
  
End Sub

Sub Sample2()
  Dim s As Variant
  Dim ckk As Long
  Dim n As String
  
  For ckk = 9 To Range("D9").End(xlDown).Row
    s = Range("D" & ckk).Value
    n = Join(Split(s, "."), "")
    If Not IsNumeric(n) Or Len(s) <> Len(n) + 3 Then
      MsgBox ckk & "行の値にエラーがあります" & vbLf & s
    End If
  Next
  
End Sub

【73270】Re:IPアドレスを数字として判断するには?
発言  UO3  - 12/12/16(日) 7:06 -

引用なし
パスワード
   ▼コンソール さん:

以下のような処理もできます。ご参考まで。

Sub Sample3()
  Dim s As Variant
  Dim ckk As Long
  Dim re As Object
  
  Set re = CreateObject("VBSCript.RegExp")
  re.Pattern = "^\d+\.\d+\.\d+\.\d+$"
  
  For ckk = 9 To Range("D9").End(xlDown).Row
    s = Range("D" & ckk).Value
    If Not re.test(s) Then
      MsgBox ckk & "行の値にエラーがあります" & vbLf & s
    End If
  Next
  
End Sub

【73274】Re:IPアドレスを数字として判断するには?
お礼  コンソール  - 12/12/16(日) 20:14 -

引用なし
パスワード
   UO3殿

返信ありがとうございます。

処理対象の領域について、UO3殿が記載して頂いている通りです。
マクロ初心者で、指摘して頂いたことで、
あ、確かに!っと思いました。

正規表現が使えることを知りませんでした。
今後、マクロを作成する際に参考とさせて頂きます。

ありがとうございました。


▼UO3 さん:
>▼コンソール さん:
>
>おはようございます
>
>本題の前に。
>処理対象の領域について
>
>9 行目から Cells(4, 9).End(xlDown).Row つまり I4より下の I列 最終データまでと
>しておられますね。 もし、I列にデータが 6行目までしかなかった場合、9 To 6 となりますよ?
>
>一方、処理を行うセルは Cells(ckk, 4) これは D列ですね?
>
>もし、D列が対象なら
>For ckk = 9 To Cells(9, 4).End(xlDown).Row ではないですか?
>
>以下は Dレを対象にするとした場合のサンプルです。
>(セル記述、Cells でもいいのですが、見た目、わかりやすいと思いますのでRangeにしてあります)
>
>Sub Sample1()
>  Dim s As Variant
>  Dim ckk As Long
>  Dim n As String
>  
>  For ckk = 9 To Range("D9").End(xlDown).Row
>    s = Range("D" & ckk).Value
>    n = Replace(s, ".", "")
>    If Not IsNumeric(n) Or Len(s) <> Len(n) + 3 Then
>      MsgBox ckk & "行の値にエラーがあります" & vbLf & s
>    End If
>  Next
>  
>End Sub
>
>Sub Sample2()
>  Dim s As Variant
>  Dim ckk As Long
>  Dim n As String
>  
>  For ckk = 9 To Range("D9").End(xlDown).Row
>    s = Range("D" & ckk).Value
>    n = Join(Split(s, "."), "")
>    If Not IsNumeric(n) Or Len(s) <> Len(n) + 3 Then
>      MsgBox ckk & "行の値にエラーがあります" & vbLf & s
>    End If
>  Next
>  
>End Sub

1590 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free