LotusNotesのメール作成・送信をフルオート化してみた

LotusNotesでメール作成→送信をフルオートにする LotusNotesでメールを送る作業が大量発生したときは、メール自動作成ツールで対応している。 akashi-keirin.hatenablog.com ただ、誤送信が怖いので、基本的にメール作成までは自動でやっても、送信自体は手…

VBAでインタフェースを使ってみた

インタフェースを用いたポリモーフィズムをやってみた 立山秀利さんが著書の中で使っていた音楽プレーヤのたとえが私にとっては一番分かりやすかったので、それをVBAでやってみる。 方針としては、 「RecordPlayer」クラス、「CDPlayer」クラス、「MP3Player…

フォルダを作成するクラス

フォルダ作成クラス 任意のディレクトリに任意の名前のフォルダを作る 新規フォルダを作るときは、MkDir関数を使う。 まあ、それはそれでいいのだが、何かこう、作りっぱなし感があって気持ち悪い。 せっかくなので、FileSystemObjectの練習も兼ねて、 フォ…

Addメソッドについて考えた

コレクションのAddメソッドの返り値 Addメソッドの返り値を追加したオブジェクトにするというアイディアを考えたやつは天才 Excelで明細みたいなのを作っていると、それぞれのシートなりブックなりをだいたいはPDF化したり、プリントアウトしたり、という使…

ワークシートをPDF化する(ExportAsFixedFormatメソッド)

ExportAsFixedFormatメソッドの三態 ExportAsFixedFormatメソッドの対象オブジェクト よそにデータを送るときに、PDF化する必要があって、WordであれExcelであれ、よくこのExportAsFixedFormatメソッドにはお世話になっている。 んで、改めて調べてみたら、E…

日付をはじめとする数字の表記の問題

日付の1桁の数字のみ全角にして表示する 変な風習 書類なんかの日付の表記(まあ、日付以外もですけど)について、ウチの職場には、 数字が1桁のときは全角、2桁のときは半角! という謎ルールがあって、これがWordやExcelを使った作業と本当に相性が悪い…

構造体の要素を並べ替える

構造体配列の要素をパラメータの値に従ってソートする なんかこう、仕事が泥沼で、長らく更新できませんでした。今も泥沼の最中なんですが、現実逃避して書いています。 さて、仕事で希望調査みたいなのをやった。まあ、データ集約するだけなら楽勝だったん…

漢字テストメーカーを作ってみた

漢字テストメーカーを作ってみた プロシージャの構成 問題データ抽出用プロシージャ Private Sub extractQuestions 乱数発生・ナンバリング用プロシージャ Private Sub setRandomNumber 抽出問題並べ替えプロシージャ Private Sub sortExtractedQuestions テ…

セル内のアンダーライン部分のみフォントを変える

文字列のうち、アンダーライン部分のフォントだけを変える ツイッターのフォロワーさんの「漢字テストの問題をランダムに作成できんかなー」みたいなツイートに反応して、どうやったらできるのか考えてみた。 傍線部分だけゴシックにしないといけない 文字列…

重複のない乱数発生のアルゴリズムを考えてみた

重複のない乱数を作る 重複のない乱数を発生させるアルゴリズムを考えてみた。まあ、ちょこっとggったらスマートなやつが見つかるとは思ったけど、自分で考えるというのが大事だと思ったのですよ。 素人丸出しのやり方なので、笑ってくれたらいいと思います…

マクロなし縛りでドロップダウンリストの項目を切り替える

マクロなし縛りでドロップダウンリスト項目を動的に切り替える 「マクロなし縛り」でExcelでの様式づくりをせざるを得なくなったので、久しぶりに関数であれこれやってみた。 ろくにワークシート関数も覚えていないのにマクロを覚えてしまったために、「欲し…

文字列の中の必要な部分にだけ書式設定をする

指定した文字の書式だけを変更する 記入見本作り 記入例を作りたかったんだが、日付の欄は、 こんな感じで、「月」と「日」と「(」、「)」をあらかじめ入れておいて、月・日・曜日だけを書いてもらうようにしている。 んで、記入者に書いてもらう部分だけ…

Wordの表の各セルの文字列を利用しやすくする(3)

WordTableCreatorクラスの修正 id:mmYYmmdd さんからのコメント akashi-keirin.hatenablog.com 前回の記事に、id:mmYYmmdd さんからコメントをいただいた。 全く以て仰せのとおり、というところなので、アドヴァイスに沿ってコードを修正する。 雑な配列の定…

Wordの表の各セルの文字列を利用しやすくする(2)

クラスのプロパティに二次元配列を持たせてみる 表の内容をそのまま配列にする 「表」ということは、二次元配列と同じ形なんである。 そこで、 クラスのプロパティを二次元配列にする ことを試みた。 クラスの改造 まず、前回記事のリスト1のうち、フィール…

Wordの表の各セルの文字列を利用しやすくする

Wordの表の中の文字列を取得するクラス WordTableOperatorクラス クラスモジュールを挿入して、オブジェクト名を「WordTableOperator」にした。 とりあえず、次のようなコードを書いた。 リスト1 Option Explicit 'フィールド' Private wordApp_ As Word.Ap…

「ゼロ文字目を返せや、コラ!」という無理難題にVBAさんはどう答えるのか

Left関数、Right関数の第2引数 Left関数、Right関数の第2引数が「0」だったらどうなるのか やってみた。 イミディエイト・ウインドウに次のコードを入力して[Enter]を押す。 リスト1-1 ?Left("吉岡 稔真",0) リスト1-2 ?Right("吉岡 稔真",0) 実行結果 ど…

「ハナクソ」の正体が分かった……?

ハナクソの正体が分かった??? 「ハナクソ」とは 「ハナクソ」というのは、 akashi-keirin.hatenablog.com Wordの表からExcelのセルに値を転記したときに、テキストの末尾にくっついてくるナゾの物体のこと。 私の職場の環境(Office2010)では、まるでハ…

LotusScriptのメソッド実行に成功した

LotusScriptのメソッド使用に成功した 少し前、コチラの記事 akashi-keirin.hatenablog.com で泣き言を言ったら、こんな過疎ブログにもかかわらず大勢の方がアドヴァイスをくださった。なんとありがたいことよ……。 あれこれ試してみて、なんとかうまく行った…

Wordの余白を除いたページ幅の中心位置の割り出し方について

Wordのページ中心位置に関する大いなる錯誤 偶然の一致だった 前回、コチラの記事で、 tmp = CLng(Word.PointsToMillimeters(objDoc_.PageSetup.PageWidth)) では、ページ横幅の中心位置を割り出しているのだが、なぜこれで中心が割り出せるのか分からない。…

私はResumeの意味が分かっていなかった

Resumeステートメントの意味が分かっていなかった Resumeステートメントの意味 久しぶりに『Excel VBA本格入門』(大村あつし著)を読み返していたら、 「Resumeステートメント」を引数なしで使うと、エラーの原因となったステートメントに制御が戻ります。 …

画像の配置でいらいらした

ページ横幅の中心位置を割り出そうとしたら謎だらけだった 問題のコード 写しPDF作成マクロを改良して、常にページ横幅の中心部分にハンコ画像が配置されるようにしようとしたら、謎だらけだったので書き残しておく。 リスト1 Dim objRange As Word.Range S…

LotusScriptのメソッドが実行できない……

実行時エラー438に悩まされる オブジェクトは、このプロパティまたはメソッドをサポートしていません 80箇所ぐらいの宛先に、それぞれ添付ファイルの異なるメールを送信する、というしちめんどくさい仕事をすることになった。まあ、Excelで表さえ作ったらメ…

配列関係の覚書(2)

いただいたコメント 前回の記事に達人の皆様からコメントをいただいていたにもかかわらず、返事もできないまま1週間近くたってしまっていた。 私にとっては結構重要なご指摘だったので、コメント欄にではなく、本編にてお返事させていただきます。 id:imihi…

配列関係の覚書

Split関数(VBA)など配列回りの覚書 Split関数 Split関数は、 Split(文字列, デリミタ) とすれば、第1引数の文字列を、第2引数のデリミタで区切った文字列を配列にして返してくれるとっても便利な関数。 んで、めちゃくちゃ基本的なことなんだが、 配列で…

Thunderbirdメール自動作成マクロで複数アドレス指定に対応するのは簡単だった

Thunderbirdで複数の宛先を指定するのは簡単だった Shell関数でThunderbirdのメールを作成する このときにも紹介したが、VBAでThunderbirdのメールを作成するには、次のようなコードを書けば良い。 リスト1 Shell "Thunderbird実行ファイルのフルパス" -com…

VBAで名前の定義をするといろいろ楽

セル範囲の名前の定義をVBAでやったら便利 転記するごとにセル範囲を定義し直す このときみたいなデータ転記系の処理をした場合、ワークシート関数のCOUNTIFなんかを使って種別ごとの数を勘定したい、ということがよくある。 しかしながら、転記件数が変化す…

ActiveWindowプロパティでちょっとハマる……

ActiveWindowプロパティの怪 Excel2010でのエラー 職場のPCはOffice2010なんだが、妙なエラーが出た。 ThisWorkbookモジュールに仕込んだWorkbook_Openイベントマクロでの話。 データを集約するマクロを作っていて、データ集約が終わったら、マクロを仕込ん…

データ抽出用クラスを作る

データ抽出用のクラス AdvancedFilterメソッドを気軽に使う あんまり役に立たないと思うけど、ちょっと作ってみた。 準備として、 データ抽出元のシートを用意。 こんなふうに抽出条件設定用の表を作り、 セル範囲に名前を付けておく。 ちなみに、抽出条件は…

名簿作りマクロ(4)

名簿作りマクロ メインコードの組立 過去記事 名簿作りマクロ(3) 名簿作りマクロ(2) 名簿作りマクロ(1) 作成するプロシージャ まず、転記処理の流れを整理しておこう。 【プロシージャ1a】「戦法別」シートへの転記開始用プロシージャ 【プロシージャ1b】…

名簿作りマクロ(3)

名簿作りマクロの組立 次のような手順で組み立てる。 【手順1】ユーザ定義型・列挙型の宣言 【手順2】定数・変数の宣言 【手順3】転記マクロの組立 このような手順で進めていきます。 ユーザ定義型・列挙型の宣言 コードの可読性を上げるために、列挙型を…

Withブロック使用上の注意

Withでまとめるときの注意 実験1 たとえば、ワークシート上に、 こんな表を作ったとする。知性のかけらもないのは許してほしい。 んで、この表に対して、 リスト1 Public Sub test01() Dim sh As Worksheet Set sh = ActiveSheet sh.Range("A1").CurrentRe…

文字列のカッコで括られた部分だけを狙い撃ちで削除するマクロ (2)

ネストされたカッコにも対応する 前回の記事が、この過疎ブログには珍しく反響があったので、ちょっと追加。 Replaceメソッドを使う方あり、Split関数を使う方あり、果ては正規表現を使うツワモノまで現れる始末……。 こうなったら、私も意地になって改良を加…

名簿作りマクロ(2)

文字列をコード番号に置き換えて取得する VLOOKUPのちょっと邪道な(?)使い方 一覧表の中の文字列をコード番号に変換するのには、VLOOKUPを使うというのが一般的だと思う。 ただ、私は、一覧表にずらずらとVLOOKUPの数式が並んでいるのがどうもイヤなんで…

名簿作りマクロ(1)

人物データを元に名簿を作成するマクロ 配置転換で行った先で見たもの 新年度の配置転換で、新しい部署に行くことになった。んで、早速名簿作りをしないといけなくなった。 だいたいこんな感じのものが出てきたと思ってください。 どうやら、 こんな元データ…

ループ処理で何もせずにカウンタだけ前に進める

何もせずに次のループに進む ForループやDoループを書いているとき、 先頭で条件判定して、当てはまっていたら何もせずに次のループに進むことができたらいいのに と思うことがちょいちょいある。 もちろん、たとえば、 リスト1 For i = 1 to hogehoge If f…

文字列のカッコで括られた部分だけを狙い撃ちで削除するマクロ

セル内のカッコで括られた文字列のみ削除する 都道府県番号の一覧表 ひょんなことで、都道府県番号の一覧表が欲しいなあと思ってggってみたら、 こんな一覧ばっかり(画像はWikipediaのものです)で、表形式のまま取り込めるものがなかなか見つからなかった…

脱・初心者のために(1)

私が脱・初心者を自覚した瞬間 ……といっても、ある瞬間にスイッチが入ったように「今日を以て初心者を卒業します。私のことを嫌いになっても、初心者のことは嫌いにならないでください!」とか思ったわけではない。 何度も何度も、それはもう何度も何度も、T…

条件付き書式をまじめに勉強してみた(2)

自動記録されたコードを編集する 仕様 まず、自動記録されたコードは、A3セルの値しか条件判定に使うことができない、というおっそろしくしょぼいものなので、選択範囲内全てにA列のセルの値次第で書式設定をするというものに変える。仕様としては、とり…

条件付き書式をまじめに勉強してみた

条件付き書式を設定するマクロ 年度最終日、さっさと仕事を済ませて華麗に帰ってやろうと思っていたのだが、新年度すぐに使う予定表に一つ機能を付け加え忘れていたことに気づいた。ワンクリックで1年分のカレンダーが更新されるようにしていたのに、土日の…

画像をクリックしたら画像のあるセルに現在時刻を書き込むマクロ

クリックされた図形のあるセルを取得する 前置き 「画像をクリックしたら、その画像のあるセルに現在時刻を書き込むようなことってできない?」と言われたのでやったことがあった。 Excelで勤怠管理の一覧表を作って、出勤時と退勤時にその日の欄にある画像…

小さなクラスを作る(7)~セルの列符号が簡単に取得できるラッパークラス

列符号取得が可能なRangeオブジェクトのラッパークラス きっかけ 「列番号はColumプロパティで簡単に取得できるのに、列符号って取り出しにくいよなー」と思って、コチラを参考にXDF列までに対応した自作関数を作ったのがそもそもの始まり。 他のよく使う機…

フォルダ構成を別のフォルダにコピーするマクロ(3)

一覧表のデータを元にフォルダ構成を移植する いよいよ今回のマクロも完成。 今回は、前回のマクロで作成したフォルダの一覧表を元に、別のフォルダにフォルダ構成を再現する処理を書いていく。 処理の下準備 リスト1-1 Sub moveFolderStructure() Dim objSh…

フォルダ構成を別のフォルダにコピーするマクロ(2)

指定したフォルダ内のフォルダ構造をワークシートに書き出す 標準モジュールの宣言セクション リスト1-1 Option Explicit Dim fldPicker As FolderPicker おなじみ、変数宣言の強制と、FolderPickerクラスのインスタンス用の変数宣言。FolderPickerクラスに…

フォルダ構成を別のフォルダにコピーするマクロ(1)

全てのサブフォルダのパスを書き出す 「再帰呼び出し」を使ったコード フォルダの中にフォルダがあって、そのフォルダの中にまたフォルダがあって……というような場合に、全てのフォルダのパスを取得するためには、メソッドの「再帰呼び出し」というものを使…

Word 差込印刷のレコードごとにファイルを生成するマクロ

Wordの差込印刷でレコードごとにファイルを保存 普段、仕事で差込印刷をよく使うんだが、「レコードごとに別々のファイルにしてくんねーかなー」と思っていた。 以前は、 一旦、PDFにする 1ページづつバラす それぞれにファイル名をつける というおっそろし…

写しPDF作成マクロ~(4)

クラスを組み合わせる 使用したクラス FileNameGetterクラス FolderCreatorクラス ErrorCatcherクラス DocPDFConverterクラス それぞれのクラスの詳細については、リンク先をどうぞ。 標準モジュールのコード Option Explicit Public Type myFolder fdPath A…

クラスをクラスのフィールドにする

クラスをクラスのフィールドにする クラスを丸ごとクラスのフィールドにしたらいいんじゃないか、と今さらながらに気がついた。Javaの本でさんざん目にしていたことなんだけど。 フィールド用のクラス 「GambleRacer」というクラスを作った。 クラスモジュー…

小さなクラスを作る(6)~WordドキュメントをPDFに変換する

WordドキュメントをPDFに変換して保存する 仕様 Wordドキュメント そのWordドキュメントがあるフォルダパス ファイル名 以上3つをフィールドとして持つ。 メソッドは今のところ一つだけ。 WordドキュメントをPDFにして指定のフォルダに保存する 元のWordド…

小さなクラスを作る(5)~エラーキャッチをするクラス

エラーキャッチをするクラスを作る そんなことをする意味があるのかどうかはともかく、エラー時にメッセージを表示させるという処理もよく使うので、作ってみた。まあ、何でもかんでもクラスを作っていったら、そのうちコツがつかめるだろうということで勘弁…

小さなクラスを作る(4)~フォルダ作成クラス

きっかけ 写しハンコつきPDFを作るマクロのコードを見直していると、メインの「写しPDFを作るクラス」が結構複雑なクラスになっていることが分かった。ざっと挙げると、 元のWordドキュメントに画像があるかどうかチェック ハンコ用の画像ファイルが実在する…