2019-06-01から1ヶ月間の記事一覧

配列に日付を格納してオーバーフローしたお話 の続き

昨日は、2019年6月10日の日付を取得するつもりが、55197年後の日付を求めようとして破綻する結果となった。 infoment.hatenablog.com最終的には、主たる原因である「セルの書式設定」を一旦標準に戻すことで、解決することが出来た。ところでその後、コロ子…

配列に日付を格納して、オーバーフローしたお話(失敗談)

先日、このような表を受け取った。 A列には、何が入っているのだろう?一つ選択してみると、8桁の数字が入ってい た。セルの幅が狭すぎて、このような表示になったようだ。 ※書類のレイアウト上、この列のために広い幅を確保できないとのこと。 システムか…

範囲選択で遊んでみたお話

今日はExcel VBAの勉強会で、様々な範囲選択で遊んでみた。 まずは、選択範囲をバビーンと横に伸ばしてみる。 Selection.EntireRow.Select 今度は、選択範囲をズドーンと縦に伸ばしてみる。 Selection.EntireColumn.Select 選択範囲のサイズを、指定サイズに…

検索結果がどこにあるか分からない事件 ② 拡大してみる

昨日は、検索して選択したセルがどこにあるかを直感的に理解するために、選択したセルが一番左上になるようにしてみた。 infoment.hatenablog.comしかしこれだと、任意のセルをポチポチと選ぶたび派手にスクロールしてしまい、とても使い勝手が悪い。そこで…

検索結果がどこにあるか分からない事件

職場で、このような相談を受けた。 「検索」で探した結果、該当するどこかのセルが選ばれているはずなのだが、目で探せないことが多い。何とかならないか? 例えば、このようなことだ。「馬肉」で検索した結果、「A5」セルが選択されているのだが、気付く…

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

先日は、プルダウンリストを作成する際に、リストの表示順序を明示する方法を考えてみた。 infoment.hatenablog.comこの中で、二次元配列のソートを突貫工事で作成したところ、なかなかの欠陥物件になってしまった。 ※数字を文字に置き換える過程で、正しく…

マクロでIFERRORを使ってみる(失敗談)

例えば、こんな値が並んでいるとする。 数字の各値に10を加えて右隣に表示したいのだが、数字以外の値に10を加えれば、エラーになってしまう。 こんな時は、IFERROR関数を用いると便利だ。 support.office.com平たく言うと、「エラーだったら、何表示します…

数字の桁数を求める関数

前回のネタを作成中に、数字の桁数を求めたい場面があった。しかし、桁数を直接求める関数は無いようだ。そこで、手っ取り早く作ることにした。 先ず大前提として、ここでは有効数字の桁数は扱わないことにする。色々と複雑だから。 有効数字 - Wikipediaそ…

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

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

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

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

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

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

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

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

16385列目のデータ

2016年6月現在、Excel2016の最終列はXFD列(16384列)だ。 ここで、ふと思った。最終列に何某かのデータが入力されている状態で、それ以前のどこかに列挿入を行った場合、XFD列のデータはどうなるのだろうか。試しにやってみた。すると、エラーになった…

シートを名前で選ぶ。並び順で選ぶ。オブジェクト名で選ぶ。

Excelには、Sheetsプロパティなるものがある。↓こちらによれば、 「コレクションから単一のオブジェクトを返します。」 とある。 docs.microsoft.com必ずではないが、Sheetsのように末尾に複数形の「s」がついているものは、複数のものの「集まり」であると…

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 …

判定後の再計算でおかしな結果に(失敗談)

Excel VBA初級者向けの勉強会で、 繰り返し 条件分岐 を同時に扱うことになった。そこで、まずこのような表を作成。 数値には、RANDBETWEEN関数を用いており、各セルに1から10までの数がランダムに表示されている。参加者には以下を入力し、結果を確認し…

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

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

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

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