[[20221013171915]] 『マクロで検索ボタン』(検索ボタン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで検索ボタン』(検索ボタン)

過去に友人に聞いて作成してもらったマクロです
純粋なフィルタを使用した場合は、件数が多い場合表示できなかったり
曖昧検索が使いずらかったので…下記を使用しています。

もっと単純な式でできたりしますか?
別に問題があるわけではないのですが…
あと、マクロのボタンを使用するとnumlockがoffになるのですがこれはどうしようもないのでしょうか?

Sub 半角検索()
Application.ScreenUpdating = False
Dim 検索文字 As String, 記憶 As String
記憶 = Range("P1").Value
If IMEStatus = vbIMEModeOff Then

      SendKeys "{kanji}", True
End If
検索文字 = InputBox("含まれる文字を入力してください", , 記憶)
Range("P1").Value = 検索文字
    検索文字 = Application.WorksheetFunction.Substitute(検索文字, "*", "*")
    Selection.AutoFilter Field:=3, Criteria1:="*" & 検索文字 & "*"
End Sub

**************************************

Sub 全角検索()
Application.ScreenUpdating = False
Dim 検索文字 As String, 記憶 As String
記憶 = Range("O1").Value
If IMEStatus = vbIMEModeOff Then

      SendKeys "{kanji}", True
End If
検索文字 = InputBox("含まれる文字を入力してください", , 記憶)
Range("O1").Value = 検索文字
    検索文字 = StrConv(検索文字, vbWide)
    検索文字 = Application.WorksheetFunction.Substitute(検索文字, "*", "*")
    Selection.AutoFilter Field:=5, Criteria1:="*" & 検索文字 & "*"
End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


SendKeysでNumLockが外れてしまうのはよく知られている不具合です。

VBA.SendKeysでキーボードのロックが外れる現象への対策
https://qiita.com/nukie_53/items/f069a1e48cddca0024c2

こちらを参考にしてください。
(西瓜) 2022/10/13(木) 19:31:09


[[20190214073506]]『Sendkeysで勝手にNumlockがON-OFF回避する方法について』(マイン)

あとはこのサイト内で挑戦されていた方たちの方法。
(西瓜) 2022/10/13(木) 19:39:36


マクロの簡略化については、そのマクロ自体に質問者さんの環境に依存している部分が多々あるため
(P1セル、O1セルの役割、オートフィルターの対象列が3と5で固定されていたり、等)
その環境を知らない側からはなかなか言いづらいところがあります。
(西瓜) 2022/10/13(木) 19:50:11

回答ありがとうございます。
やまりバグ的な感じなんですね…
検索マクロももっと単純にできればな〜って思ったので(-_-;)
(検索ボタン) 2022/10/17(月) 17:53:43

コードを拝見しましたが、SendKeysはInputBox起動時にIMEをオンにしておくための補助的機能として使われているので
必ずしもマクロ実行に必要なものではありません。
もし強制NumLock解除が煩わしい方が優先ならばそのコードを削除しても構わないのではないかと思います。
(下手の横好き) 2022/10/17(月) 18:00:59

IMEをオンにしたいということなら、下記が参考になるかと。

Office TANAKA - Excel VBA Tips[InputBoxでIMEをオンにする] http://officetanaka.net/excel/vba/tips/tips16.htm
(hatena) 2022/10/17(月) 19:45:00


下手の横好きさん
hatenaさん
ありがとうございます。
ちょっと試してみます!

(検索ボタン) 2022/10/18(火) 14:33:42


Public Declare Function ImmGetContext Lib "imm32.dll" (ByVal hwnd As Long) As Long
Public Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal hwnd As Long, _
                                                       ByVal himc As Long) As Long 
Public Declare Function ImmSetOpenStatus Lib "imm32.dll" (ByVal himc As Long, _
                                                          ByVal b As Long) As Long 

これって、どういう使い方するんですかね?
(検索ボタン) 2022/10/18(火) 14:37:01


ご参考まで
http://www.alato.ne.jp/kazu-/vb/tip09.htm
(通りすがり助六) 2022/10/18(火) 15:05:57

[[20221011192444]]のほうでも軽く触れてますが、まず元のコードが何をしているか【ステップ実行】するなりしてよく研究されたほうがいいんじゃないでしょうか。

そのうえで、処理内容からすればInputBoxにこだわる必要性もないと思いますから、例えばActiveXコントロールのTextBoxを使うとか発想を切り替えてみてはどうでしょうか?
「IMEModeプロパティ」を使えば近しいことが実現できそうな気がします
(試してないので断言はしませんが)

 【参考】
https://www.officepro.jp/excelvba/form/index7.html

(もこな2) 2022/10/19(水) 00:02:45


通りすがり助六様
アドバイスありがとうございます。

もこな2様回答ありがとうございます。
ActiveXコントロールのTextBoxについては、昔考えましたが
VBAすら理解できてないので新しい方法に挑むのはためらい辞めました。
しかし、まったく勉強しないで諦めるのは良くないので
少し勉強してみます。新しい発想が生まれるかもしれないので

皆様ありがとうございました。

(マクロって楽しいな〜) 2022/10/19(水) 14:29:51


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.