ユーザー定義関数

プルダウンリストを作成する ④ 表示する順序を指定

昨日は、プルダウンリストに表示する選択肢について、全候補からユーザーが任意に、事前に絞り込んでおく方法を考えてみた。 infoment.hatenablog.comしかしこの方法には、重大な欠陥がある。それは、絞り込まれて表示されなかった選択肢を、この仕掛けを知…

プルダウンリストを作成する ③ 使うものだけ表示

昨日は、プルダウンリスト項目のうち、重複や空白を除去する方法について考えてみた。 infoment.hatenablog.com 今日は、プルダウンリストに全ての選択肢を表示するのではなく、使うものだけ表示することに挑戦する。 例えば、選択肢がこれだけあるとする。 …

プルダウンリストを作成する ② 重複及び空白を除去

昨日は、プルダウンリストの作成方法を三つ紹介した。 infoment.hatenablog.comしかし実際、選択肢が綺麗にリスト化されていない場合もある。重複していたり、空白があったり。そこで今回は、それに対応する場合について検討する。 例えば、↓ この範囲をリス…

プルダウンリストを作成する ①

複数の選択肢から一つを選ばせたい場合、幾つか方法がある。中でも一般的なものの一つとして、「プルダウン」による選択肢表示があるだろう。プルダウンリストの設定方法は、思いつく限り、以下の三通りがある。 (きっと、もっとあるに違いない)。 リスト…

15年前に書いたマクロ

ふとした偶然から、私が15年ほど前に書いたマクロが目に留まった。 恐ろしいことに、今も使われているらしい。恥を忍んで、ここに再現しよう。 Sub 全角文字変換() Dim 全角文字 As String Do Until ActiveCell.Value = "" 全角文字 = ActiveCell.Value 全…

二つの配列を結合する関数 の続き

昨日は、二つの配列を力業で結合するユーザー定義関数を作成してみた。 infoment.hatenablog.com すると、ExcelVBAerさんから、以下のアドバイスをいただいた。 (いつも、ありがとうございます)。 Enum JoinDirection みたいに、 縦、横の指定をさせる場合…

二つの配列を結合する関数

昨日からの流れで何となく、配列を結合する関数を作ってみたくなった。 ↓ こんな感じで横並びに繋げるか、 或いは、↓ こんな感じで縦並びに繋げるか。 場合分けを考えていたら、ややこしくなってきたので、今回は(個人的に)禁断の 「一旦作業用シートを作…

ParamArrayでTEXTJOINを再現

昨日は、「ユーザー定義関数の引数を、ループで取り出せればいいのに」とボヤいてみた。すると複数の方から、以下のアドバイスをいただいた。 ParamArrayを使ってみてはどうでしょう。 何ですか?それは。 調べてみると、まさに今回のような場合に打ってつけ…

ユーザー定義関数で初期値が空っぽの場合

先日、ワークシート関数:TEXTJOINの存在を知った。複数のセルにある文字列を指定して、任意の文字で文字列を結合させることが出来る。例えば、こんな感じだ。まず、セルにA,B,C・・・と一文字ずつ入力する。 次いで、TEXTJOIN関数を用いて、これらを「…

セルに入力された文字を使って、セルに名前を付けてみる。

このような疑問を見かけたので、私なりに考えてみた。 セルに入力された文字を使って、セルに名前を付けることが出来るか。 例えば、A列の文字をそのまま、B列のセルの名前にすることは出来るだろうか。結論は「出来る」。ただし、ワークシート関数で実現…

シート上でjoin関数っぽく振舞うユーザー定義関数(失敗談)

先日は、シート上でsplit関数っぽく振舞うユーザー定義関数を作ってみた。 infoment.hatenablog.comそれなりに面白かったので、今度は調子に乗って、シート上でjoin関数っぽく振舞うユーザー定義関数を作ってみた。 考え方は前回と同じ。選択範囲について各…

シート上でSplit関数っぽく振舞うユーザー定義関数を作ってみた の続き

昨日は、シート上でSplit関数っぽく振舞うユーザー定義関数を作ってみた。 infoment.hatenablog.comすると、ExcelVBAerさんから次のようなコメントを寄せていただいた。 (いつもありがとうございます)。 ユーザ定義関数として使ってるので、 現状では不具…

シート上でSplit関数っぽく振舞うユーザー定義関数を作ってみた

既に世の中にあるとは思うが、シート上でSplit関数っぽく振舞うユーザー定義関数を作ってみた。 「split関数もどき」ということで、分割した〇番目の要素を返す関数となっている。 Function SubSplit(expression As String, _ Optional delimiter As String …

SUMIF関数で非表示のレコードを無視したい ③ 結局は足し算

昨日は、SUMIF関数で非表示のレコードを無視する方法を別の切り口から行うために、全ての検索結果をRange型で返すユーザー定義関数を作成してみた。 infoment.hatenablog.com本日はこれを、自作のSUMIF関数もどきに組み込んでみる。 改めて流れを整理すると…

SUMIF関数で非表示のレコードを無視したい ② FINDの応用

先日、SUMIF関数で非表示のレコードを無視する方法について考えてみた。 infoment.hatenablog.com 方法としては単純で、 「条件に合致するが非表示の場合、合計に加算しない」 を愚直に繰り返すだけ。すると、空腹おやじさんから「都度非表示判定を行うので…

SUMIF関数で非表示のレコードを無視したい ①

本日、このような相談を受けた。 「SUMIF関数で合計を求めているのだが、絞り込みで非表示になったレコードは無視したい」 早速挑戦だ。 ※Canvaでキーワード「サム」で検索したら出てきたのだが・・・誰だろう?相談があった表は、こんなイメージだ。 販売月…

選択セル内の文字列を集約して、コメントとして挿入する。

仕事で、このような価格表を扱った。 これだけなら何の問題もないのだが、残念なことに、このような形で注釈が記入されていた。 記載者は、良かれと思って注意事項を書いてくれている。しかし、このような形で注意事項を書かれてしまうと、 表をソートできな…

数独をVBAで解いてみる ⑤

昨日は、数独をVBAで解くコードに新たなロジックを追加してみた。 infoment.hatenablog.com今日も、新たなロジックの追加に挑戦する。 今回は、「2つの数字のどちらが入るか分からないが、必ずどちらかが入る」場合について考える。それは例えば、このよ…

数独をVBAで解いてみる ④

昨日は、数独をVBAで解くコードに新たなロジックを追加してみた。 infoment.hatenablog.com 今日は、答えが出るまで繰り返し処理を行わせることに挑戦する。 単純に繰り返すなら、For ~ Next ループが手っ取り早い。 Sub Sample() Dim i As Long For i = …

数独をVBAで解いてみる ③

昨日は、数独をVBAで解くコードを作成してみた。 infoment.hatenablog.com まずは基本的ロジックを押さえ、入門レベルであれば解けるところまで作成した。 そこで本日は、昨日の内容について、更にロジックを追加してみる。 昨日は、指定マスについて行列…

数独をVBAで解いてみる ②

昨日は、数独をVBAで解くための前段として、どのような形で解析すれば良いかについて検討してみた。 infoment.hatenablog.com そこで今日からは、実際に解を求めるべく、コードの作成に挑戦する。 今回は、数独解析用に「Sudoku」クラスを作成した。 また…

作成した年月週の表ラベルに実際の値を充て込んでみる ④ 完

昨日は、作成した年月週の表ラベルに既存の値を転記し、更に重複する文字をラベルから消してみた。 infoment.hatenablog.com 今日は、今回の最終回。入出庫情報を元に、在庫の推移表として編集してみる。 現時点での表は、こんな感じだ。 この表の最終目的は…

作成した年月週の表ラベルに実際の値を充て込んでみる ③

昨日は、作成した年月週の表ラベルを扱いやすい形に編集し、既存の値を転記してみた。 infoment.hatenablog.com 今日は更に、表の値が元の書式に戻すため、不要な値を消し込むことに挑戦する。 必要な情報は全て、昨日までに記入済み。従って今日は、さほど…

作成した年月週の表ラベルに実際の値を充て込んでみる ②

昨日は、作成した年月週の表ラベルの値を充て込むために、元の表を扱いやすいよう編集してみた。 infoment.hatenablog.com今日は更に、既存の値を転記するための辞書を作成することに挑戦する。 昨日、ラベルの文字を配列内で編集したのは、ラベルの文字を辞…

作成した年月週の表ラベルに実際の値を充て込んでみる ①

昨日は、開始日と最終日を指定しただけで、年月週の表ラベルを作成してみた。 infoment.hatenablog.com 今回はいよいよ、以下の目標に挑戦する。 目標:作成した年月週の表ラベルに、実際の値を充て込んでみる。 それでは、まず元の表について、今一度眺めて…

今日は、今月の第何週目?

指定日が、指定月の第何週目かを知る必要があった。 そこで、Excel のユーザー定義関数で求めてみることにした。 今日は、2月27日。なので今日の日付を引数として、戻り値は、何週目かを表す数値にしよう。 色々な方法があると思うが、私はこう考えた。 …

辞書(連想配列)に0から始まる数値を登録する際の注意点

商品名を管理するコードがある。仮に今は、6桁の数字だとしよう。 このコードは、管理の都合上、ゼロパディングされている。 例) 12345 ⇒ 012345 123 ⇒ 000123 このように6桁に満たない数字は、6桁になるよう先頭に0を付される。 ※ゼロパディング ⇔ ゼ…

クラスモジュールに移してみる

昨日は、書類の提出状況に対応する色でセルを塗りつぶして見える化するプロシージャについて、その内容を幾つかのプロシージャに分割してみた。 infoment.hatenablog.com 今日は更に、その幾つかをクラスモジュールに委ねてみる。 まず、クラスモジュールを…

配列の一部を抽出して、新たな配列として返すユーザー定義関数

以前、このようなものを作成して紹介した。 infoment.hatenablog.com ところが最近、これでは間に合わない事例が出てきたので、思い切ってもう一つ作ることにした。 といっても、特別なことをするわけではない。二次元配列に限定して、抜き出したい行と列の…

辞書(連想配列)に複数のアイテムを登録できた感じにする

職場の勉強会で、こんな質問を受けた。 辞書(連想配列)って、(一つのキーにアイテムは)一個しか 登録できないんですか? 「そうだよ」と答えた後に、ふと思った。それで、試してみた。 Sub DictTest() Dim Dict As Dictionary Set Dict = New Dictionary…