![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
テキストボックス内に×の文字列があれば、エンターキーを押すたびに×の前にカーソルが行きます。
最後の×の後ろにもカーソルが行くようにしたいのですがご教授くださいませ。
If .Value Like "*×*×*" Then
s = .SelStart
ss = InStr(s + 2, .Value, "×")
If ss >= s + 2 Then
.SelStart = ss - 1
KeyCode = 0
End If
ElseIf .Value Like "*×*×*×*×" Then
s = .SelStart
ss = InStr(s + 2, .Value, "×")
If ss >= s + 2 Then
.SelStart = ss - 1
KeyCode = 0
End If
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
仕様が断片的で、はっきりしませんが
質問者さんは、こういうことがしたいのかな?
With TextBox1
s = .SelStart
ss = InStr(s + 2, .Value, "×")
If ss > 0 Then
.SelStart = ss - 1
KeyCode = 0
ElseIf Mid(.Value, s + 1, 1) = "×" Then
.SelStart = s + 1
KeyCode = 0
End If
End With
No.4
- 回答日時:
#1、3、cjです。
#3補足欄へのレスです。まぁ、そこら辺は二極の考え方がありますよね。
入力を強制するのか、入力をアシストするのか、
今回のご質問ではアシストを意図している、ということが解りました。
If .Value Like "*×" Then
s = .SelStart
ss = InStr(s + 2, .Value, "×")
If ss > 0 Then
.SelStart = ss - 1
KeyCode = 0
ElseIf s < Len(.Value) Then
.SelStart = s + 1
KeyCode = 0
こんな感じでどうでしょう?
No.3
- 回答日時:
#1、cjです。
補足欄拝見しました。If .Value Like "*×" Then
s = .SelStart
ss = InStr(s + 2, .Value, "×")
If ss > 0 Then
.SelStart = ss - 1
KeyCode = 0
Else
.SelStart = s + 1
KeyCode = 0
End If
以上をご提示されたものに代えるように(If Then ...が閉じていない状態)書きました。
こんな感じで如何でしょう?
> 2つ目の指摘
>> ss = InStr(s + 1, .Value, "×")
これは私の方の思い違いだったようです。
補足を拝見して理解できました。
> If .Value Like "*×" Then
よーく解りました。
この分岐は、他の分岐を簡単にできる書き方なので、
非常に優れていると思いました。
少なくとも一度は思い違いしていますから、
(もうないようにしているつもりでも)また違っていたりしたら、
遠慮なく仰ってください。
この回答への補足
すいません!
最後の質問です。
できるようになりました!が、最後の×の後にカーソルが行った後
数値を入力して、エンターキーを押せば、次のボックスに飛ぶのでいいのですが、何も入力なしでエンターキーだと次のボックスにいかないです。
入力は基本的にするので問題ないのですが。
No.2
- 回答日時:
>最後の×の後ろにもカーソルが行くようにしたい
If Right(.Value, 1) = "×" And Len(.Value) - 1 = .SelStart Then
.SelStart = Len(.Value)
KeyCode = 0
>ElseIf .Value Like "*×*×*" Then
> s = .SelStart
> ss = InStr(s + 2, .Value, "×")
> If ss >= s + 2 Then
> .SelStart = ss - 1
> KeyCode = 0
> End If
>ElseIf .Value Like "*×*×*×*×" Then
No.1
- 回答日時:
こんにちは。
最後(一番右)の"×"の後ろに,
カーソルが行くようにする
文字通りであれば、こんな感じです。
ss = InStrRev(.Value, "×")
.SelStart = ss
KeyCode = 0
それとも"×"の前にカーソルを置きつつ、
"×"の幅だけ選択状態にする
というようなことでしたら、
.SelStart = ss - 1
.SelLength = 1
KeyCode = 0
のように1行加えます。
とりあえず、部分的なパーツとしては以上です。
先の解釈の方が要望に近い気がしますが、
> 最後の×の後ろにもカーソルが行くようにしたいのですが
どんな場合に、という条件付けが、こちらでは判りません。
カーソルはひとつしかありませんから、
どんな場合に、何番目の"×"の、[前|後]にカーソルを移動する、
という条件分岐について、そちらで整理してみてください。
2点、指摘があります。
現在の条件分岐の骨格として、
If .Value Like "*×*×*" Then
' ' ×が2つ以上含まれる場合に処理
ElseIf .Value Like "*×*×*×*×" Then
' ' 処理されることはない。
End If
のようになっていると思われますが、
(部分的なコードしか提示されていないのでハッキリしないのですが)
上記の通り、ElseIfの条件に合致した上での処理に進むことはありません。
Like "*×*×*×*×"
にマッチするものは、必ず、
Like "*×*×*"
にマッチするからです。
文章化して説明すると、
.Value Like "*×*×*" Then
「テキストボックスの値に"×"が2つ以上マッチするすべての場合」
ですから、この条件に合致しないケース(ElseやElseIf)というのは、
「テキストボックスの値に"×"がマッチしないか、1つだけマッチする場合」
という意味になります。
.Value Like "*×*×*×*×" Then
については
「テキストボックスの値について、最後(一番右)の文字が"×"であり、
且、全体で"×"が4つ以上マッチする場合」
という意味になっていますが、それ以前の条件(Else の意味)として、
「...."×"が2つ未満....」
になっていますから、決して条件に合致することはありません。
思い通りにVBAの条件分岐が書けていないことは、
これから出来るようにすれば良いので、あまり気にすることはありませんが、
VBAを書く前の準備として、ご自身で条件が整理できていないのであれば、
それは誰の手も借りられるものではありませんから、
面倒くさがらずに文章化できるように努めてください。
どれだけVBAに熟れた人でも、条件分岐で迷う時はあり、
VBAではなく文章を書いてみることで、設計を見直すことはあります。
次に、
ss = InStr(s + 2, .Value, "×")
についてですが、これが、もし、
ss = InStr(s + 1, .Value, "×")
であれば、
「現在のカーソル位置の次の見つかる"×"」
という風に受け取れるのですが、
何故、1文字飛ばすのか、説明ないままだと、何がしたいのか解らないです。
'+ 2'と書いた時点では、ご自身の中では整理された説明が出来ていた筈ですから、
質問に関しても、何かしら説明があれば、
今よりは要望に適うアドバイスが出来るようになるかと思われます。
とりあえず。また補足あれば、なるべく、お応えします。
この回答への補足
ありがとうございます。
一つ目の指摘ですが、下記のようにシンプルでひとつで良かったですね。
If .Value Like "*×" Then
s = .SelStart
ss = InStr(s + 2, .Value, "×")
If ss >= s + 2 Then
.SelStart = ss - 1
KeyCode = 0
End If
2つ目の指摘ですが、長らくやっていませんでしたのすぐにわかりませんが検証したいと思います。
本題です。
説明不足でした。
たとえば、テキストボックス1にカーソルがあるときにエンターキーを押します。すると、テキストボックス2に飛びます。
そこには、×××とあったとします。
×の前にカーソルが行き、数値を入力します。
50×××
次にエンターキーを押すと、次の×の前にカーソルが行きます
同じく数値を入力します。
50×100××
エンターキーで数値入力
50×100×250×
次にエンターキーを押すと、最後にカーソルが行く感じです。
ss = InStrRev(.Value, "×")
.SelStart = ss
KeyCode = 0
教えて頂いたとおりにすると、2つめの×の前に行かなくなります。
説明不足でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
モンストのサブ垢作成について...
-
突然スマホからモンストの音が...
-
モンストをインストールして始...
-
モンストのノマダンのボーナス...
-
モンストの鋼錬コラボのオープ...
-
1月1日のイベント
-
おはようございます、モンスト...
-
もしモンストでドラゴンボール...
-
モンストのリセマラについてで...
-
親友とモンストを周回などやっ...
-
モンストの引き継ぎってチュー...
-
モンストの超獣ってどのくらい...
-
モンストの25体の中から一体ゲ...
-
モンストのコラボは一度きりナ...
-
エクセル マクロ 24時間を越...
-
モンストの初フレンド機能について
-
モンストバックアップはしたん...
-
モンスターストライクとパズド...
-
モンスト 超獣神祭 モンストを...
-
モンストの課金パックの質問で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
突然スマホからモンストの音が...
-
モンストのノマダンのボーナス...
-
モンストのサブ垢作成について...
-
モンストをインストールして始...
-
エクセル マクロ 24時間を越...
-
モンスト 獣神化改から獣神化に...
-
間違えてモンストを消してしま...
-
モンストについてです! 下の丸...
-
ファイアーエンブレム~紋章の...
-
LINEを使わないでモンストマル...
-
モンスト でリアルマネートレー...
-
モンストのわくわくの実の育て...
-
モンストの質問です。 なんでga...
-
モンストでモンスポットの至宝...
-
モンストってLINE以外でマルチ...
-
モンストとコラボして欲しいのは?
-
暇なので…。
-
おはようございます、モンスト...
-
モンストの守護神の外し方を教...
-
モンスターストライクとパズド...
おすすめ情報