• ベストアンサー

関数教えてください。

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/17068)
回答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

  • Console.ReadLineが有効にならない

    VB2008で下記の記述を入れてみました。 Sub test() Dim inStr As String Dim inNum As Double ' キーボードから入力 Console.WriteLine("実数を入力") inStr = Console.ReadLine() ' 文字列を実数に変換 If (Not inStr = "") Then inNum = Double.Parse(inStr) inNum = inNum / 2 ' 結果を表示 Console.WriteLine("結果:" & inNum) End Sub この場合, 上記Console.RealLine()で キーボードから入力ができるとの解説が、 いろりろ出ていますが、小生のプログラムでは、入力できず、上記"結果"を表示して、 終了してしまい困っています。  VB2008のオプションで環境などを調べたのですが、よくわかりません。 どなたか、ご存じの方がいらしゃれば、ご指導をお願いいたします。  当方の環境    OS Vistaです。 OS Xpで行っても同じでした。  VB2008は、Visual Studio 2008 です。上記OSには、同じ環境で行っています。

  • 超初心者です。シングルクォーテーションとカンマが出ればmsgboxにエラーを表示するプログラム。

    いつもありがとうございます。現在VB.NETでつまずいているところがございます。プログラム暦1ヶ月ですのでわからないことだらけです。 以下のソースを引数を使って短くしたいのですが、よくわかりません。引数についてわかりやすくご指導いただけるとありがたいです。宜しくお願い致します。 Me.errmojichk()はシングルクォーテーションもしくわカンマがあればメッセージボックスにエラーを表示させ、intchk=1を入れる関数です。 Private Function mojichk() As String Private mojik As String InStr(Me.txt_顧客名.Text, "'") Me.errmojichk() If Me.intChk = 1 Then Me.txt_顧客名.Focus() Exit Function End If mojik = mojik + InStr(Me.txt_住所1.Text, "'") Me.errmojichk() If Me.intChk = 1 Then Me.txt_住所1.Focus() Exit Function End If 'シングルクォテーションのチェック------------------ここまで 'カンマのチェック------------------ mojik = InStr(Me.txt_顧客名.Text, ",") Me.errmojichk() If Me.intChk = 1 Then Me.txt_顧客名.Focus() Exit Function End If mojik = mojik + InStr(Me.txt_住所1.Text, ",") Me.errmojichk() If Me.intChk = 1 Then Me.txt_住所1.Focus() Exit Function End If End Function

  • TreeViewのスクロール制御

    VB6でTreeViewコントロールのスクロールをプログラム側から制御する物を作っているのですが分からなくて困っています。 TreeViewでNodeが増えれば自動的に表示されるスクロールバーは表示をしないように「Scrollプロバティ」にFalseを入力してSendMessageで下記の方法で行ったのですがスクロールしません。 Private Sub Command1_Click() Call SendMessage(TreeView1.hwnd, WM_VSCROLL, MAKEWPARAM(SB_THUMBPOSITION, sPos), 0) End Sub Private Function MAKEWPARAM(LOWWORD As Long, HIWORD As Long) As Long MAKEWPARAM = (LOWWORD And &HFFFF&) Or (HIWORD * &H10000) End Function 「Scrollプロパティ」にTrueを設定すると問題なくできるのですが、どなたか分かる方がいましたら宜しくお願い致します。

  • Instr関数とLike演算子を組み合わせを教えて

    Instr関数とLike演算子を組み合わせたものでループさせたい(VBA) Instr関数で複数のOr条件を満たすものを印刷と表示させ、Like演算子でワイルドカードであいまい検索で一致するものも印刷と表示させたいのですが上手くいきません。 本当はInstr関数とLike関数を組み合わせたいのですが調べても出てこず困っております。 どなたかお教えいただけないでしょうか? ちなみにVBA初心者です、、 Sub 印刷() Dim SHEETNAME As String Dim n As Long SHEETNAME = ActiveSheet.Name 'データ数の確認 S = Sheets(SHEETNAME).Range("c1000").End(xlUp).Row '(1)標準製品かつ第一産業かつ-の右側がJのもの と (2)標準製品かつ第二産業のもの のみ印刷(13列目は製品区分、10列目は会社名、4列目は型式名称) For n = 3 To S If InStr(Sheets(SHEETNAME).Cells(n, 13).Value, "標準製品") > 0 And Sheets(SHEETNAME).Cells(n, 10).Value = "第一産業" And _ Right(Left(Sheets(SHEETNAME).Cells(n, 4).Value, InStr(Sheets(SHEETNAME).Cells(n, 4).Value, "-") + 1), 1) = "J" Or _ InStr(Sheets(SHEETNAME).Cells(n, 13).Value, "標準製品") > 0 And InStr(Sheets(SHEETNAME).Cells(n, 10).Value, "第二産業") > 0 Then Sheets(SHEETNAME).Cells(n, 12) = "印刷" Else: Sheets(SHEETNAME).Cells(n, 12).Value = Delete End If Next '型式名称にOOPPが含まれるもののみ印刷(4列目は型式名称) For n = 3 To S Dim strValue As String Dim strPattern As String strValue = "Cells(n, 4).Value" strPattern = "*OOPP*" If strValue Like strPattern Then Sheets(SHEETNAME).Cells(n, 12) = "印刷" Else: Sheets(SHEETNAME).Cells(n, 12).Value = Delete Next End Sub

  • メールアドレスが正しく表示されない

    お問い合わせのページでメールアドレスnqc441841@・・・・・と入力したらmailto:nqc441841%40・・・・・と表示されてしまいます(確認のページでメールアドレスはnqc441841@・・・・・と表示されますが) @が%40になるのは何が原因なのでしょうか

  • BootCamp上のWindows操作方法

    MacBookPro 13inch(Ver10.6.6)にWindows XPを入れました。 起動したと、普通にiSightやAirMacなどは使えるようになったのですが、キーボードに半角全角キーがないことや@マークの入力にこまっています。Outlook Expressでメールアドレスを入力するときに@を全角(これも全角で入力しています)でしか入力できず(アットといれて変換してます)メールアドレスサーバーに接続できませんでしたとなります(半角ならOK)。 BootCamp上でMacと全く(もしくはほとんど)同じくキーボードを使えるようにする方法、もしくは機能・フリーソフトはありませんか? ソフトの場合は無料が条件です。

  • Excel関数、VBA

    A列に数字を入力するとB列に合計が出るようにしたい。 但し、条件があります。 数字の入力範囲はA1からA20まで。 B列の合計はA列の数字が連続した部分の最後に表示。 例 A列 B列 10 10 10 30 20 20 10 30 40 上記のように数字の入力は1行だけの時もあり、5行の時もあるので次の空欄までの合計をB列に表示したい。 VBでも関数でも構いませんので、どなたか詳しい方教えて下さい。

  • Excelユーザー定義関数が書き込まれているセルアドレス

    Excelのユーザー定義関数で、自分自身が書き込まれているセルのアドレスって取得出来るのでしょうか? 例えば、 Function test(MyString As String) As String test = "入力された文字は、「" & MyString & "」です" End Function とユーザー定義関数を作り A1のセルに =test("てすと") と書くと 入力された文字は、「てすと」ですと出てきます。 そこで、ユーザー定義関数のなかで、ユーザー定義関数を呼び出した式が入力されている(上記の例ですと、「A1」)アドレスを取得する方法ってありますか? どなたか、詳しい方いらっしゃいましたら教えてください。

  • Americas Army3の登録の際のメールアドレス入力について

    AA3を登録しようとして、ダウンロードし登録しようとしましたが、メールアドレスを入力する際、@を入力すると緑色のバーが表示されて入力できません。 どうすればいいのでしょうか。 よろしくお願いします。

  • 【エクセル】 関数による電子メールアドレスチェック

    電子メールアドレスに許可された文字列だけが使用されているかを関数のみでチェックしたいと考えています。 条件:使用可能文字列がa~zの英字と「@(アットマーク)」と「.(ドット)」 例(1) A1セル : abc@xxx.jp であれば「0」を表示 例(2) A1セル : abc@().jp であれば「1」を表示 色々試してみたりしたのですがうまくいかず…。 よろしくお願いいたします。