【VBA】郵便番号のハイフン自動挿入

このQ&Aのポイント
  • VBAを使用して、郵便番号のハイフンを自動的に挿入する方法について質問です。
  • 質問者は、ハイフンの追加や削除でTextBox4_Changeが動いてしまう問題に直面しています。
  • どのようにすれば、この問題を解決することができるでしょうか?
回答を見る
  • ベストアンサー

【VBA】郵便番号のハイフン自動挿入

Private Sub TextBox4_Change() '郵便番号の”-”処理 If Len(TextBox4.Text) = 4 Then TextBox4.Text = Left(TextBox4.Text, 3) End If If Len(TextBox4.Text) = 3 Then TextBox4.Text = TextBox4.Text & "-" End If End Sub コレでいいかと思ったのですが ハイフンの追加、削除でTextBox4_Changeが動いてしまいます。 どうしたらいいでしょうか?

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

補足ありがとうございました。 >3ケタ目入力→ハイフン挿入 5ケタ目削除→ハイフン削除をしたい 論理的に考えて、ハイフンは手動で入力しないというルールが必要だと思います。 その上で以下のコードにすれば良いでしょう。 If Len(TextBox4.Text) = 4 And Mid(TextBox4.Text, 4, 1) = "-" Then TextBox4.Text = Left(TextBox4.Text, 3) End If If Len(TextBox4.Text) = 4 And Mid(TextBox4.Text, 4, 1) <> "-" Then TextBox4.Text = Left(TextBox4.Text, 3) & "-" & Right(TextBox4.Text, 1) End If 上記でどうでしょうか? ご参考まで。

mougmoug
質問者

お礼

そういう考えなんですね! うまく行きました! ありがとうございます。

その他の回答 (1)

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.1

具体的に何をしたいのか良く分からないです。 上記のVBだと、 TextBox4が4文字だったら左から3文字までを抜き出して(ようはハイフンを消す?)、TextBox4が3文字だったら最後にハイフンを挿入しています。 これだと、結局ハイフンを挿入したいのか削除したいのか良く分からないです^^; 実際にどのような動作にさせたいのかそれを補足していただけますか?

mougmoug
質問者

お礼

ありがとうございます

mougmoug
質問者

補足

7ケタ入れていくので 3ケタ目入力→ハイフン挿入 5ケタ目削除→ハイフン削除 をしたいのです・・・

関連するQ&A

  • エクセルVBAでユーザーフォームのテキストボックス

    ユーザーフォーム上にテキストボックスを8個設置しました。 そこに数値が入力された場合は自動的にカンマ区切りが表示されるように以下のコードを書きました。 これで希望の動きはしてくれるのですが、このやりかたは正しいでしょうか? また、テキストボックスは8個あるので、それぞれに下記のように8通りコードをかかなければいけないのでしょうか?ご教示ください。 Private Sub TextBox1_Change()   If IsNumeric(TextBox1.Value) Then Application.EnableEvents=False     TextBox1.Text = Format(TextBox1.Value, "#,##0") Application.EnableEvents=True   End If End Sub 途中(2~7)略 Private Sub TextBox8_Change()   If IsNumeric(TextBox8.Value) Then Application.EnableEvents=False     TextBox8.Text = Format(TextBox8.Value, "#,##0") Application.EnableEvents=True   End If End Sub

  • TextBoxで4文字のみの文字数制限

    いつもお世話になります。 Win7 excell2010 です。 ご指導を仰ぎたいのは TextBoxに入力できる文字数を「4」文字以上もしくは以下も入力できないようにしたい。 4文字のみ可能に。 例えば 3文字(4文字以下) もしくは 5文字(4文字以上)の場合は入力はできない。 下記のマクロは5文字以上の時は4文字のみが表示されます。 Private Sub TextBox1_Change() If Len(TextBox1.Text) > 4 Then TextBox1.Text = Left(TextBox1.Text, 4) End If End Sub プロパティ設定 MaxLengthプロパティで 4

  • VBAの計算について教えてください。

    お世話になります。 VBA超初心者です。 教えて頂けると助かります。 ユーザーフォームにテキストボックス1、2、3を作成し、それらを計算させて テキストボックス4に表示をさせたいと考えています。 テキストボックスに入力するパターンは以下の2種類です。 (1)すべてのテキストボックスに数値が入る (2)テキストボックス3のみに数値が入る 行いたい計算は、“(テキストボックス1 × テキストボックス2) + テキストボックス3”です。 曲りなりに作成してみましたが、テキストボックス3の数値を変えた時や削除した時などに、 テキストボックス4に入っている数値が残っていたりと、思うようにできません。 作成したものを掲載しておきます。 何卒よろしくお願いします。 テキストボックス1を変更したとき 1、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox1_Change() If TextBox1.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス2を変更したとき 2、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox2_Change() If TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス3を変更したとき 1、2、3に数値が入っていれば、以下の計算を。 1か2に数値がなく、3に数値があれば、3の数値をテキストボックス4へ。 それ以外は“0”をテキストボックス4へ Private Sub TextBox3_Change() If TextBox1.Value = True And TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) ElseIf TextBox1.Value = False or TextBox2.Value = False And TextBox3.Value = True Then TextBox4 = Val(TextBox3.Text) Else texbox24 = 0 End If End SubEnd Sub

  • エクセル VBA ID入力について

    TextBox2に数字をIDを入力して 名前をComboBox1.Text に表示させるようにしました。 しかし、数字入力すると認識される物もあるのですが 表示されない=数字の値は同じ数字 なぜなのでしょうか? Private Sub TextBox2_Change() Dim vRet As Variant vRet = Application.VLookup(TextBox2.Text, _ Sheets("マスタ").Range("A:B"), _ 2, _ False) If VarType(vRet) <> vbError Then ComboBox1.Text = vRet Else ComboBox1.Text = "<< 該当なし >>" End If End Sub Private Sub UserForm_Initialize() With TextBox2 .SetFocus .Text = "ID入力"  .SelLength = Len(.Text) End With 教えて下さい!Sheet2の数字の書式が問題なのでしょうか?

  • 数字と数字のー(ハイフン)は消去しないVBA

    Private Sub Worksheet_Change(ByVal Target As Range) Dim myAsc As Integer, InSP As Integer, myFlag As Integer Dim myStr As String If Intersect(Target, Range("B4:CH4")) Is Nothing Then Exit Sub If Application.CountBlank(Target) > 0 Then Exit Sub Application.EnableEvents = False Target = StrConv(Target, vbUpperCase + vbNarrow) myStr = Target.Value InSP = 0: myFlag = 0 For i = 1 To Len(myStr) myAsc = Asc(Mid(myStr, i, 1)) If Not (myAsc >= 65 And myAsc <= 90) Then If Not (myAsc >= 48 And myAsc <= 57) Then If myAsc = 32 Then InSP = i Else MsgBox ("-(ハイフン)は使用出来ません。クリアします。" & "" & Mid(myStr, i, 1) & "") Target.Select ' Selection.ClearContents Application.EnableEvents = True Exit Sub End If ElseIf myFlag = 0 And InSP = 0 Then myFlag = i End If End If Next If myFlag <> 0 Then Target.Value = Left(myStr, myFlag - 1) & Mid(myStr, myFlag, 99) End If Application.EnableEvents = True End Sub B4:CH4の範囲で半角英数字の小文字で入力したら自動で大文字となり、-(ハイフン)を入力したら文字がクリアされるVBAがあります。 質問ですが先ほどのVBAで英字と数字の間のー(ハイフン)はクリア対象となり、数字と数字の間にー(ハイフン)の場合はクリアしないVBAはどの様にすれば良いでしょうか? ※「GRE-879」の時は消去対象となり、「GRE868-76」の時は消去しない感じです。

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • エクセルVBAについて質問です。

    エクセルVBAについて質問です。 ユーザーフォームのテキストボックスに数字以外を入力するとエラーメッセージが出るように関数を作ったのですが、 Private Function AA(objtextbox As MSForms.TextBox) As Boolean Dim A As String AA = False A = Trim(objtextbox.Text) If objtextbox.Text <> "" Then If IsNumeric(A) = False Then MsgBox "数値 Error", vbCritical With objtextbox .SetFocus .SelStart = 0 .SelLength = Len(.Value) End With AA = True End If End If End Function Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub テキストボックス200近くある場合、1つ1つに Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub と作っていかなくてはいけないのでしょうか? プロシージャ名に変数使おうとしたら上手くできませんでした。 どなたか助けてください。

  • ListBoxに値を追加していくには。

    Private Sub CommandButton31_Click() ListBox12.ColumnCount = 5 ListBox12.ColumnWidths = "4.0cm;4.0cm;2.0cm;3.0cm;2.0cm" End Sub Private Sub TextBox175_Change() SetList End Sub Private Sub TextBox176_Change() SetList End Sub Private Sub TextBox177_Change() SetList End Sub Private Sub TextBox178_Change() SetList End Sub Private Sub TextBox179_Change() SetList End Sub Private Sub SetList() ListBox12.Clear ListBox12.AddItem TextBox175.Text ListBox12.List(0, 1) = TextBox176.Text ListBox12.List(0, 2) = TextBox177.Text ListBox12.List(0, 3) = TextBox178.Text ListBox12.List(0, 4) = TextBox179.Text End Sub ここで、TextBox175~179の値をコマンドボタン1を押す度、 ListBox12の最終行の直下に挿入されていくようにしたいです。 列はそのままです。 1行目 (0,1),(0,2),(0,3),(0,4) 2行目 (1,1),(1,2),(1,3),(1,4) 3行目 (2,1),(2,2),(2,3),(2,4) どのようにやればいいでしょうか。

  • VBAで数値入力について

    Excel VBAで、UserFormにTextBoxを配置しています。 TextBoxに入力された数値は、半角数値で正数で小数点以下の桁数は1までと制限したいです。 現在は下記のプログラムにしているのですが、「1.2.3」と入力されるとエラーが表示されずに通ってしまいます。。。 どのようにしたらよいのでしょうか。 For i = To Len(TextBox1.Text) If Not Mid(TextBox1.Text, i, 1) Like "[0-9 And .]" Then Message"半角数値ではありません" Exit Sub End If Next i If Val(Text1.Text) = 0 Or TextBox1.Text = "" Then Message"数値を入力してください" Exit Sub End If

  • 12個のCommandbuttonをスマートに

    はじめまして 2003 XP UserFormにCommandbuttonが12個あります。 Private Sub CommandButton1_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "1" Else: TextBox1.Value = TextBox1 & "1" End If End Sub Private Sub CommandButton2_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "2" Else: TextBox1.Value = TextBox1 & "2" End If End Sub Private Sub CommandButton3_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "3" Else: TextBox1.Value = TextBox1 & "3" End If End Sub Private Sub CommandButton4_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "4" Else: TextBox1.Value = TextBox1 & "4" End If End Sub Private Sub CommandButton5_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "5" Else: TextBox1.Value = TextBox1 & "5" End If End Sub Private Sub CommandButton6_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "6" Else: TextBox1.Value = TextBox1 & "6" End If End Sub Private Sub CommandButton7_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "7" Else: TextBox1.Value = TextBox1 & "7" End If End Sub Private Sub CommandButton8_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "8" Else: TextBox1.Value = TextBox1 & "8" End If End Sub Private Sub CommandButton9_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "9" Else: TextBox1.Value = TextBox1 & "9" End If End Sub Private Sub CommandButton10_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "0" Else: TextBox1.Value = TextBox1 & "0" End If End Sub Private Sub CommandButton11_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "00" Else: TextBox1.Value = TextBox1 & "00" End If End Sub Private Sub CommandButton12_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "000" Else: TextBox1.Value = TextBox1 & "000" End If End Sub  これをもっとスマートに出来ないでしょうか? 宜しくお願いします。

専門家に質問してみよう