• ベストアンサー

一致しない場合の処理・・

エクセル2003です。 Sub 練習()  入力 = UserForm1.TextBox1.Text If 入力 = "" Then     MsgBox"日付を入力してください" End Sub この状況の場合、テキストボックスに何も入力しないと 日付を入力してくださいと出るような状態です。 これを、テキストボックスに ○/△の形式で入力されていない場合は 日付を正しく入力してくださいと表示したいのですが どうしたらいいでしょうか? できれば、AB/CDの形でABCDがとり得る範囲外の場合 に日付を正しく入力してくださいと表示したいです Aのとり得る範囲は0,1 Bは0~9 Cは0~3 Dは0~9です

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

  • ベストアンサー
  • arne
  • ベストアンサー率83% (5/6)
回答No.4

Sub 練習()  If not IsDate(UserForm1.TextBox1.Text) Then   Msgbox "日付を入力して下さい"  End If End Sub はいかがでしょうか。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。#2のWendyです。 #3さんの >VBもVBAも正規表現は標準ではできなかったはずですから CreateObject("VBScript.RegExp") だと思います。 それと、#2で私が書いたのは、 strDate = CStr(Year(Date)) & "/" & strDate 単に、そのまま、IsDate(strDate) と入れてしまうと、"11/31" は、False としては出てきません。11月31日は、存在しませんから間違いですね。

  • parapa
  • ベストアンサー率15% (42/273)
回答No.3

まずABとCDとすべてテキストボックスを 分離するのが簡単ですね。 AB/CDを □/□として □一つが一つのテキストボックス /はラベルで作成 で最初のテキストボックスには1~12 後者の適すボックスには1~31 までの数字が入ってあとの数字がNGになるように すればいいのでは? if 月txtbox が1~12 and 日txtbox が1~31 ってのをプログラミングしてやればいいと思いますよ。 そうすれば「/」の部分に悩まされることはないでしょう。 数字だけの制御に集中できます。 どうしても1つのテキストボックスで行いたいなら 正規表現が便利ですね。 ただVBもVBAも正規表現は標準ではできなかったはずですから 正規表現の部分をDLL(フリーであります) に任せてやる必要があるかもしれません。 VBAがDLLの呼び出しができれば (VBでしか試したことないので) http://www.asahi-net.or.jp/~dp8t-asm/java/tips/RegexCollection.html こんな感じで制御して

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ユーザーが、どのように入れるにしても、日付型として取れるものなら、OKとし、そうでなければ、ダメとすればよいわけです。 11/30 と 11/31 と比較してみてください。 もちろん、空の状態でも、"日付を入力してください"、と出るはずです。 Sub TestSample() Dim strDate As String strDate = "11/30" '比較 11/31 strDate = CStr(Year(Date)) & "/" & strDate If IsDate(strDate) Then  '別の作業に進む Else  MsgBox "日付を入力してください" End If End Sub

  • yamada_28
  • ベストアンサー率43% (21/48)
回答No.1

1.やりたいことがはっきりしているので、まずはやりたいことを一覧にまとめてみましょう。 ○やりたいこと Aは0または1だけ許可する。それ以外は× Bは0~9の範囲だけ許可する。それ以外は× Cは0~3の範囲だけ許可する。それ以外は× Dは0~9の範囲だけ許可する。それ以外は× 2.そうすると、前提条件が見えてくると思います。 ○前提条件 A、B、C、Dには必ず何か文字が入っていないとだめ。つまり、「かならず4文字」である。 3.後は、この法則にしたがってVBAを組んでいけばよいです。 [ヒント]判定するためのIF文と、1文字目、2文字目、3文字目、4文字目を抜き出すためのMID関数。これを使えばあなたがやりたい事が実現できます。ヘルプ見るなり、インターネットで調べるなりして少しずつ身につけましょう。 がんばって!

関連するQ&A

  • 間違った入力をした時、もう一度入力させる場合

    以前、 "textBox1に品番を入れたら、Label1に品名を表示させています。 このとき、TextBox1に存在しない品番を入力した場合は、 再度入れなおしをさせたいのです。" における質問と回答(-yellowtail-&e10go) を参照して textbox1の文字数が8文字以外のときは、もう一度textbox1に戻って来るように、次のように入力しました。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Len(TextBox1) <> 8 Then MsgBox ("正しい日付を入力してください。") Cancel = True TextBox1.SetFocus(この行は、うまく行かないので、勝手につけてみましたが、うまく行きませんでした) Exit Sub End If End Sub しかしながら、うまくtextbox1に戻ってくれません。 また、この入力のためのuserformを消す際にも、 MsgBox ("正しい日付を入力してください。") が表示されてしまいます。 2つの点で困っています。 どのように改良したら良いでしょうか? すいませんが、よろしくお願いいたします。

  • VBE ユーザーフォーム

    下記3点につき、ご教授御願い致します。 (1)テキストボックスに日付を入力。 入力する値は6桁の数字。 テキストボックス入力→050902 テキストボックス表示→05/09/02 としたい。 Private Sub TextBox16_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = Left(TextBox1.Text, 2) & "/" & Mid(TextBox1.Text, 3, 2) _ & "/" & Right(TextBox1.Text, 2) End Sub とすると、見かけ上は「05/09/02」となってくれるのですが、そうするとテキストボックスに何も表示しないでEnterを押すと(入力後に消した場合等も)「//」が出てしまいます。 入力する日付は本日とは限りません。 表示は「2005/09/02」ではなく「05/09/02」としたい。 (2)テキストボックスに今日の日付を自動的に表示させたい。 (手入力で変更できるようにする為、テキストボックスを使用) Private Sub UserForm_initialize() TextBox2.Text = Date End Sub とすると「2005/09/02」となり、「05/09/02」としたい。 (3)テキストボックス同士の計算 TextBox3とTextBox4に数字を入力し、その積をTextbox5に表示させたい。 TextBox5.text = Textbox3.text * TextBox4.text とすると 「型が一致しません」と出てしまう。 (「text」を「value」に変えても同じ) できましたら、イベント名もお教え下さい。 ---------------------------------------- よろしく御願いします。

  • VBAでエラー時の処理について

    入力画面には3つのTextBoxあり、すべてを入力したら「記入」ボタンをクリックします。 その時、TextBox2とTextBox3の合計がTextBox1の値と一致するか判定します。 一致した場合は、その値を選択したセルに表示し、一致しなかった場合は、メッセージを表示させ、メッセージの「OK」ボタンをクリックすると「記入」ボタンがクリックされる前の状態(UserForm1の入力項目にデータが入力されている状態)に戻したいのですが、どのようにしたらよいのでしょうか。 現在は、下記のようなかんじになっています。 Private Sub CommandButton1_Click()   Sum = 0  For N = 1 To 2  If Controls("TextBox" & N).Text = "" Then   RepMsg = MsgBox("値を入力して下さい。", vbOKOnly + vbExclamation, "入力確認")   『? 「記入」ボタンがクリックされる前の画面(UserForm1)に戻る』  Else   Sum = Val(Controls("TextBox" & N).Text) + Sum  End If  Next N  If Val(TextBox1.Text) <> Sum Then   RepMsg = MsgBox("合計が一致しません。", vbOKOnly + vbExclamation, "合計確認")   If RepMsg = vbOK Then    『? 「記入」ボタンがクリックされる前の画面(UserForm1)に戻る』   End If  End If ( 表示 ) End Sub

  • 年齢の計算について

    いろいろ調べましたが、なかなか分からないので質問させていただきます。 エクセルのVBAでユーザーフォーム内にテキストボックスを3つ配置しました。 それぞれのテキストボックスは以下のようにしています。 テキストボックス1 基準日の入力 (2012/4/1 など) テキストボックス2 生年月日の入力 (1980/5/10 など) テキストボックス3 基準日での年齢を表示(自動表示) テキストボックス1、2に日付を入力した場合にテキストボックス3に年齢が自動で表示される といった内容です。 そこで、以下のようにプログラムしましたが、基準日を過ぎた日付をテキストボックスに入力して しまった場合にエラーになって止まってしまいます。 そこで、テキストボックス2にテキストボックス1の基準日を過ぎた日付を入れてしまったときに エラーメッセージがでるようにしたいのですが、どうすればよいでしょうか? また、文字などを入れてしまった場合には、エラーメッセージが出ますが、和暦(例:60/4/10) など入れてしまった場合にもエラーになり止まってしまいます。 このような場合(yyyy/mm/dd以外の入力の場合)にもエラーメッセージが出るようにするには どうすればよいでしょうか? Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox2 = "" Then Exit Sub Else If Not (IsDate(Me.TextBox2)) Then MsgBox "日付を入力してください" & Chr(10) & "例(2002/4/1)", vbCritical TextBox2 = "" Cancel = True Exit Sub Else TextBox3.Value = Evaluate("datedif(""" & TextBox2.Value & """,""" & TextBox1.Value & """,""y"")") End If End If End Sub 何卒よろしくお願いします。

  • Excelでセル検索したセルの色をテキストボックスに表示

    セル検索した結果をテキストボックスに表示する時、文字は表示できましたが、セルの色もテキストボックスに表示したいのですが、何処を修正したらいいのか分かりません。 教えてください。 宜しくお願いします。 Sub AAA() strMoji$ = UserForm1.TextBox1.Text If UserForm1.TextBox1.Text = "" Then MsgBox "検索条件を入力してください。", 48 Exit Sub End If On Error GoTo Fail Worksheets("Sheet1").Range("a:a").Find(What:=strMoji, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ ).Activate lonNUM& = Selection.Row UserForm1.TextBox2.Text = Cells(lonNUM, 2).Value UserForm1.TextBox3.Text = Cells(lonNUM, 3).Value UserForm1.TextBox4.Text = Cells(lonNUM, 4).Value UserForm1.TextBox5.Text = Cells(lonNUM, 5).Value UserForm1.TextBox6.Text = Cells(lonNUM, 6).Value UserForm1.TextBox7.Text = Cells(lonNUM, 7).Value UserForm1.TextBox8.Text = Cells(lonNUM, 8).Value Exit Sub Fail: MsgBox "該当なし", 48 End Sub

  • ユーザーフォーム データ消去の時の処理

    環境:Excel2002です ユーザーフォームのテキストボックスの入力チェックをしています Rem**************** Rem TextBox5 Check Rem**************** Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox5.Text) = 0 Then '未入力Check If IsNumeric(Me.TextBox5.Text) = False Then '数値入力Check MsgBox "数値で入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If MsgBox "入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If Me.TextBox5.Text = Format(Me.TextBox5.Text, "#,##0") End Sub 入力したデータを消去して Enterキーを押すか、マウスでクリックした時のいずれでも Len(Me.TextBox5.Text) = 0 と認知されて "数値で入力してください"のメッセージが表示されてしまいます このメッセージが出ないようにするにはどうしたらいいのでしょうか ご教示願います

  • EXCEL VBA---IsDate

    お知恵をお貸し下さい。 VBAでフォームを作成し、テキストボックスに数字(日付)を入力 (入力→10/7, 表示→2005/10/07) それを、IsDateで日付かどうかチェックさせたいのですが 下記のコードでは、例えば10月35日と入力してもエラーになりません。 (入力→10/35, 表示→1935/10/01) 2005/10/35と入力すればエラーになってくれるのですが やはりこの方法しかないのでしょうか? もし、良い方法がありましたらお教え下さい。 よろしくお願いします。 ----------------------------------------------------------------- Sub Test() Dim Data As Variant Data = TextBox16.Text If IsDate(Data) Then TextBox16.Value = CDate(Data) Else MsgBox ("正しい日付を入力してください。") End if End sub -----------------------------------------------------------------

  • VBA テキストボックスで日付を変更するとエラー

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更するというマクロを作成しようとしています。 'テキストボックス2に初期値として今日の日付を入力 Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") End Sub 'テキストボックス2に入力された日付はdenpyoudateという変数に格納される Private Sub TextBox2_Change() denpyoudate = UserForm2.TextBox2.Value End Sub 入力された日付を変数として利用したいので、上記のようなコードにしたのですが、実際に初期値である今日の日付を編集すると「型が一致しません」というエラーが出てしまいます。 このエラーを回避し、テキストボックスに入力された日付を変数として使用するにはどうすればよいでしょうか?

  • Excelで検索結果表示の修正

    下記のマクロでA列だけ検索できるようにしたいのですが、どこを修正したらいいのか教えてください。 Private Sub CommandButton1_Click() AAA End Sub Sub AAA() strMoji$ = UserForm1.TextBox1.Text If UserForm1.TextBox1.Text = "" Then MsgBox "検索条件を入力してください。", 48 Exit Sub End If On Error GoTo Fail Cells.Find(What:=strMoji, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ ).Activate lonNUM& = Selection.Row UserForm1.TextBox2.Text = Cells(lonNUM, 2).Value UserForm1.TextBox3.Text = Cells(lonNUM, 3).Value Exit Sub Fail: MsgBox "該当なし", 48 End Sub Private Sub UserForm_Click() End Sub

  • ユーザーフォームVBAでCells(n, 7)が

    いつもお世話になります Windows7 excell2010 です ご指導を仰ぎたいのは参照図で言うと、 TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び 参照図のG13に入力されません。 VBAを勉強し始めたはかりですのでどこが悪いかわかりません。 恐れ入りますがご指導願えませんでしょうか。 下記参考にします。 Module のコードには Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub UserForm1 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Cells(n, 4) = UserForm1.TextBox4.Text Cells(n, 5) = UserForm1.TextBox5.Text Cells(n, 6) = UserForm1.TextBox6.Text Cells(n, 7) = UserForm1.TextBox7.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

専門家に質問してみよう