ホーム > ライブラリ > Year 2021

ライブラリ

Year 2021

数式の参照マトリクス

'#VBA100本ノック 87本目
'「相関表」に数式の依存関係を作成してください。
'B列のシートの数式が2行目のシートを参照している場合に
'交点に"○"を入れてください。

'※画像参照
'セルの数式のみ対象です。
'以下は考慮しない。
'・INDIRECT関数、串刺し計算、名前定義、条件付き書式、入力規則、文字定数
 

●アプローチ
エクセルの数式タブにある「参照元のトレース」を応用し、
ShowPrecedents と NavigateArrow を利用して
数式の参照元を追ってみました~

クセが強いので、
大量に数式がある場合は
もう少し調整が必要かもですが
こういう方法もあるよってことで~ノ゚∀゚)ノヤットサー!

2,3年前に構想するも作れてなかったので いい機会になりました!!
ありがとうございます(^人^)

100本ノック   2021/02/14   shono

Dictionaryクラス

Dictionary は使い勝手がよくて好きなんですが、
直してもらいたいことも...

①Itemsがローカルウィンドウで見れない(^_^;)

②Keysがローカルウィンドウで256までしか見れない(・・;)

③[変数]  = Dic.Item([Key]) の時に
  Dicに無いKeyだったら自動的にDicに追加され
  [変数]に自動的にEmptyが入る(T_T).。◯(無いって言ってよー)

そこで、Dictionary をとっつきやすくするクラスを大公開~!!!ノ゚∀゚)ノヤットサー!

*******************************************************************************************************************
使用例①・・・Dicの代わりとして

 Dim C_Dic As [Dicクラス]
 Set C_Dic = New [Dicクラス]
    ・・・後は通常のDicと同様に使用
*******************************************************************************************************************

*******************************************************************************************************************
使用例②・・・Dicのデバッグ
 Dim Dic As Scripting.Dictionary
 Dic.Add() などなど

 Dim C_Dic As [Dicクラス]
 Set C_Dic = New [Dicクラス]
    Set C_Dic.Dic = Dic '★Dictionaryをクラスに格納して、Keys,Items等を確認★
*******************************************************************************************************************

もしクラス使うのも面倒だ!! って人は、
ウォッチウィンドウに Dic.Keys や Dic.Items を入れると、
①,②が見れるようになりますよ~^^
※詳細はここでは割愛...

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

Dictionary   2021/02/10   shono

fIE_Quit (IEを確実に殺す方法)

IEのゴースト現象について、
自分の経験を基に不明なデバッグを減らすIEの閉じ方を
需要ありそうなので記載しておきます。

IE起動→スクレイピング→IE閉じる
の繰返しでたまにIE起動時でNGになることがあります。
原因は
閉じた後も裏でIEのプロセスが暫く残る事がある
ということが判明(・・;)
※他の何かが原因のケースがあるかもですが、自分の経験として。

そして対応方法として
IE.Quitの前にプロセスIDを取得しておき、
Quit後にプロセスを直に殺して対応しました。

WinAPIが多くなるのが難点です(^_^;)



使う【WinAPI】はこんな感じです~

GetWindowThreadProcessId
ウィンドウハンドル(IE.hWnd)からプロセスIDを取得

IsWindow
ウィンドウが生きてるか判定 ※IEが閉じるまで念の為に待つ用

OpenProcess
プロセスIDからプロセスのハンドルを取得

TerminateProcess
プロセスを殺す

※他にもっと簡単に解決できる方法があるかもなので、あくまで1つのケースとして
-------------------<以下、VBAソース>----------------------------------------------------------

IE   2021/01/17   shono

ノック66本目

#VBA100本ノック 66本目
ブック自身のあるフォルダ以下の全サブフォルダを検索し、
自身と同一名称(拡張子含めて)のファイルを探してください。
同一名称のファイルが見つかったら、シートに出力してください。
・A列:フルパス
・B列:更新日時
・C列:ファイルサイズ
※シートは任意

100本ノック   2021/01/14   shono