VBA覚書

親ブックから子ブックを量産する

データを変えて親ブックから子ブックを量産するマクロ 子ブック生成部分を切り出す akashi-keirin.hatenablog.com の続き。 FileSystemObjectオブジェクトのCopyFileメソッドを使うと、子ブックの生成が簡単にできることが分かったので、いよいよ量産体制に…

親ブックから子ブックを生成する

子ブック生成マクロ 親ブックから子ブックを生成する方法 akashi-keirin.hatenablog.com 先日、コチラの記事をうpしたところ、twitterのフォロワーさんから、 FileCopyステートメントでよくね??? 的なリプをいただいたのだった。 私自身、 たかがブック…

マル中数字をインクリメントする

マル中数字の連番との戦い 1つのブックの中に同じ様式のワークシートが10ヶあって、それぞれに異なるデータを入力していく、という業務が発生した。 ウチの職場では、普通は1シートづつポチポチ入力していくものらしい。 しかし、だ。たいていはせいぜい3…

Private関数(メソッド)でもイミディエイト・ウインドウで動作確認できる

Private関数(メソッド)でもイミディエイト・ウインドウで実行できる ExcelVBAer (id:x1xy2xyz3) さんからの助言 akashi-keirin.hatenablog.com コチラの記事に、ExcelVBAer (id:x1xy2xyz3) さんからコメントをいただいた。 イミディエイト用の方法で、Priv…

String関数なるものの存在を知った

String関数を使う 前回の akashi-keirin.hatenablog.com に、id:imihito さんからコメントをいただいた。 特定の1文字の繰り返しは String関数(名前が紛らわしいですが)を使うと簡単に作れたりします。 VBA.Strings.String$(2, "0") とのこと。 へえ! 知…

ゼロ埋め連番を作成する

Format関数の第2引数は、変数でも良かった ゼロ埋め連番文字列を動的に生成する たとえば、 akashi-keirin.hatenablog.com こんなマクロを使って大量にファイルを生成するような場合、ファイル名の先頭がゼロ埋め連番になっていると非常に都合が良い。 で、…

「クソ」としか言いようのない魔Excelに勝利した

クソのようなExcel様式に打ち勝った クソとしか言いようのないExcel様式 「クソ」としか言いようのないExcel様式に出会った。 簡単に言うと、 1つのセルに複数データが入っている というもの。 しかも、[Alt]+[Enter]によるセル内改行ばかりかと思ったら、…

Wordドキュメントの表の行を削除する

Wordの表の行を削除する Wordドキュメント内の表の任意の行を削除する 差込印刷機能を使って似たような書類のWordファイルを自動的に作成するマクロをよく使う。 akashi-keirin.hatenablog.com Excelで表さえ作ってしまえば、人力でポチポチやるよりも圧倒的…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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…

配列関係の覚書(2)

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

配列関係の覚書

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

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

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

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

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

Withブロック使用上の注意

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

写しPDF作成マクロ~(3)―ページ先頭位置を割り出して画像を追加する―

Wordドキュメントに画像を貼り付ける 今回作成するマクロでは、Wordドキュメントにpng画像を貼り付ける必要がある。しかも、その処理をExcelから行う、という無駄にややこしい仕様w とりあえず、今回は Wordドキュメントの各ページの先頭中央にpng画像を貼…

VBAでは、メソッドのオーバーロードができなかった

やってみた。 準備 標準モジュールのコード Private Sub makeUserSick() '……(1) MsgBox " _________" & vbCrLf & _ " / \ " & vbCrLf & _ "/ /・\ /・\ \" & vbCrLf & _ "|  ̄ ̄  ̄ | ち~んw" & vbCrLf & _ "| (_人_) |" & vbCrLf & _…

Select / Activateメソッドの極小ハマり

状況 ワークシート こんな風にシートを準備して、 それぞれのシートはこんな風にカレンダーにした。 クラスモジュールのコード 「オブジェクト名」は「DaySelector」にしている。 Option Explicit 'フィールド Private startCell_ As Range Private endCell_…

Wordから転記した表で小ハマリ……

前にコチラで紹介した、Wordの表からExcelの表にデータを転記するマクロなんですが、またしても軽くハマったので、覚書も兼ねて上げておく。 第1段階 Wordのこんな表から、 Excelのこんな表にデータをマクロで転記した。 使用したコード Option Explicit Su…

自作クラスのプロパティに配列をセットする

VBAを使って、ExcelからLotusNotesのメールを送るマクロ。ずいぶん前に作った素人丸出しのマクロだったから、いっそクラス・モジュールの練習も兼ねて作り直してみようと思い立った。 基本は、上の画像のようなワークシートに必要な値を入れ、B列の番号のと…

VBAで、ExcelからLotusNotesのメールを自動作成する

LotusNotesで送るメールの自動作成 メール作成・送信を自動化するマクロ 職場では、IBMのLotusNotesというグループウェアを使っています。とはいえ、ほとんど活用されていなくて、日常的にはせいぜいメールの送受信ぐらいにしか使われていない。私も、なんと…

年度初日直近の月曜日を割り出すマクロ

ちょい書きマクロです。 年度初日(4月1日)が属する週の月曜日の日付を割り出す必要があって、ちょこちょこっと作ってみた。 ワークシートはこんな感じ。 A3セルにはご覧の通りの書式設定を施しておく、と。 A1セルに、西暦年数を入れたら、A3セル…

「ハナクソ」の除去について

昨日の記事で、Wordの表からExcelに転記すると、ハナクソみたいなやつがテキストの末尾についてくると書いた。 で、そのハナクソを除去するのに、Replace関数を使っていた。 このことについて、Twitterの数少ないVBA関係のフォロワーさんから、 Left関数でや…

Wordの表からの転記でどハマリ……

今日、Wordの表からExcelにデータを転記する簡単なマクロを作ったんですが、最初はうまいこと行っていたのに、ある瞬間から突然 というエラーが出て、どハマリしてしまいました……。 '参照設定でWordのオブジェクトライブラリにチェックを入れています。 Dim …

改ページの設定がカオス……

VBAであまり印刷まわりの処理はしたことがなかったんですが、スケジュール管理アプリみたいなのを自作させられる中で、印刷問題にぶち当たった。 改ページの設定がうまくいかなくて……。 ちょこちょこっと調べてみたら、 FitToPagesTallプロパティ FitToPages…