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

インスタンスを破棄するタイミング(失敗談)

大変な勘違いをしていた。 サブプロシージャ内で生成されたインスタンスは、 サブプロシージャ終了時に、自動的に破棄される。 従って最近個人的に流行りの下記も、 With New Class1 てっきり、サブプロシージャ終了時に破棄されるものと思い込んでいた。 し…

? 1=1 はい、そうです。

昨日、ExcelVBAerさんから頂いたコメントを見て、あることを思い出した。 それは、Select Case でLike演算子を使う場合のこと。 docs.microsoft.com以前職場で、「Trueを付ける」と教わった。↓ こんな感じで。 Select Case True その時は、Select Case 特有…

複数条件で絞り込む(配列)

昨日に引き続き、ArrayEditクラスの機能拡張に挑戦。 今日は、複数の条件で配列を絞り込んでみる。 今日も、なんちゃって個人情報のお世話になる。 今回は、5000人分の情報をダウンロード。この中から、以下を抽出する。 男性 既婚 愛知県在住 ドコモユ…

二次元配列で指定列の値のうち、指定値以上の行だけ残したい

二次元配列で指定列の値のうち、指定値以上の行だけ残したいケースが登場した。例えば、↓ このような値において、 ↓ このようにしたい。 そこで、先日来取り組んできたクラス「ArrayEdit」の機能拡張に挑戦した。 折角なので、以下の選択肢全てに対応させて…

ファイル名変更

業務で、連続して複数のファイルに対し、ある特定のルールで名称変更 することになった。今から作って、明日早速試してみよう。 名前を変更するには、Nameステートメントが便利だ。 docs.microsoft.com ' 構文 Name A As B A:変更前のファイルパス B:変…

他のブックにあるマクロを呼び出したとき、そのブックを最小化したい

本日唐突に、他のブックにあるマクロを呼び出したとき、 そのブックを最小化したい事案に遭遇した。 あれこれ捏ね繰り回し、結果、これに落ち着いた。 Sub Sample() ThisWorkbook.Activate ActiveWindow.WindowState = xlMinimized End Sub もっと単純にでき…

二次元配列の一部を抽出:指定列番号順にスライス

最近、これの存在を知った。 docs.microsoft.com何ということでしょう。これがあれば、簡単に配列をスライスできる。 今までの苦労は何だったのか。 本日も、毎度おなじみ「なんちゃって個人情報」のお世話になる。 例えば、一旦表全体を配列に格納したのち…

辞書のキーとアイテムで二次元配列作成

辞書(連想配列)のキーとアイテムで、二次元配列を作りたくなる場面に遭遇。そういえば、テーブル内の指定した二列で辞書を作る関数を作成したことはあったが、その逆は無かったな。 infoment.hatenablog.comというわけでな、今回はこれに挑戦してみた。 と…

End If で終わらない If

昨日は、With について試してみたところを紹介した。 infoment.hatenablog.comその後、thomさんに解説をいただくことが出来た。 (いつも、ありがとうございます)。この方式について、使い処を色々考えてみた。思いついたのが、↓ こちらで作成したクラスモ…

変数の省略

例えば、こんなサブプロシージャがあったとする。 Sub test_1() Dim myReg As RegExp Set myReg = New RegExp myReg.Pattern = "[\w]+" Debug.Print .test("aaa") Debug.Print .test("あああ") End Sub 変数を宣言し、初期化し、その後の処理を行う。よくあ…

トーナメント作成 ⑥ クラスモジュールへの移植

昨日はリストの上位にいる選手が、優先的にシード選手になるようにしてみた。 infoment.hatenablog.com今日は、本シリーズ最終回。一応完成(のつもりです)。 といっても、ほとんどは昨日の内にできている。今日はいつものごとく、作成したそれをクラスモジ…

トーナメント作成 ⑤ 指定番数以降をランダムに並べ替え

昨日は、トーナメント表に、如何にして選手を並べるかに挑戦した。 infoment.hatenablog.com今日は、昨日の続きに挑戦する。 まず8人を一塊として考えている関係上、8人以下の場合は一般式に充てられないような作りにしてしまった。そこで2~8人の場合は…

トーナメント作成 ④ 前回の上位者をシード選手に

昨日は、トーナメントの箱だけを取り敢えず作成した。 infoment.hatenablog.com今日は、このトーナメント表に人を充てる順番を求めてみる。 トーナメント表において、一回戦がピッタリ埋まるのは2のn乗の場合。 2の1乗 参加選手は2人 1回戦まで 2の2…

トーナメント作成 ③ 箱を罫線で繋ぐ

昨日は参加人数に合わせて、一回戦から優勝までの人名記入用セルを配置した。 infoment.hatenablog.com今日は、この箱を罫線で縦横つなぐことに挑戦する。 さて、まず横の線だが、これは名前のセルを結合する前に引いておくことにした。 次いで、昨日のコー…

トーナメント作成 ② とりあえず箱を配置する

昨日は参加人数から、トーナメントが何回戦まで行われるか求めてみた。 infoment.hatenablog.com今日はこれを利用して、決勝戦までの箱を並べてみる。 まず参加者だが、今回も「なんちゃって個人情報」のお世話になった。 これを手作業でシート上に配置する…

トーナメント作成 ① 2の倍数に切り上げる

とある事情から、簡単にトーナメント表を作りたくなった。 そこで、Excelで簡単に作れないか、今日から試してみようと思う。 手順など、恐らく世の中では既に確立しているのだろうが、勉強のためにもやってみよう。上手くいったら、ご喝采。失敗しても、ご愛…

①と②の順序が入れ替わった時、自動で②を①に、①を②に変更したい。

突然、強烈に面倒くさくなった。 何が面倒くさいって、番号を一々入れ替えるのが。 私の書く週報は、良し悪しはさておき、こんな書式になっている。 例えば時系列の関係などから、①と②を入れ替えたとする。 ②と①の文字が自動で入れ替わるはずもなく、次いで…

B1の一つ右隣を指定する方法

先日、職場の勉強会で、あることに気づかせてもらった話を紹介した。 infoment.hatenablog.com実はこの時もう一つ、気付かせてもらった話がある。 といっても、言われてみれば、当たり前の話。社内勉強会に参加されたその方は、例えばB1の一つ右隣(つまりC1…

Target と Selection と ActiveCell

職場の勉強会で、WorkSheet_SelectionChange イベントを扱う機会があった。 選択範囲の値を得て、何某かの処理をする。私の中では、Target を使うのが定番。例えば、こんな感じだ。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 複数セ…

セル内で複数行に改行されている文字を、一行ずつ取得したい

セル内で、複数回改行されている文字列がある。 見やすさのためか、途中に空白行まで挟まっている。こんな感じで。 この中から、 ああああ いいいい うううう ええええ の4つの文字列を取り出したいという依頼があった。 拡張子は「.xls」だった。聞けば、…

引数で()が要るときと要らないときと、要らないけど書けるとき

引数で、()が要るときと要らないときがある。 【要るとき】 Callステートメントでプロシージャを呼び出すとき 戻り値があるとき ※ただし、引数が無い場合は()不要。そして、これを混乱させる理由の一つが、下記サンプルの三番目ではないかと推測する。 S…

8桁の数字を日付に変換

何某かのシステムからダウンロードしたデータの日付が、8桁の数字になっていることがある。これを、日付データに変換したい。こんな感じで。 例)20191004 ⇒ 2019年10月4日 ということで、覚えたての頃に作成したマクロと、 今日仕事で使ったものを両方書い…

条件付き書式で濃淡をつける

業務で、ある数値を管理している。 予定された大きさがあって、そのとおりであれば「1」(=100%)となる。1を超えた、つまり予定をオーバーしているものは要監視対象として、セルに色を付けて対応していた。今までは、とにかく1を超えれば色が付くという…

縦から横か、それとも横から縦か(テーブルの値取得)。

縦から横か、それとも横から縦か。 先日の社内勉強会で、テーブル(表)内の特定セルの値を取り出す操作があった。その時のお話から抜粋。例えば、このようなテーブルがあるとする。この中で、みかんの単価が知りたいとき、どうすればよいか。このとき、縦から横か、…