• ベストアンサー

関数教えてください。

VBであるブロックに入力”メールアドレス”を入力するのですが、”@”がなかったら「メールアドレスを入力しなおしてください」と表示したいです。 (1) Function checkEMail(EMailStr) checkEMail = (InStr(1,EMailStr,"@") > 0) and End Function でとりあえず@が無い物には表示できるのですが、この条件だと、メールの最後に@が入ってる場合は通ってしまいます。伝授ください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22650
noname#22650
回答No.1

checkEMail = (InStr(1,EMailStr,"@") > 0) and (InStr(1,EMailStr,"@") < len(EMailStr)) こんな感じでどうでしょう?

kyo----
質問者

補足

venzoさん!早速のご解答本当にありがとうございます!ちなみに"len"関数の部分はどういういみなのでしょうか?もう一つだけご教授頂きたいのですが、@が複数ある際もエラーを返したいのですが、どうすればいいでしょうか?ご教授ください。

その他の回答 (2)

noname#22650
noname#22650
回答No.3

Function checkEMail(EMailStr) As Boolean  Dim i As Integer '変数iを整数型で宣言  i = InStr(1, EMailStr, "@") '何度も使うので変数へ代入  '1つ目の条件:先頭の@をチェックするため1以上に  '2つ目の条件:lenは文字列の長さ、つまり最後に@があるかチェック  '3つ目の条件:2つ目の@をチェック  checkEMail = (i > 1) And (i < Len(EMailStr)) And (InStr(i + 1, EMailStr, "@") = 0) End Function こんな感じでしょうか。

kyo----
質問者

お礼

venzoさん!分かりやすいご回答本当にありがとうございました! 本当に助かりました! ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

aa@s asss@ ass a@a @as as@ のデータに対し(エクセルVBAでやりましたが) Sub test01() For i = 1 To 7 s = Trim(Cells(i, "A")) p = InStr(1, s, "@") Select Case p Case 0 Cells(i, "B") = i & "行目 @なしERR" Case 1 Cells(i, "B") = i & "行目 @が最初ERR" Case Len(s) Cells(i, "B") = i & "行目 @が最後ERR" Case Else Cells(i, "B") = i & "行目 OK" End Select Next i End Sub で aa@s 1行目 OK 2行目 @なしERR asss@ 3行目 @が最後ERR ass 4行目 @なしERR a@a 5行目 OK @as 6行目 @が最初ERR as@ 7行目 @が最後ERR をご参考に。

kyo----
質問者

お礼

早速のご回答ありがとうございました! 何とか解けました! 本当に助かりました!

関連するQ&A

専門家に質問してみよう