ホーム > 踊るVBE > バグ修正&参照設定

踊るVBE

バグ修正&参照設定

リリースに必死で、細かいバグが(汗)
ご迷惑おかけしてたらごめんなさい...

直すついでに、
Dictionary使いとして、
参照設定ボタンを踊る検索フォームにこっそり追加したり、
ボタン押下で使用例を表示したりしてみました~ノ゚∀゚)ノ




 

先に修正したバグ内容を...

・VBE起動時に、カーソル点滅が見えなくなる(マウスでクリックとか他の操作すると元通り)
 → カーソルが消えないよう調整(しかし、VBE.Windowsにアクセスすると消えるってどういうことだよ...)

・検索で、コードの後ろにコメントがある場合に正しく検索できない不具合を解消
 通常の検索では、コメントを除去して検索してます。
 下記のように、後ろにコメントがある場合に正しく処理できず、コードが欠損してました...
 例:Dim i As Long  '行番号

・検索で、単語区別オプションにチェック入れて検索すると、Excelが落ちる...
 VBEアドインの難しさを目の当たりにしました...まさか落ちるなんて(大汗)
 全体的に、エラー回避の処理を追加し、クラッシュ対策を施したので、
 何かのバグで落ちることが回避できるようになったと思います...
 (予期せぬエラー・・・というメッセージが出たらご連絡頂けると助かりますm(_ _)m)

バグ修正、以上。




さて、今回は改良に時間があまりとれなかったので少しだけ~ノ゚∀゚)ノヤットサー!


<1>検索方法にツールチップを追加

ひょっとしたらもう気付いている人もいるかもですが、
踊る検索では、検索で Like や RegExe(正規表現) が使用できるんです~

ココ、ココ!!
FindCase.png

検索ボタンの下にあるコレを、「Like」や、「RegExe」にすることで、
単なる部分一致から、より自由に検索できるように!!

ただ、Likeってどんなだっけ?? とか、
正規表現って何があったっけ??   とか、
すぐに思い出せないこともあると思います(自分はしょっちゅう(汗)) ​

そこで、上記ラベルにツールチップ(ヒント)を表示するようにしました~!!!!
これがやってみると、意外と難易度高くてツラかった(笑)

こんな感じで表示されるので、
ちょっと思い出したい時にいいかも~♪
(かるーく他HPからコピペしたものなので、誤字脱字あればご連絡頂けると幸いです)
FindCase_Normal.png

FindCase_Like.png

FindCase_RegExe.png

 



 

<2>Scriptingの参照設定をボタン1つで

自分はFSOやDictionaryをよく使いますが、
参照設定が面倒だから敬遠してしまってる人もいるんじゃないでしょうか~?!?!
いや、実際面倒だし・・・

けど、上記2つを使わないのはめちゃくちゃ損してると思いますよ~

確かにわかります!!
なんで参照設定があんなに遠いのか!! と...

Microsoft Scripting Runtime の前後に、
Microsoft Script Control だの、
Microsoft Scriptlet Library だの、
まぎらわしいねん~!! と...
Dic_Ref_Befor.png


そこで!!

そんなあなたの為に!!

参照設定のボタンをこっそり付けてみました~!!!
Dic_Ref_After.png




本来、検索画面には不要なのですが、
参照設定用の画面作るのも大変なので
ひとまずここに置いてみました(笑)
※いつかは、楽々参照設定の画面も作って移したい...



これを押すと....
こんなメッセージが出て、
参照設定が一瞬でできちゃいます!!!

Dic_Msg1.png



FSOの定義の仕方や、
Dictionaryの使い方まで押し売りしてます(笑)





もしメッセージ内容をもう一度見たい時は、
ボタンをもう一度押すと...
同じ雰囲気で出ます~ノ゚∀゚)ノ
Dic_Msg2.png


Dictionaryは本当に使い勝手がいいので、
これに慣れてしまうと元に戻れなくなります(笑)

SUMIF、COUNTIF的な使い方や、
存在チェック、重複チェックなんかは割愛して、
僕が発明した(いや他にも誰かやってるだろ....)
動的配列と、差分検出について補足しておこうかと~






<動的配列>

配列を動的に大きくするのって、普通は Redim Preserve を使うって教わるんですよね。
けど、Preserve って書くの面倒だし、
処理はどんどん遅くなるし、
変数名を変えた時にコンパイルで検出できずに通ってしまってバグるし、
デメリットが多数(T_T)

そこでDictionaryの出番です!!

例えばデータ最終行までのデータを配列で取得したい時
*********************************************************
Dim Dic As New Scripting.Dictionary
For i = 1 to 1000
    if Cells(i,1) = "" Then Exit for
   Dic.Item(Dic.Count) = Cells(i,1).Value
Net
Dim Data As Variant
if Dic.Count > 0 then '【重要】
    Data = Dic.Items
End If
*********************************************************
こんな感じでできちゃいます。

CountせずにItems入れちゃうと、
長さ0の空配列になっちゃうので、
個人的には0かどうか必ず判定してます。

というか、簡単にCountできるのも魅力の1つです。


CSVの読み取りなんかも使えて、
Dic.Item(Dic.Count) = Split([Line],",")
と、辞書に1次元配列を溜めておいて、
最後に2次元配列にしちゃいます~♪
※1x1次元配列を2次元配列に変換する関数はこちら
 

 

<差分検出>

いわゆるDIFFってやつですね~ノ゚∀゚)ノ

Dictionaryは、AddやItem、Existsなんかはよく使いますが、
Remove を使うことってなかなか無いですよね!?

けど実は重要な使い方ができるんです!! 
そう! DIFF!!

言葉より、こちらのコードを動かすと分かりやすいかと~
******************************************************************************************************************
Private Function prDiffSample()
    
    Dim DicA As New Scripting.Dictionary
    Dim DicB As New Scripting.Dictionary
    Dim DicC As New Scripting.Dictionary
    DicA.Item("A") = 1
    DicA.Item("C") = 2
    DicB.Item("B") = 3
    DicB.Item("C") = 4
    
    Dim Key As Variant
    For Each Key In DicA.Keys
        If DicB.Exists(Key) = True Then
            DicC.Item(Key) = DicA.Item(Key) + DicB.Item(Key)
            Call DicA.Remove(Key)
            Call DicB.Remove(Key)
        End If
    Next
    
End Function
​******************************************************************************************************************
この結果、
DicAにはDicBに無いもの
DicBにはDicAに無いもの
DicCには共通のもの
が格納されるので、
後はお好きなように~♪




Downloadはこちら ノ゚∀゚)ノヤットサー!

  2020/10/11   shono

この記事へのコメント

コメントを送る

 
※ メールは公開されません
Loading...
 画像の文字を入力してください
≪ WinAPI  |