ライブラリ

shono

Officeのバージョン(エディション)詳細版

前回、ファイル→アカウントの画面から製品情報のバージョン(製品エディション)を取得する方法を紹介しましたが、それだけでは正確なバージョンが不明なケースがある(Office Premium)ようなので、更に「バージョン情報」ボタンを押して表示されるダイアログからバージョンを取得する方法も紹介します。

UIAutomation   2024/09/02   shono

Officeのバージョン(エディション)取得

Office2016以降、VBAでバージョンを取得するのが難しく、
そんな中、UIAutomationを使って取得する方法を模索してみました!!
(当初はレジストリを探索するも、PC環境によってバラバラだったりで挫折し...

UIAutomation   2024/08/28   shono

fString_Trim_NonBreakSpace

Webとかからコピペした時に、
変なスペースが混じってる事ないですか??

『Non Break Space』と呼ばれるものらしく、
Webページ上で、スペースを空けたい時に使われてる
制御文字らしいです。

これがTRIMでは除去できないので、
この関数で半角スペースに変換しちゃいましょう~♪
*****************************************************************************************

String   2021/04/20   shono

数式の参照マトリクス

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

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

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

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

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

100本ノック   2021/02/14   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

VBA100本ノック 魔球編2(決定版)

アルゴリズムを、再帰的に見直しました。

四方の端から攻めて、入り口が見つかれば、そこから再帰的に進んでいきます^^

いやー! 楽しかった!!
神髄先生、ありがとうございます!!

100本ノック   2020/12/19   shono

VBA100本ノック 魔球編2

https://excel-ubara.com/vba100/ ★回答がアップされたらURLを更新するよてー

島問題? と呼ばれてるもの?

所要時間は、コード3時間 & パックマン化2時間 だったか

'#VBA100本ノック 魔球編2
'シート内のセルが四辺の罫線(線種は問わず)で完全に塞がれている閉じた範囲内にある場合、
'罫線で閉じられたセル範囲を黄色(好きな色)で塗りつぶしてください。
'シートの端も罫線があるか無いかで判定してください。
'※閉じられた範囲とは画像の黄色部分になります。

100本ノック   2020/12/18   shono

VBA100本ノック 42本目

'#VBA100本ノック 42本目
'画像1のように「階層」シートに階層を表したデータがあります。
'これを画像2のように「階層DB」シートにデータベース形式に変換して出力してください。

https://excel-ubara.com/vba100/VBA100_042.html

100本ノック   2020/12/11   shono

オートインデント

VBAのコード(プログラム)のインデントを、
自動的に揃えるプログラム
(一部の処理は省略して、メインのみ)

  2020/12/07   shono

IEShot

緑里庵さんのIEShotという
IEのスクロールキャプチャを実現するコードを
丸々コピペさせていただきました。

というのも、いつの間にか緑里庵さんのページが表示されない状態に...

この場を借りて御礼申し上げますm(_ _)m
緑里庵さん、めちゃくちゃ助かりました!!
ありがとうございました!!!!!

IEShot   2020/11/03   shono

fArray_Dim1x1_to_Dim2

1次元x1次元配列を2次元配列に変換します。

Dictionaryに1次元配列を溜めておいて、
最後に2次元配列に変換する時に使用することが多いです。
いやむしろ、その為だけの関数かも...

例:DataArray = fArray_Dim1x1_to_Dim2(Dic.Items)

Array   2020/10/11   shono

ハイパーリンクで別ブックのセルを参照

ハイパーリンク関数で、同じブックのセルを参照することは当たり前ですが、
実は別ブックのセルを参照することが出来ます。
※あまり情報が出回ってないので、出来ないと思ってる人も多いハズ。

これをうまく使うと、
ブック、シート、セルのアドレス、の一覧に対して、
数式で動的なハイパーリンクを​​生成することができます!!!!


セルに直接ハイパーリンクを追加(右クリック→ハイパーリンク)せず、
あえて数式の HYPERLINK を使うメリットを挙げておきます。

・リンク先が一目で分かる
・リンク先を動的に変える事ができる(数式でセルの参照先を変える等)
・ブックを​開いた時に、リンク更新ダイアログが表示されない
・万が一にもリンクが消えない
  ※非常に稀ですが、右クリックで追加したハイパーリンクが消えて無くなる事があったので...

大量のブック・シート・セルに対して、
エラーチェック&確認 をしたい時に、
確認効率が非常に良くなるのでお試しあれ~

ハイパーリンク   2020/05/28   shono

削除できないスタイル

スタイル、便利な時もあるんですが、
他のブックからデータをコピペ、シートをコピーした時に、
いつの間にかスタイルも入ってきてしまい、
増殖に増殖を重ね、
セルの書式が設定できなくなる、
というウイルスのような側面もある。。。

しかも、スタイル名がおかしいのか、
削除ができなくなっているものもある。。。

どうしても不要なスタイルが削除したくて、
見つけた削除手順に少し不備があったので、
自分で発見した対応方法を公開してみます。

Bug   2019/04/05   shono

シートコピー時の既存バグ対応

Aブックから、Bブックにシートをコピー・移動し、Bブックを保存しようとすると、
「[ファイルパス]の保存中にエラーが検出されました。いくつかの機能を・・・」
とアラートが出て、保存できないケースの対応方法を記載。

Bug   2019/01/11   shono

fRange_Border_Is田

***************************************************************
指定Rangeに指定罫線が格子状に引かれているか判定

【引数】Range :対象のRange
【引数】Style   :罫線のスタイル
【引数】Color   :罫線の色
【引数】Weight :罫線の太さ
***************************************************************

Border   2018/09/18   shono

fRange_EndRow

***************************************************************
指定Rangeのデータ最終行を取得

【引数】Range :レンジ
              Hidden : 非表示行に対応するオプション
              MergeCell: 結合セルに対応するオプション
***************************************************************

Range   2018/06/30   shono

fRange_EndCol

***************************************************************
指定Rangeのデータ最終列を取得

【引数】Range :対象のRange
              Hidden :非表示列に対応するオプション 
              MergeCell: 結合セルに対応するオプション
***************************************************************

Range   2018/06/30   shono

fRange_LastCol

***************************************************************
指定Rangeの最終列を取得

【引数】Range :対象のRange
***************************************************************

Range   2018/06/30   shono

fRange_LastRow

***************************************************************
指定Rangeの最終行を取得

【引数】Range :対象のRange
***************************************************************

Range   2018/06/30   shono

fString_RightB

***************************************************************
固定長処理用。
文字列の右端から指定バイト数を切り出す
※VBAのRightBが正しい値を返さない為

【引数】Value :対象の文字列
              Length :バイト数
***************************************************************

String   2018/06/30   shono

fString_LeftB

***************************************************************
固定長処理用。
文字列の左端から指定バイト数を切り出す
※VBAのLeftBが正しい値を返さない為

【引数】Value :対象の文字列
              Length :バイト数
***************************************************************

String   2018/06/30   shono

fString_FixLength

***************************************************************
固定長処理用。
文字列を指定バイト数に調整する
2バイト文字に対応

【引数】Value :対象の文字列
              Length :バイト数
***************************************************************

String   2017/11/21   shono

fString_LenB

***************************************************************
文字列のバイト数を取得
※VBAのLenBが正しくバイト数を返せない為

【引数】Value :対象の文字列
***************************************************************

String   2017/11/21   shono

fString_Visualize

***************************************************************
デバッグ用。
[?]や[・]等と表示されたり, 表示されない制御文字を
見えるようあぶり出す。
例:タブを『[Tab]』と表示

【引数】Value :対象の文字列
***************************************************************

String   2017/11/21   shono

fString_Right_Count

***************************************************************
文字列の右端で指定値をカウント

【引数】Value :対象の文字列
              Find :検索値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fString_Right_Chop

***************************************************************
文字列の右端を1文字削除(値指定の場合、指定値の場合のみ除去)

【引数】Value :対象の文字列
              Chop :除去したい値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fString_Right_Fix

***************************************************************
文字列の右端が指定値でない場合に補完

【引数】Value :対象の文字列
              FixVal :補完したい値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fString_Right_With

***************************************************************
文字列の右端が指定値か判定

【引数】Value :対象の文字列
              Find :検索値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fString_Left_Count

***************************************************************
文字列の左端で指定値をカウント

【引数】Value :検索対象の文字列
              Find :検索値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fString_Left_Chop

***************************************************************
文字列の左端を1文字削除(値指定の場合、指定値の場合のみ除去)

【引数】Value :対象の文字列
              Chop :除去したい値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fString_Left_Fix

***************************************************************
文字列の左端が指定値でない場合に補完

【引数】Value :対象の文字列
              FixVal :補完したい値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fString_Left_With

***************************************************************
文字列の左端が指定値か判定

【引数】Value :対象の文字列
              Find :検索値
              Compare :文字列判定方法(VbCompareMethodに準拠)
【戻値】
***************************************************************

String   2017/11/21   shono

fString_Count

***************************************************************
文字列をカウント
※様々な方法から、最速の方法でカウント

【引数】Value :検索対象の文字列
              Find :検索値
              Compare :文字列判定方法(VbCompareMethodに準拠)
***************************************************************

String   2017/11/21   shono

fRange_Selection

***************************************************************
選択されているセルを取得する
※指定条件に合致していない場合はエラーを表示させ, Nothingになる
※用途:ユーザが選択しているデータに対して処理する場合に
              取得対象に範囲やエリア数,セル数等の制限をチェックして取得

【引数】UserSel :主にSelectionを指定する
              Row_Min :取得したい範囲の開始行
              Row_Max :取得したい範囲の終了行
              Col_Min :取得したい範囲の開始列
              Col_Max :取得したい範囲の終了列
              Area_Max :取得したいエリア数
              Cell_Max :取得したいセル数
              Alert :アラートを出すオプション
              AlertHead :アラートメッセージの頭出し
***************************************************************

Range   2017/11/21   shono

fRange_Select

***************************************************************
セルを選択する

【引数】Range :選択したいセル
              ScrollRow :スクロール行(0=スクロールしない)
              ScrollCol :スクロール列(0=スクロールしない)
【戻値】
***************************************************************

Range   2017/11/21   shono

fRange_Union

***************************************************************
Rangeを結合させる
※Union関数がNothingに対応していないので対応

【引数】Range1 :レンジ
              Range2 :レンジ
***************************************************************

Range   2017/11/21   shono

fArray_Merge

***************************************************************
2つの配列を結合する(配列の次元数が同じであること)

【引数】Array1 :データ配列(1次元or2次元)
              Array2 :データ配列(1次元or2次元)
              Direction :結合する方向(xlRows=行方向に結合)
***************************************************************

Array   2017/11/21   shono

fArray_DimDown

***************************************************************
配列の次元数を下げる(2次元配列を1次元配列にする)

【引数】DataAry :データ配列
              Direction :1次元に結合する時の方向(xlRows=1行毎に結合する)
***************************************************************

Array   2017/11/21   shono

fArray_Slice, fArray_Range

***************************************************************
配列を切り取る
【注意】切り取った配列の要素は, 切り取る場所に合わせている
              例えば{1 to 3}という配列に対して要素2-3(Start=2, End_=3)を切り取った場合、
              戻値の要素は{2 to 3}となる(2次元配列も同様)

【引数】DataAry :データ配列
              Start :切り取る開始位置
              End_:切り取る終了位置(省略時は指定方向のMAX)
              Direction :切り取る方向(xlRows=横方向(1次元), xlColmuns=縦方向(2次元))
【戻値】切り取った配列
***************************************************************

Array   2017/11/21   shono

fArray_to_Dictionary2

***************************************************************
2つの配列をDictionary(辞書)に変換する

【引数】KeyAry :1次元配列(Key用)
              ItemAry :1次元配列(Item用)
***************************************************************

Array   2017/11/21   shono

fArray_to_Dictionary

***************************************************************
配列をDictionary(辞書)に変換する
1次元配列の場合、配列中の値をKeyとした辞書を作成
2次元配列の場合、1列目をKey、2列めをItemとした辞書を作成

【引数】DataAry :データ配列(1次元or2次元)
              IgnoreNullStrKey:Keyに空文字があった場合に除去するオプション
***************************************************************

Array   2017/11/21   shono

fArray_Length

***************************************************************
配列の長さを取得する

【引数】DataAry :データ配列
              Dimension :1次元or2次元の指定(1次元=xlRows, 2次元=xlColmuns)
***************************************************************

Array   2017/11/21   shono

fArray_BaseN

***************************************************************
配列の基底を調整する

【引数】DataAry :データ配列
              Base_Row :1次元の配列のBase
              Base_Col :2次元の配列のBase
***************************************************************

Array   2017/11/21   shono

fArray_Trans

***************************************************************
配列の縦と横を逆転させる
※1次配列(横)の場合は、2次配列(縦)にする

【引数】DataAry:1次元or2次元配列
            Trans:貼付け時、配列の行・列を入れ替えるオプション
                       ※1次元配列の場合、2次元配列に変換し、縦方向に張り付ける
***************************************************************

Array   2017/11/21   shono

fArray_Paste

***************************************************************
指定セルにデータ配列(主にfRange_Valueで取得した配列)を貼り付ける関数

【注意】非表示行があると正しくデータを貼り付けれない(Excelの既存バグ)

【引数】Cell:貼付けセル(1セルで十分。範囲の場合は最初のセルが起点となる)
            DataAry:貼付けるデータ配列
            Trans:貼付け時、配列の行・列を入れ替えるオプション
                       ※1次元配列の場合、2次元配列に変換し、縦方向に張り付ける
            PasteFormula:数式として貼り付けるオプション

【戻値】配列を張付けた範囲のRange
***************************************************************

Array   2017/11/21   shono

fArray_Lbound_Ubound

***************************************************************
配列の要素の下限・上限を、ByRef で返す関数。
主には配列系の関数用に使用。
***************************************************************

Array   2017/11/21   shono

fArray_DimCount

***************************************************************
配列の次元数を返す
***************************************************************

Array   2017/11/21   shono

fArray_IsArray

***************************************************************
既存の IsArray の弱点(型配列で生成されていない場合に判定できない)を克服した関数
***************************************************************

Array   2017/11/21   shono

ナビゲーションウィンドウ

Wordの起動時や検索時に表示される「ナビゲーションウィンドウ」の表示/非表示用

※VBA・マクロで閉じる方法が見つからず、自己解決したので掲載

Word   2017/08/31   shono

fVBE_IsProtected

VBProjectにパスワードの保護がかかっているか判定

VBE   2017/07/11   shono

Msg_Show

******************************************************************************************************************************
メッセージボックスのラッパー

【重要】既存のMsgBoxは引数を[+]して指定するが、
            この関数ではコーディングしやすいよう、
            引数を分類分けしている。
            ※1モジュール(例:M_MsgBox)に下記のコードのみを記述する事を推奨
            ※既存の列挙体(VbMsgBoxStyle等)を、自作列挙体(E_MsgBox_Button)に
               同名のメンバーを作って値をそのままあてることで、
               既存のMsgBoxに影響を与えることなく、違和感が少なく使えるようにしている。

【引数】Message:メッセージ本文
            Icon:vbCritical等のアイコンを指定
            Button:vbOKOnly等を指定
            Default:デフォルトでアクティブになっているボタンを指定
            Title:メッセージのタイトルを指定(ConstのMsg_Titleでデフォルトを調整)

【戻値】vbOK等(必要に応じてEnum の E_MsgBox_Result メンバーを調整)
******************************************************************************************************************************
2021/10/22 改行コードの調整処理を追加

MsgBox   2017/07/11   shono

fVBE_IsSecurity

オプション設定[VBAへのアクセスを信頼する]の設定値を取得
※VBAでモジュール等を処理する際に必須の判定

VBE   2017/07/11   shono