ユーザー定義関数

OR関数についての備忘録

今日はOR関数について、自分用の備忘録(すぐ忘れるので)。 例えば、指定した県が北陸三県であるか判別したい場合。 ユーザー定義関数でORを用いると、このような表現が可能だ。 とても一般的で、理解し易いと思う。 Function Is北陸_OR(県名 As String) …

セルの値を合計するマクロ

↓ こちらが面白い。 www.atmarkit.co.jp中でも、登場人物のこの会話が楽しくて好きだ。 「セルの値を合計するマクロができたぞ……!」 「そういう再発明もたまにはいいですよね」ということで、私もセルの値を合計するマクロを作ってみた。 この飛び飛びの範…

スケジュール管理表を作成 ③ 列名をEnumで管理

先日から、スケジュール管理表をExcelで作成している。 infoment.hatenablog.com 今日も、昨日の続きから。 昨日作成したユーザー定義関数で、一つ大きな抜けがあった。 関数自体に抜けがあったわけではなく、関数に使用したEnumを掲載して いなかったのだ。…

スケジュール管理表を作成 ② ユーザー定義関数でIF文の多重入れ子解消

昨日から、スケジュール管理表をExcelで作成している。 infoment.hatenablog.com 今日は、昨日の続きから。 昨日は、数式で以って終了予定時刻を算出した。 実はこれに、もう少し条件の追加が必要だ。しかしこれ以上、IF文の多重 入れ子構造になると、ぱっと…

色々な日付の表記

面白いテーマがあったので、挑戦してみた。#VBA100本ノック 7本目A列は文字列データ(表示形式が文字列)で日付が入っています。日付とみなされる場合はB列に月末日付をmmddの形式で出力してください。日付け以外の場合は空欄にしてください。例.B2は「0930…

Index関数も作ることにした

昨日は、Transpose関数を作ってみた。 infoment.hatenablog.comついでに、Index関数も作ってみた。 Transpose関数と同様のテストを行い、Index関数で配列をスライスする際の限界に挑戦してみた。 Sub Test() Dim arr(1, 1) As Variant Dim i As Long Dim tem…

Transpose関数を作ることにした

先日、Transpose関数の限界を知った。 infoment.hatenablog.com仕方ない、自分で作るか。 今回はこちらに倣って、全てではないが、多くを日本語で書いてみた。 www.limecode.jp Function UDF_Transpose(ByVal 元配列 As Variant) As Variant ' 「元配列」が…

結局、お茶を濁して終わらせた話(失敗談)

今日は結局、お茶を濁して終わらせたお話。 こちらのブログでも紹介した、ユーザー定義関数「FindAll」。 少し前に、これが誤動作することが分かった。もともと、指定したキーワードがシート状に複数ある場合、そのキーワードを含むセル全てをRangeで返す仕…

配列の重複削除 ③ 範囲やテーブルの任意の一列からも、重複の無い一次元配列を作成してみる

昨日は、二次元配列の任意の一列から、重複の無い一次元配列を作成してみた。 infoment.hatenablog.comしかし、このままでは未だ足りない。もう少し機能拡張してみよう。 ということで、昨日のものを少し弄ってみた。 配列だけでなく、範囲(Range)またはテ…

配列の重複除去 ② 二次元配列から任意の一列を抜き出して新たな配列作成

昨日は任意の一次元配列について、重複除去するユーザー定義関数を考えてみた。 infoment.hatenablog.comしかし実際、自分の場合に限って言えば、一次元ではなく二次版配列の任意の一列を抜き出したうえで重複除去することの方が多い。 そこで、一次元と二次…

配列の重複除去 ① 一次元配列

テーブルの指定列の値を一旦配列に格納し、重複除去してリストを作成するとき、いつも辞書(連想配列)を使っている。 完全にパターン化しているのに、そういえば関数化していなかった。 みんな大好き連想配列は、 key item で構成されている。普通の辞書で…

蟹の種類と数を数えよう(完結編)

先日、蟹の種類を数えてみた。 infoment.hatenablog.comするとimihitoさんから、大変貴重なアドバイスをいただいた。 また生物学上はヤドカリな蟹たちを除外したのは、特産地の皆様やファンの方々に申し訳ないことをしたと反省。以上を踏まえ、大幅改修する…

鯖と鯵を数える

Excelで、こんなクイズが出題された。鯖と鯵は、それぞれ何匹? 今回は、Split関数を用いて解いてみた。 Function 何匹(全体 As String, 種類 As String) As Long 何匹 = UBound(Split(全体, 種類)) End Function 例えば「鯖鯵鯖」(←全体)という文字を、「…

スライサーを戻り値とする関数でタイムラインも作成

昨日は、テーブルでスライサーを作成する関数について、ピボットテーブルからも作れるようにしてみた。 infoment.hatenablog.com今日は、昨日の続きから。 スライサーを追加して思った。ついでに、タイムラインも追加したい。 調べてみると、スライサー作成…

引数の型が二つあるときは、仕方がないからバリアントで。

先日、テーブルのスライサーを作成する関数を作成してみた。 infoment.hatenablog.comテーブルで作るなら、ピボットテーブルでも作れるようにしたい。 先日のコードがこちら。 Function AddedSlicer(source_table As ListObject, _ target_label As String, …

当月の初日と最終日

久しぶりにExcel VBAで、当月の初日と最終日を求める場面があった。 初日を求めるとき、昔はこんな風に書いていた。 Function FirstDay(source_date As Date) As Date FirstDay = DateSerial(Year(source_date), Month(source_date), 1) End Function この記…

別ブックのマクロを実行したときの結果

先日Excelで、別ブックにあるマクロを実行したときの出来事。 その時の状況は、以下のとおり。 Book1のHOGEから、Book2のFUGAを実行 FUGAがエラー終了 Sub HOGE() Application.Run "BOOK2!FUGA" End Sub Sub FUGA() Range("A1") = "ふが" End Sub HOGE側はFU…

コメントの挿入

出張で、一週間近くブログを更新できなかった。 ということで、今日は軽めに。セルのコメントを、マクロでこんな風に表示したい。 ということで、関数にしてみた。とりあえず戻り値は、Rangeにしてみよう。 Function コメント(target_range As Range, ParamA…

Aという文字を、Aという文字パターンで認識してみる。

昨日は、Aという文字をAという文字で分割してみた。 infoment.hatenablog.com今日はAという文字を、Aという文字パターンで認識してみる。 ↑ のように書くと、何だか良く判らない。しかし何のことはない、今度は正規表現で指定文字を数えてみようってだけ…

Aという文字を、Aという文字で分割してみる

面白いネタを拝見したので、昨日までのテーマを一時お休み。 VBAには、Splitという関数がある。 docs.microsoft.com 文字通り、対象となる文字列を、指定文字で分割する関数だ。では、Aという文字をAという文字で分割したらどうなるだろう。 試してみた。 …

RandArray関数っぽいユーザー定義関数で、重複不可の引数を追加

昨日は、RandArray関数っぽく振舞う、ユーザー定義関数を作ってみた。 infoment.hatenablog.comこれの使い処を考えるうち、思いついた。少し手を加えれば、ランダムな並び替えに使用できるのでは?ということで、やってみた。 ランダム並び替えといっても、…

RandArray関数っぽいユーザー定義関数

先日、何度かRandBetween関数を使っている内に、気が付いた。 何だろう、これ。 調べてみると、↓のような説明があった。 support.office.comこれは、面白そうだ。早速試してみよう。 A1を起点に、4行6列のランダムな表を作成する。値の範囲は、10~20…

ダミーテーブル作成 ④ 完結編(クラスモジュール)

先日はダミーテーブルを作成する関数について、希望するところまで完成させた。 infoment.hatenablog.com今日は毎度の一つ覚え、クラスモジュール化してみよう。 先日のコードを見直したところ、一部に誤りがあり修正。これをクラスモジュール化したのがこち…

ダミーテーブル作成 ③ 後編

昨日は、一旦ダミーテーブル完成まで漕ぎつけた。 infoment.hatenablog.com完成して、気が付いた。しまった、入れたい項目を二つ、忘れていた。 入れたかった項目は、以下の二つだ。 原価 値引き額 これから先に、項目を更に増やしたくなるかもしれない。そ…

ダミーテーブル作成 ② 中編

昨日は、テスト用のダミーテーブルを途中まで作成して、時間切れ。 infoment.hatenablog.com今日は、昨日の続き。 昨日は、このような表を張り付けるところまで作成した。 この表は、No.と合計金額の列を空欄にしてある。理由は、以下のとおり。 合計金額・…

ダミーテーブル作成 ① 前編

昨日は、テスト用の表を作成するために、「テキトー」(※「適当」ではない)な名前の社名を作って返す関数を作成してみた。 infoment.hatenablog.com今日はこれを元に、いよいよダミーテーブル作成に挑戦する。 兎に角「無作為感」を出したかったので、RandB…

架空の社名

突然、面倒臭くなった。 何がって、テスト用の表を作成するのが、とても面倒くさくなったのだ。 特に面倒なのが、会社名だ。そこで、適当な社名を返す関数を作ってみた。 Function FictitiousName(Optional min_length As Long = 3, _ Optional max_length A…

フィルをマクロで操作し、カレンダーを作成(昨日の微修正)

昨日は、フィルをマクロで操作して、即席カレンダーを作成してみた。 infoment.hatenablog.comこのテーマは昨日で終わりと思っていたが、よく見てみると、このカレンダーには曜日の表示が無い。 このままでは、2019年を終われない。昨日の微修正を行うことに…

フィルをマクロで操作し、その戻り値をRangeとする関数 ~ 補足 ~

昨日は、フィルをマクロで操作したうえで、その戻り値をRangeとする関数について微調整を行い、即席カレンダーを作成してみた。 infoment.hatenablog.com今日は、この件について一点補足する。 昨日、カレンダーを作成する際に、まず7日間隔で5行1列のデ…

フィルをマクロで操作し、その戻り値をRangeとする関数(日付対応)

先日からフィルをマクロで操作したうえで、その戻り値をRangeとする 関数の作成を試みている。 infoment.hatenablog.com今日は、日付対応に取り組んでみる。 先日作成した際、何も考えずに停止値の型を「Long」(長整数型)にした。しかし考えてみると、これ…