
テキストボックス内に×の文字列があれば、エンターキーを押すたびに×の前にカーソルが行きます。
最後の×の後ろにもカーソルが行くようにしたいのですがご教授くださいませ。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
モンストをインストールして始...
-
モンスト 獣神化改から獣神化に...
-
h:mm:ssの意味
-
今流行っていて、絶対面白いス...
-
モンスト 四宮かぐやのおすすめ...
-
モンストの質問です!超獣神祭...
-
モンストの引き継ぎってチュー...
-
モンスト ミカエル(英雄の証3)...
-
機種変について
-
モンスト でリアルマネートレー...
-
モンストの赤ずきんノンノは何...
-
モンストの事で質問です。 最近...
-
モンストのノマダンのボーナス...
-
モンストのサブ垢作成について...
-
モンストで運極にすべき轟絶キ...
-
モンストの実について質問です ...
-
リセマラって何回ぐらいで当た...
-
APEXをやっててよく聞くんです...
-
iphoneのボイスメモをPCに上書...
-
貫通扉の位置によって、「通り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
モンスト 獣神化改から獣神化に...
-
モンストのサブ垢作成について...
-
モンストをインストールして始...
-
モンストのノマダンのボーナス...
-
モンストの守護神の外し方を教...
-
突然スマホからモンストの音が...
-
モンストについてです! 下の丸...
-
助けて下さい
-
間違えてモンストを消してしま...
-
なにかオススメのゲームアプリ...
-
ファイアーエンブレム~紋章の...
-
モンストの今のコラボで全キャ...
-
5月4日は「みどりの日」
-
モンスト でリアルマネートレー...
-
モンストで運極にすべき轟絶キ...
-
モンストをアンドロイドからiPh...
-
モンストの質問です。 なんでga...
-
LINEを使わないでモンストマル...
-
【モンスト】 ボーナスステージ...
-
モンスト ミカエル(英雄の証3)...
おすすめ情報