質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2072閲覧

「Excel VBA ユーザーフォーム内TxetBoxの値をIf文で変換の質問」

masayone

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/08/16 16:37

OS:Windos10
ソフト:Excel 2016

◆固定電話と携帯電話各々にハイフンを入れたい
⓵固定電話 10桁の場合 0123456789 →012-345-6789
⓶携帯電話 11桁の場合 09012345678→090-1234-5678

現在のコード
Private Sub TextBox1_change()
Dim n As String
n = TextBox1.Text
If Len(TextBox1.Text) = 11 Then
TextBox1 = Format(n, "0##-0###-0###")
End If
End Sub
上記プロシージャー?でTextBoxは以下の様に変換されます。
「09012345678 → 090-1234-5678」

-------------追加したいコード------------------
If Len(TextBox1.Text) = 10 Then
TextBox1 = Format(n, "0##-0##-0###")
0123456789→ 012-345-6789

試したこと

追加として
これに、「固定電話」10桁の場合
0123456789を012-345-6789としたく・Else ・Elseif 等をコード記入しましたがうまく行きません

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/08/16 23:04

プログラムコード(およびエラーメッセージ)は質問内容としては最も重要な部分であるため、見やすくしていただけると助かります。<code>ボタン押下→「コード」部分にコードを貼り付け→「ここに言語を入力」に対象言語名記入(エラーメッセージの場合は不要)の手順で「コードハイライト化」してください。(質問編集画面ではリアルタイムでプレビューが表示されるので見ながら調整してください)
masayone

2018/08/16 23:38

ご指摘ありがとうございます。Markdown記法の使用方法がいまいち理解できず質問をアップしてしまいました。
m.ts10806

2018/08/16 23:53

質問は編集できますので適宜対応してください。ヘルプページなどで機能については解説がありますが、実際に自分で入れてみないと分からないのが実際ですよね。基本は適用したい箇所を選択状態にしてボタンを押す(URLリンクなどはそのあと入力あり)だけですが、質問編集画面ではリアルタイムでプレビューが出ていますのでそちらを確認しながら調整してください
guest

回答3

0

Changeイベントだと1文字入力したり削除するだけで発生します。
計単電話番号を入力するとき、10桁まで入力した時点でイベントが発生して、ハイフンが挿入されます。

この場合、適切なイベントは、AfterUpdateです。

vba

1Private Sub TextBox1_AfterUpdate() 2 Dim strNum As String 3 4 strNum = TextBox1.Text 5 6 If strNum Like "###########" Then 7 TextBox1.Text = Format(strNum, "0##-0###-0###") 8 ElseIf strNum Like "##########" Then 9 TextBox1.Text = Format(strNum, "0##-0##-0###") 10 End If 11End Sub

これだと、10桁または11桁の数字を入力して、Enterキーなどで別のコントロールに移動するときにハイフンが挿入されます。それ以外(ハイフンがすでに挿入されていたりなど)は、変更しません。
ユーザーインターフェイスとしては、これが正解だと思います。
(あと、追加するなら、電話番号として正しくない場合は、メッセージを表示する機能でしょうか。)

ちなみに、固定電話の局番は、2桁から5桁までありますが、3桁固定でいいのでしょうか。
3桁以外にも自動で対応する関数を下記で紹介していますのでご参考に。(ただし、この関数でも完璧ではありません。)

区切りなしの電話番号に適切な位置に区切り文字を挿入する関数(汎用版) - hatena chips

投稿2018/08/17 01:51

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masayone

2018/08/17 02:12

hatena19さんありがとうございます! AfterUpdate()の更新後処理 Change()変更時即処理(文字を消すと「型が一致しません。エラー」 の違いですか! 皆さんの回答、大変勉強になりました、感謝します。 皆さんに「ベストアンサー」とさせて頂きたのですが。 今回先に頂いたamatukaさんの Replaceを採用させて頂きました。
hatena19

2018/08/17 02:36

ユーザーインターフェイスとして考えたとき、 ユーザーが入力したハイフンを強制的に削除していいのか、 局番の桁数が3桁固定のいいのか、 上記でいいのなら、amatukaさんのコードで問題ないでしょう。 自分としては、例えばユーザーが東京在住で、03-9999-9999 という入力をしたいというときに、それを許さないユーザーインタフェイスは疑問に思います。
masayone

2018/08/17 04:10

hatena19さんご指摘ありがとうございます。 今作成中のユーザーフォームは東京在住03-0000-0000は考慮していませんでした。 今のフォームはそのままで、次にはhatena19さんのAfterUpdate()で作ってみます、ありがとうございます。 今後とも宜しくお願い致します。
guest

0

ベストアンサー

VBA

1Private Sub TextBox1_Change() 2 Dim strNum As String 3 strNum = Replace(TextBox1.Text, "-", "") 4 5 If Len(strNum) = 11 Then 6 TextBox1.Text = Format(strNum, "0##-0###-0###") 7 ElseIf Len(strNum) = 10 Then 8 TextBox1.Text = Format(strNum, "0##-0##-0###") 9 Else 10 TextBox1.Text = strNum 11 End If 12End Sub 13

3109さんのコードを拝借しました。
これでどうでしょうか

投稿2018/08/17 00:49

amatuka

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masayone

2018/08/17 01:52

amatukaさんありがとうございます。 正常に実現できました。 ちなみに、strNum = Replace(TextBox1.Text, "-", "") Replaceこれは"-"を””に置き換え? TextBoxに"-"付きの文字列が入っているとの理解でよろしいでしょうか 後学の為に解説頂ければ幸いです。
amatuka

2018/08/17 03:33

TextBox1.Text = Format(strNum, "0##-0###-0###") この部分で、11桁ないし、10桁になった時にハイフンが追加されています。 10桁に到達した時点よりハイフンが追加されてしまうため、12桁(ハイフン2つ分増加)となり、以降の11桁ならばというIF文が反応しなくなります。 ご察しの通り、これを防ぐために次の一文でハイフンを置換で消しています strNum = Replace(TextBox1.Text, "-", "")
guest

0

VBA

1Private Sub TextBox1_change() 2 3 Dim n As String 4 n = TextBox1.Text 5 6 If Len(TextBox1.Text) = 11 Then 7 TextBox1 = Format(n, "0##-0###-0###") 8 ElseIf Len(TextBox1.Text) = 10 Then 9 TextBox1 = Format(n, "0##-0##-0###") 10 End If 11 12End Sub

これでいかがでしょう。

投稿2018/08/16 18:17

3109

総合スコア80

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masayone

2018/08/16 23:20

3109さん、またお世話になります。 早速実装してみました、結果「何れも、3桁ー3桁-4桁(5桁)」 固定電話10桁→012-345-6789 携帯11桁090-123-45678 先に自身でもElseIfを試してみました同じ結果でした。 TextBox1をLenで文字数を数える時挿入される"-"を数えてしまう様なこともあるもでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問