和風スパゲティのレシピ

日本語でコーディングするExcelVBA

2020-01-01から1年間の記事一覧

ユーザー辞書(IME単語登録)にコードを登録する

日本語変数・関数にとって、最大の敵は「入力のめんどくささ」です。この対策として、ふぁん⇒Functionのように変換を登録し、それでコードを入力していく方法があります。逆にコーディングが簡単で速くなるポテンシャルがあるので、是非使っていきましょう。

WorksheetFunctionの呼び出しを短縮する方法

WorksheetFunctionはとても便利ですが、コードが長いという弱点があります。そこで、WorksheetFunctionオブジェクトをそのまま返すだけの関数をWfやFxなど短い関数名で作っておけば、その関数名だけでWorksheetFunctionを呼び出せます。

よく書くコードは汎用関数に - 作り方と使い方

どんなマクロでも使えるような関数のことを汎用関数と呼びます。よく書く処理は汎用関数にして持っておきましょう。同じコードを何回も書かなくて良くなるだけでなく、コードが読みやすくなり、重要な処理に集中できるようになります。

日本語関数はクイックヒントの太字強調がズレる

関数を入力する際、仮引数のリストを表示する機能があり、この機能をクイックヒントと呼びます。このクイックヒントには「入力中の引数を太字で強調する」機能があるのですが、関数・引数名が日本語だとこの協調がズレるので注意しましょう。

ParamArrayを別関数のParamArrayに渡す方法

引数の数を可変にするParamArrayキーワードで受け取った引数を、別の関数のParamArrayに渡す方法を解説します。といいつつ私の調べた限り完全解答はなく、どうしても呼出元関数をいじる必要が出るようです。ひとつのヒントとなれば幸いです。

引数を好きな個数渡せる関数を作る-ParamArray

Sub、Functionなどを作成するとき、任意の数の引数を渡す方法を解説します。ParamArray 引数名() という引数を作ると、呼び出す側では複数の引数として渡すことができ、プロシージャ内で実際に使うときは、配列として扱うことができます。

Sub/Functionの引数を省略可能にする-Optional

Sub、Functionなどの引数を省略可能にするOptionalの使い方を解説します。「引数名 As データ型」という普段の宣言部分に、先頭にOptionalをつけると、その引数は省略可能になり、後ろに「= ○○」をつけると省略時の値を設定することができます

結合セル.Offset(1)は結合エリアの1つ下を指す

A1:C3の3×3正方形が結合されているとき、Range("A1").Offset(1)は、結合下端の1つ下であるA4セルを取得します。結合エリア全体Range("A1:C3")からのOffset(1)も、同じくA4になり、Offsetの特長である「元Rangeの大きさを維持」もなくなります。

掛算を置換するとワイルドカード*と認識される

あいまい検索に使用するワイルドカード「*」と、掛け算に使用する「*」は同じ文字です。よって、掛け算を置換する際に、「*」も含めた置換をすると、*の部分は任意の文字列のため、置換が暴走します。「~*」とすることで、記号をターゲットに置換できます。

Do While~Loop と Do~Loop While の違い

繰り返し処理を行うステートメントである、Do While~Loop文と、Do~Loop While文の違いを解説します。両者とも条件式によってループを続けるか判定しますが、While条件式 を書く位置が違います。ほぼ同じ動きなので、より有名な方を使いましょう。

Do While と Do Until の違い

繰り返し処理を行うためのステートメント、Do While文と、Do Until文の違いを解説します。「条件を満たす間続ける」のがDo While文「条件を満たしたら終わる」のがDo Until文です。使い分けですが、そもそもどちらも使わなくていい気がします。

Len関数は文字列長でなく変数の消費メモリを返すことがある

Len関数には、「String以外の変数を渡すと、変数のメモリ上の大きさを返す」といういらぬ仕様があります。Len関数がなぜか4を返す、文字列の切り抜きがうまくいかない、あたりにお悩みの方は、この落とし穴に落ちていないかご確認ください。

英訳してはいけない変数名第3位「専門用語」

英訳してはいけない変数第1位のワークシート、第2位の列見出し名ときて、最後は「専門用語」です。ExcelVBAを用いて業務を効率化せんとするみなさんはその道のプロです。プロ同士の繊細な意思疎通を図るためにも、専門用語はそのまま変数名にしましょう。

英訳してはいけない変数名第2位「列見出し名」

今回は日本語変数に関するお話です。第1位のワークシートに続き、列見出し名が日本語だった場合は、その変数名をわざわざ英訳してはいけません。特にEnum定数などは、入力も日本語の方が簡単なコードですので、しっかり一致させたコードを書きましょう。

列番号のEnum定数コードを自動生成するマクロ

表形式のデータを定数で定義するとき、Enum(列挙型)定数が便利ですが、毎回書くのは面倒なので、マクロをマクロに書いてもらいましょう。見出し範囲を選択して実行すると、イミディエイトウィンドウにコードを生成して出力するマクロです。

ワークシートのオブジェクト名をマクロで設定する

ワークシートのオブジェクト名をマクロで設定する方法を紹介します。シートオブジェクト名での指定は便利なのですが、設定が面倒なので、それを「アクティブシートのオブジェクト名を、シート名と同じ名前にする」マクロでやってしまおうという魂胆です。

英訳してはいけない変数名第1位「ワークシート」

今回は日本語変数に関するお話です。単刀直入に、シート名が日本語だった場合に、その変数名をわざわざ英訳してはいけません。VBAではワークシート名もソースコードの一部です。同じオブジェクトの変数名は、すべてのコードで同じ単語を当てましょう。

3キーフットスイッチに割り当てると便利なショートカットトリオ7選

ペダルそれぞれに、キーボードやマウスの入力を割り当てられる、3キータイプのフットスイッチに割り当てると便利なショートカットを考察します。右手マウスと併用したいけど、片手では押しづらいショートカットたちが有力候補になります。

RangeとCellsの違い

セルを指定するプロパティ、RangeとCellsの違いを解説します。どちらもセルを取得するために使いますが、Rangeの方ができることが多く「セル範囲や複数のエリア」を取得できます。Cellsは指定が数値なのを利用して、変数や定数を活用するために使います。

RangeオブジェクトとRangeプロパティの違い

Rangeオブジェクトと、Rangeプロパティの違いを解説します。「Rangeオブジェクトを取得する、たくさんあるプロパティの中のひとつがRangeプロパティ」です。これだけで分かるのは難しいと思いますので、より詳しく説明していきます。

帳票出力マクロを簡単に書くためのクラスを作る

完成品の全体が見たい!という方のための、マクロサンプルです。今回のテーマは「データシート⇒帳票を出力」です。利便性をテーマに作成しましたので、クラスの参考にするなり、中身を見ずにコピペして使うなり、お好きな方法でご活用ください。

コンストラクタ(Initialize)に引数を渡せない問題

クラスモジュールに関する小ネタです。VBAについての意見のなかでよく目にするのが、「コンストラクタ(Class_Initializeプロシージャ)に引数を設定できなくて困る」です。これがどういう意味なのか、どう対処すればよいかを、手短に説明していきます。

VBAにおいて「隠蔽」ってどのくらい重要?

VBAにおける隠蔽について考察します。隠蔽とは「2つのPropertyプロシージャによって変数を包み、代入と参照に何らかの制約をつけること」です。VBAにおいて隠蔽はそこまで重要でなく、むしろ隠蔽のないクラスの利便性に着目することが大事です。

Property Let と Property Set の違い

プロシージャの種類である、Property LetとProperty Setの違いを解説します。両者とも、プロパティの取得・設定を対となる2関数で行う仕組みのうちの、「値の設定」を担うプロシージャですが、対象とするプロパティがオブジェクトかどうかが異なります。

Function と Property Get の違い

プロシージャの種類である、FunctionとProperty Getの違いを解説します。どちらも、任意の数の引数を受け取り、1つの値を返します。Propertyの本来の目的である、同じ名前のProperty Let/Setプロシージャを用意できる点が、最も大きな違いです。

帳票出力マクロをクラスを使って書く

完成品の全体が見たい!という方のための、完成品マクロのサンプルコードです。今回のテーマは「データシート⇒帳票を出力」です。クラスの基本的な書き方を使って実装しておりますので、クラスを勉強し始めた方は、参考にしてみてください。

一覧表データから帳票を出力するマクロ

処理ごとの解説ではなく、完成品の全体が見たい!という方のための、完成品マクロのサンプルコードです。今回のテーマは「データシート⇒帳票を出力」です。初級者の方にも扱えるよう、この処理を動かすための最低限の書き方をしております。

帳票出力マクロをプロシージャ分割して書く

完成品の全体が見たい!という方のための、完成品マクロのサンプルコードです。今回のテーマは「データシート⇒帳票を出力」です。関数(プロシージャ)分割を使って、メンテナンス性を意識したコードにしておりますので、参考にしてみてください。

人に何か伝えるなら母国語で

このブログの記事が50に到達しました。令和元年12月1日にスタートしたブログですので、およそ8ヶ月半での到達です。やっと書き慣れてきましたので、ペースを上げていきたいですね。いつもご愛読いただいている皆様には、この場を借りてお礼申し上げます。

最終行を取得する方法7選 (UsedRange/End~)

Excelのデータ処理をマクロで自動化しようと思ったら、必ずついて回るのが「最終行の自動取得」です。データの処理がどんなものであれ、まずはデータがどこまで入っているかを確認して、処理を実行する範囲を決めないといけません。