- 締切済み
エクセルでエンターを押す前にデータを反映
例えばFIND関数でA1の”t”を検索するとして、A1に”santa”と入力し、エンターを押すと”4”と答えが出ますが、エンターを押す前(tを入力した時点)で”4”と出るようなことできますか。 以前に同じ質問をしたとき 無理 マクロ VBA できない。 APIレベルなら可? コントロールボックスでchange ならもしや? とゆう回答をもらい。断念、他の解決法を検討しましたが、やはり最後にもう一度。 何を使ってもよいので解決策ありますでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 最初に、 >FIND関数でA1の”t”を検索するとして、 >A1に”santa”と入力し、エンターを押すと”4”と答えが出ますが、 >エンターを押す前(tを入力した時点)で”4”と出るようなことできますか。 Excelのワークシート上では出来ません。セルの入力監視モードはないからです。テキストボックスのKeyPress イベントのような感じでよければ、以下のようにして出来ます。 それから、 >目的的に必須のようなので、 #2さんにもありますが、私は、なるべく実務には関係のないようなご質問は避けています。今回のように、過去にもお聞きになったことがあるのは、一体、どんな目的だろうか、と思うのです。 コントロールツールのTextBoxを設けてください。以下は、TextBox1 となっています。 注意:現在のマクロでは、"t" を多用するような入力は、メッセージのポップアップの作業過程の間に、入力されてしまうので、最初のものしか出てきません。 例えば、tatto の場合は、"1" の次、"3" は出ても、"4" は、確保できません。 'シートモジュール Option Explicit Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long) Dim strLength As Long Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Dim myChrCode As Long '検索文字 Const OBSERVE_CHAR As String = "t" myChrCode = Asc(OBSERVE_CHAR) If KeyAscii = myChrCode Then strLength = TextBox1.TextLength + 1 DoEvents Application.OnTime Now(), Me.Name & ".MsgPopup" End If End Sub Private Sub MsgPopup() Sleep 500 'メッセージのズレの感覚として、0.5秒ぐらいがちょうど良い CreateObject("WScript.Shell").PopUp CStr(strLength), 1 End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
シートにテキストボックスを貼り付ける。 そのコントロールの編集モードで、ダブルクリックして Changeイベントでなく Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = Asc("t") Then MsgBox "t がキーイン" End If End Sub のKeyPressイベントを出して、上記のようにして、編集モードを脱し 、テキストボックスに文字を打ち込んでください。tを打ち込んだとき、"t がキーイン"と出ます。 これを応用して考えている何かで使えるか考えてださい。 応用はビジネスでは余りないと思うが。 FIND関数を考えた時の、もと質問(何がしたいのか)を、我流の解法に誘導せずに、別質問で、正直ぶっちゃけたらどうですか。 世の中広い、良い知恵が教えてもらえるかも知れない。
お礼
これまで我流で関数を組んでしまっているので、それを崩さずにと思うと部分的な質問になってしまいました。 答える方もわかりづらいと思うので、次回はぶっちゃければと思います。
- popesyu
- ベストアンサー率36% (1782/4883)
そのアドバイスというかヒントに従って何か試されたのでしょうか? 例えばコンボボックスChangeで良いならTextBoxChangeでもご希望のものに近いことは出来ると思いますが。どの辺が不満だったのでしょうか。 下記サンプルはシートにTextBoxを配置して試してみてください。 Private Sub TextBox1_Change() On Error Resume Next MsgBox (WorksheetFunction.Find("a", Me.TextBox1.Text)) End Sub
補足
以前の時はマクロを使用しないで。と書いたのでchangeならできるかも、とアドバイスをもらいましたがVBAが全くわからなかったので、それ以上つっこめませんでした。 諦めようと思いましたが、目的的に必須のようなので、VBAに手を出し始めたところです。 現時点はB2に=find("t",A1,1)と関数がありtextboxをA1のところに置きセルに合わせて移動するにチェックを入れてみました。それでVBAのtextbox1のchangeにコード?をコピーしてみました。 しかし、テキストの編集でsantaと入力してもなにも起きません。初心者なので根本的に検討違いのことをしていて呆れるかもしれませんが、導いてもらえれば幸いです。
お礼
みなさん丁寧にありがとうございました。 でもすべて試してみて、何も起きません。 やはり基礎が足りてないみたいです。 もう少し勉強してから、参考にしたいと思います。