2025-08-01から1ヶ月間の記事一覧
配列が空であるかを判定する方法を解説します。空の配列には「要素代入前」「変数代入前」「動的配列ReDim前」「Split("")やArray()」「ParamArray省略時」の5パターンがあるため、それぞれ適した判定を用いてください。
動的配列が初期化されているか判定する方法を解説します。Uboundがエラーになる仕様を利用してOn Error Resume Nextを用いる方法と、ビット演算を用いた(Not Not 配列)を判定する方法の2つがあります。
Array()やParamArrayの省略時に「空の配列」が生成されます。この空の配列は要素数が0でFor/ForEachをノーエラースキップできるため、配列を受け取る関数と相性がよく、汎用関数の返り値に活用することができます。
第5回 和風スパゲティ勉強会「Collection&Dictionary」の配布資料と配信アーカイブを共有します。前回の配列(Array)に続いてExcelVBA配列トリオを一挙に解説しました。復習にお役立てください。
引数の数を任意にできるParamArrayキーワードを使用した際、その配列が空=引数自体が省略されたかを判定するにはIsMissing関数を使用します。また空の配列はUboundが-1なので、こちらで判定も可能です。
行・列の表示/非表示を切り替えるにはHiddenプロパティを使用します。Trueが非表示、Falseが再表示です。行/列全体に実行する必要があるため、Rows/Columns、EntireRow/Columnから実行してください。
第4回 和風スパゲティ勉強会「配列(Array)入門」の配布資料と配信アーカイブを共有します。配列をまだ使ったことがない方向けに配列の使いどころから基本コードまでを解説しました。復習にお役立てください。
複数のOR条件分岐を簡潔に書く方法を解説します。IF/ORステートメント、Select Case ステートメント、Functionプロシージャ、カンマ区切りテキスト&Instr関数、Dictionary(連想配列)を紹介しますのでお好みで使い分けて下さい。
複数のセル範囲をひとつのRangeに統合するにはUnionメソッドを使用します。Ctrlキーを使ったセルの複数選択に似ていますが、ちょうど矩形になる場合はセル範囲も1つにまとめてくれる便利な特長があります。
NumberFormatLocalとNumberFormatの違いを解説します。両者とも「セルの表示形式」を設定するプロパティですが、G/標準、\、[赤]など日本語で表された表示形式を設定可能な点が違います。
桁区切りカンマの「#,##0」などセルの表示形式を設定するにはRangeオブジェクトのNumberFormatLocalプロパティを使用します。セル.NumberFormatLocal=セル.NumberFormatLocalでコピーも可能です。
テーブル形式の表データに縞模様を付けるコードを紹介します。表の範囲を取得できる場合は表エリア.Rows、列のエリアを指定する場合はIntersectを利用して行ごとにRangeを取得し、偶数/奇数で判定して着色します。
結合セルの値を取得する方法を解説します。結合エリアから先頭セルの値を取得したい場合はCells(1).Valueを、結合内部セルから結合セルの値を取得したい場合はMergeArea.Cells(1).Valueをそれぞれ使用します。
表示されているシートだけをループするにはForEach文で取得したWorksheetのVisibleプロパティを調べてTrueにシートだけに処理を実行します。他の条件も判定する場合はIf文を重ねるかAnd演算子を使用します。
フローチャートなどに折れ線矢印コネクタをよく使いますが、なぜかこの矢印は2回曲がるものしかありません。これに対応するため、ガイド図形を始点と終点に配置した矢印コネクタを挿入するマクロを紹介します。
シートの表示状態を切り替えるにはWorksheetオブジェクトのVisibleプロパティを使用します。表示Ture/非表示FalseのほかにVeryHiddenという設定があり、ユーザーがExcel上で再表示できない設定にもできます。
セルが結合されているか調べるにはMergeCellsプロパティで判定します。しかしMergeCellsは結合セルならどこでもTrueになってしまうため、結合の先頭セルや結合セル全体化を判定するにはMergeAreaを組み合わせます。
セルを結合・解除するには、RangeオブジェクトのMerge/UnMergeメソッドを使用します。その他、結合セルかの判定にはMergeCells、結合セル範囲の取得にはMergeAreaをそれぞれ使用します。
UnionメソッドはNothingを受け取らないため、If rng Is Nothing Thenの分岐を書かないと初回実行時に必ずエラーになります。これをいちいち書かなくて済むよう、Nothingを受け取るUnionメソッドを作りましょう。
特定の条件を満たす行(データ)を削除する方法を解説します。For文でStep-1を利用して最終行から1行ずつ削除していく方法と、Unionメソッドで一つのRangeオブジェクトにしてから一括で削除する方法があります。
Excel-Fun.xls*参加者1,000名突破記念イベントを先日開催し、Excelを使ったルーレットでプレゼント企画を実施しました!そのルーレットのファイルとソースコードを共有いたしますのでよろしければご参考ください。
Unionの速度向上効果を検証します。Union自体が割と遅いため、Unionより速い書式設定には逆効果で、Unionより遅い列の削除には効果があります。Unionはセルの統合より行の統合が得意と威勢質もあります。
ワークシートをスクロールする方法を解説します。行列番号指定でスクロールしたい場合はScrollRow/Columnプロパティ、現在位置を基準にスクロールしたい場合は、Large/SmallScrollメソッドを使用します。
Rowsプロパティで複数行を指定する方法を解説します。Rows("2:10")の形で指定が可能ですが、文字列ではなく数値で指定する場合はRange、Resize、EntireRow、Unionなどのプロパティを利用します。
複数のセル領域を格納したRangeオブジェクトの各プロパティがどんな挙動かを検証します。Valueのように第2エリア以降を無視して第1エリアだけを見るプロパティと、全エリアを見るプロパティの2種類があります。
「A1,B2:C2,D4:E6」のような複数領域をもつRangeオブジェクトを各セル範囲ごとに取得するにはAreasプロパティを使用します。For Each 各セル範囲 In 親Range.Areasというコードでエリアごとに個々に取得できます。
選択セル(Selection)が複数のセル範囲を含むか判定するには、RangeオブジェクトのAreasプロパティを使用し、Countが1であるかどうかで判定します。Areas(1)とすれば、第1セル範囲だけを取得できます。
Excel(Application)のSendKeysメソッドにはバグらしき挙動があり、実行時にNumLockキーに干渉することがあります。この問題に対応する場合はWScript.ShellオブジェクトのSendKeysメソッドを使用して下さい。
キーボードから入力したかのようにキー操作を送信するSendKeysステートメントを解説します。Application.SendKeys "^s"のような記述でCtrl+Sを送信することができ、他アプリを操作するなどが可能です。
2024/12/10にオープンしたExcel&VBA総合コミュニティ「Excel-Fun.xls*」が、おかげさまで 参加者 1,000人 を突破しました!いつもご参加いただいている皆様本当にありがとうございます。