こちらで紹介した EXCELブック正規表現検索外部結果一覧作成機能 に見切れセル抽出とリンク設定セル抽出機能を追加したぞ。
見切れセルに関しては簡易判断している。厳密に判断できない理由はこちらで書いた理由以外に、セルが持つセル幅(文字数、ピクセル数)とWin32APIが返すテキストのピクセル数が食い違っていることも原因となっている。
多分、Excelではテキストの描画にWin32APIではなくDirectDraw系のAPIを使ってるんだろな。
こちらで紹介したコードとは異なり、チェック対象セルをはみ出していても、チェック対象セルから右側50カラム以内にある(文字があるor罫線がある)セルまでかぶらないものは見切れなしの判断をしている。方眼紙的な書きぶりでも見切れチェックができるというわけだ。
リンク抽出は直接リンクを追加しているセルとHYPERLINK関数が書かれたセルが対象となる。
追加後のコードは元記事に貼っている。
※20250317
・セルが持つセル幅のピクセル値と文字列が持つ幅のピクセル値がどうしても合わないぞ。
フォント指定時にWin32APIのSetTextCharacterExtraを使ってみたがそれでも合わない。
特にプロポーショナルフォント使用時や全半角混在文字の時の乖離は顕著だ。
しょうがないので実測結果に基づいて係数をかけて求めているが、フォントの種類、表示する文字によって、すべての場合に正確な見切れを判断できてはいない。
一応、縦書きフォント1行、セル結合、自動で折り畳み等対応しているが、見切れの目安程度に考えろし。
見切れ判断の調整は、コード中GetTextExtentPoint32Width関数内の係数0.72(半角用)、 0.91(全角用)の増減で可能だ。調整してくれ。
・結果ファイルのファイル名はEXCEL同時オープンを考慮しフォルダ単位に簡易ハッシュをプレフィクスに付けている。16進4桁のハッシュなので衝突したら簡便な。
・HDCやRegExpオブジェクト等リソースを都度生成/破棄してるとVBAが暴走するぞ。
VBAのガベージコレクションがショボいせいだと思うが、生成したリソースは解放せず可能な限り使いまわすのがよい。
・ここで超重要な情報だ。VBAのIF文等に使用される条件式のAND、ORは短絡判断を間違う。
IF A AND B THEN・・・の判断でAが偽であってもBの評価を実行してしまう場合がある。
条件Bが自作関数の場合など暴走の危険もある。安全のため、AND/OR 結合式を使わず多段IF文を使えし。