プロが教える店舗&オフィスのセキュリティ対策術

vbaのif関数が設定できません・・・
もしss.Cells(rw + 10, 11)のセルの内容が
全角1~4文字 + 半角数字1~3桁 のとき
と条件を付けたいのですが、調べてもうまくいきません。

長いのでss.Cells(rw + 10, 11)を仮にaとすると
aには空欄から半角26文字まで様々な文字が入ります。

ご教授ください・・・(´;ω;`)

A 回答 (3件)

こんなのはいかがでしょうか?



'☆ 判定のみで良い場合
'
' 「If 条件クリア(ss.Cells(rw + 10, 11).Value) Then …」のような使い方になります。

Function 条件クリア(セル内容 As String) As Boolean

Dim 全角表示 As String
Dim 位置 As Long
Dim 数位置 As Long
Dim 終 As Long

 全角表示 = StrConv(セル内容, vbWide)
 For 位置 = 1 To 5
  If Mid(セル内容, 位置, 1) <> Mid(全角表示, 位置, 1) Then Exit For
 Next
 Select Case 位置
  Case 1, 6
   条件クリア = False
  Case Else
   終 = 位置 + 3
   For 数位置 = 位置 To 終
    If Mid(セル内容, 数位置, 1) = Mid(全角表示, 数位置, 1) Then Exit For
    If Not IsNumeric(Mid(セル内容, 数位置, 1)) Then Exit For
   Next
   Select Case 数位置 - 位置
    Case 0, 4 '数字部分が4桁以上もOKならば「Case 0」のみにして下さい。
     条件クリア = False
    Case Else
     条件クリア = True
   End Select
 End Select

End Function

'☆ 後でどんな文字列かも使う場合

'Dim 文字列 As String
' 文字列 = 抽出文字(ss.Cells(rw + 10, 11).Value)
' If 文字列 <> "" Then … ← 判定はこのように行います。
' MsgBox (文字列) ← 結果利用はこのように行います。

Function 抽出文字(セル内容 As String) As String

Dim 全角表示 As String
Dim 位置 As Long
Dim 数位置 As Long
Dim 終 As Long

 全角表示 = StrConv(セル内容, vbWide)
 For 位置 = 1 To 5
  If Mid(セル内容, 位置, 1) <> Mid(全角表示, 位置, 1) Then Exit For
 Next
 Select Case 位置
  Case 1, 6
   抽出文字 = ""
  Case Else
   終 = 位置 + 3
   For 数位置 = 位置 To 終
    If Mid(セル内容, 数位置, 1) = Mid(全角表示, 数位置, 1) Then Exit For
    If Not IsNumeric(Mid(セル内容, 数位置, 1)) Then Exit For
   Next
   Select Case 数位置 - 位置
    Case 0, 4 '数字部分が4桁以上もOKならば「Case 0」のみにして下さい。
     抽出文字 = ""
    Case Else
     If 数位置 >= 終 Then
      抽出文字 = Left(セル内容, 終 - 1)
     Else
      抽出文字 = Left(セル内容, 数位置 - 1)
     End If
   End Select
 End Select

End Function
    • good
    • 1

>vbaのif関数が設定できません・・・


If 関数はワークシート上で、VBAでは、If 構文だったような気がしますが……。
>全角1~4文字 + 半角数字1~3桁
このパターンに限る場合は、
"^[^\x01-\x7E]{1,4}\d{1,3}$"
その後に続く 「あいう12a」でも可の場合は、
"^[^\x01-\x7E]{1,4}\d{1,3}"

'----------------
Sub Test1()
 Dim a
 a = "あいうえ12"
 If CheckStr(a) Then
  MsgBox "実行!"
 Else
  MsgBox "失敗", vbCritical
 End If
End Sub

'//標準モジュール
Function CheckStr(ByVal strTxt As String) As Boolean
 Dim RegEx As Object
 Dim Ms
 Set RegEx = CreateObject("VBScript.RegExp")
 With RegEx
  .Pattern = "^[^\x01-\x7E]{1,4}\d{1,3}$" ' [^ -~。-゜] 本来はこうでもよいが、/゚。~-^/は半角のみ
  Set Ms = .Execute(strTxt)
  If Ms.Count > 0 Then
   CheckStr = True
  End If
 End With
End Function
//

正規表現のパターンは、' [^ -~。-゜]でよいのですが、全角が混じることがあるので、文字コードで[^\x01-\x7E] と表現しました。意味は、半角以外のもの、ということです。
    • good
    • 0

念のため確認しますが、数値部分だけ考えた場合は次のどちらでしょうか?


① 1文字目が半角数字ならば4桁以上の数値でも問題ない
② 1~3桁の半角数字で、そのすぐ後は半角数字ではない
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!