2018-01-01から1年間の記事一覧

Wordの「スタイル」をVBAで操作する(2) (Word)

「標準」スタイルのフォントを変える 前回 akashi-keirin.hatenablog.com のつづき。 ウチの環境では、Document.Styles(194)で「標準」スタイルにアクセスできるのだった。 Style.Fontオブジェクト MSDN Dev Centerの「Style Members (Word)」によると、フォ…

Wordの「スタイル」をVBAで操作する(Word)

Wordの「スタイル」をVBAで操作する ウチの職場には、書類の英数字は等幅という謎ルールがある。 まあ、位置が揃わないのが嫌なのはなんとなく分かる。 ただ、「スタイル」という機能を知らずにWordを使っている人がほとんど(目測で9割以上)なので、 文書…

VirtualTableクラスへのメソッドの追加[getFilteredArrayメソッド]

VirtualTableクラス続報 akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com 指定した条件を満たす配列を返すメソッド 任意の列の値が指定した値であるレコードだけを格納した配列を返すメソッドを作ってみた。 ひとまずコードを載っけておく。 get…

Worksheet_Changeイベントの引数Target(Excel)

Worksheet_Changeイベントの引数Target Worksheet_Changeイベントについては、イベントを起こすセル範囲を限定するのによく使う。 引数「Target」に関する注意事項 Worksheet_Changeイベントが発生したときに、プロシージャに渡される引数Targetについて、ち…

ExcelVBAでWordドキュメントを軽量PDF化する

ExcelでWordドキュメントを軽量PDF化する ExcelでWordドキュメントのファイル名の一覧表を作って、必要なものだけPDF化する、というのがお題。 ExportAsFixedFormatメソッドを使うやつは既に作成済みなので、PDF化部分を差し替えるのが目標。 ドキュメントを…

プリンタ名を調べる

プリンタ名を取得する akashi-keirin.hatenablog.com コチラをうpしたところ、Twitterで次のサイト(『パソコンの小技・備忘録(ExcelのVBAで、パソコンのプリンタ一覧を取得したい。)』)をご紹介いただいた。 たぶん、 プリンタ名を比較するときにApplic…

ワークシートの軽量PDF化(Excel)

アクティブシートのPDF化 akashi-keirin.hatenablog.com このときにも書いたように、アクティブシートをPDF化するときにはWorksheet.ExportAsFixedFormatメソッドを使う。 ただ、この場合、やたらファイルサイズがデカくなってしまうのが悩みのタネだった。…

メソッド呼び出し時にモジュール名の記述を強制する

画期的なアイディア(嘘) akashi-keirin.hatenablog.com このときに、 モジュール名を指定しないと使えない、とかだったら便利だと思ったんだけどなあ。 とか書いていたんだが、画期的な解決法が思い浮かんだので記しておく。 同一メソッドを持つダミーモジ…

列挙体にはメンバを何個列挙できるか

列挙体はいくつまで列挙できるか 列挙体のメンバ数の最大って、いくつなのだろうか。 ちょっと調べてみた。 Integer型の最大値 Integer型の最大値は32767。へえ。意外と小さいな。 標準モジュールの宣言セクションに次のように書いてみる。 Public Enum MaxS…

「名前の定義」再入門[Excel]

名前の定義 セル範囲に名前を付ける方法 akashi-keirin.hatenablog.com コチラにExcelVBAer (id:x1xy2xyz3) さんからコメントをいただいた。その中に ①名前の定義で以下の2つを定義 ActCell = INDIRECT(ADDRESS(ROW(),COLUMN())) UpCell = OFFSET(ActCell,-…

Range.BorderAroundメソッド[Excel]~車輪の再発明

車輪の再発明 Range.BorderAroundメソッド 前回の akashi-keirin.hatenablog.com に、 ぴぼったー さんからコメントをいただいた。曰く、 つ borderaroundメソッド なんと、外枠線を引くメソッドがあったのだった。 またしても車輪の再発明をしてしまったの…

セル範囲の外枠に罫線を引く[Excel]

セル範囲の外枠罫線 VBAでセルの罫線の設定なんてしたことがなかったので知らなかったが、セル範囲の外枠だけに罫線を設定するのは非常にメンドクサイのだった。 セルの罫線はRangeオブジェクト配下のBordersコレクションで管理されている。 で、罫線の位置…

ナゾの書式設定文字列(Range.NumberFormatLocalプロパティ)

ナゾの書式設定文字列「;;;」 前回の akashi-keirin.hatenablog.com こちらに、 ぴぼったー さんという方からコメントをいただいた。曰く、 本日のサンプルのパターン、 (要望)列方向に連続する場合に表記を省略する (実装)セルの結合を行う (Excel屋の…

同じ値の連続するセルを結合する[Excel](Range.Mergeメソッド)

同じ値の連続するセルを結合する Excelは、表計算ソフトとしてよりも、方眼紙として使われているケースが多いと思う。 そこで、大活躍するのが(w)セルの結合機能だと思う。 多くのExcel使いは、データを蓄積するためのシートで見栄えをよくするためにセル…

isAutoFilteredメソッドの修正

isAutoFilteredメソッドの欠陥 isAutoFilteredメソッドとは 自作のFunction。 akashi-keirin.hatenablog.com このときに作ったもの。 こんなふうにフィルターで絞り込まれていないときにFalseを返す。 イミディエイト・ウインドウに ?isAutoFiltered(Sheet1)…

半角カタカナを全角ひらがなに変換する(StrConv関数)

半角カタカナと戦う(StrConv関数) 名簿のふりがな欄 いろんな名簿を作る必要があって、着手してから気がついた。 名簿のふりがな欄、ふりがなの付け方めちゃくちゃやんけ! ある名簿は全角ひらがな。またある名簿は半角カタカナ。 んで、StrConv関数を使っ…

Document_Closeイベントで差込データソースとの接続を切断する

Document_Closeイベントの挙動 差し込み印刷の設定をしているドキュメントは、一旦閉じると、次回起動時に自動的に前回接続していたデータソースに接続しようとする。 これはこれで親切機能なのだが、何も知らない人が差し込み設定をしたドキュメントを別の…

「標準モジュール」とは何ものなのか

「標準モジュール」とは何ものなのか 割と最近まで、「標準モジュール」というのは、単に【コードを書く場所】ぐらいの雑なとらえ方で済ませていた。 しかし、「クラスモジュール」とか、「フォームモジュール」、「シートモジュール」、「ThisWorkbookモジ…

配列変数を値渡しにする

値渡しの配列引数 配列引数を値渡しにする方法 akashi-keirin.hatenablog.com このときにも書いたとおり、通常、プロシージャの引数に配列を渡すとき、 Public Sub hogehoge(ByVal foo() As String) みたいにすると、 こんなエラーが出る。 ところが、VBA四…

VirtualTableクラスは今

VirtualTableクラスは今 VirtualTableクラスの現状 VLOOKUPにせよ、INDEX & MATCHの合わせ技にせよ、セルに数式がずらずらと書き込まれているというのはちょっとイヤなので、表引きは極力VBAでやっている。 んで、VLOOKUPみたいな働きを持ったクラスを作った…

配列を引数にするときの注意

配列を引数にするときの注意事項 配列引数はByRefでなければなりません SubとかFunctionの引数に配列を使用しようとしたとき、「ByVal」キーワードを付けると、 こんなふうにコンパイル・エラーになる。 従って、引数を配列にしたときには必然的に参照渡しに…

文字列を比較演算子で比較するとどうなるか

文字列を比較演算子で比較する 文字列を比較演算子で比較した結果 何の気なしに、イミディエイトに次のように打ち込んで[Enter]してみた。 ?"ち~んw" < "た~んw" すると、 このように、Falseが返った。 んで、 ?"ち~んw" < "つ~んw" と入力して[Ente…

Not演算子は何をしているのか

Not演算子は何をしているのか Boolean型の式の判定 もともと、 If isHoge = True Then fooBar みたいな書き方をする方だった。 If isHoge Then fooBar みたいな書き方が、何か大切なことを省略しているような気がしてイヤだったのだ。 ところが、あるときtho…

VBAで擬似continueを実現する(失敗)

擬似continue 「VBAのイマイチなところ選手権」でもやったら、かなり上位に食い込むだろうと思うのが、 Forループでcontinueが使えない ことだと思う。 breakに相当する命令があるだけに、なおのこと歯痒いことだろう。 テスト用コード リスト1 標準モジュ…

SUM関数の謎[Excel]

SUM関数のナゾ akashi-keirin.hatenablog.com に、id:mmYYmmdd さん(勝手に脳内で「ヤマダさん」と呼んでいるw)からコメントをいただいた。曰く、 =SUM(1/COUNTIF(範囲,範囲)) だと求める値にならないけど、中身の「1/COUNTIF(範囲,範囲)」をF9で確定して…

値の重複を調べる[Excel]

値の重複の有無をチェックする(マクロ無し縛り) 久しぶりにマクロ無し縛りでExcelのシートを作ることになり、半分忘れかけていたことがあったので、備忘録的に記しておく。 1億2000万余名マイナス1億2000万名の非常に数少ないこのブログの読者の方ならお…

コメントの表示・非表示を切り替える[Excel]

コメントの表示・非表示を切り替える コメントの表示・非表示を切り替えるマクロ 今まであまりコメントをVBAで操るということをしたことがなかったのだが、仕事でマクロ無し縛りで結構ややこしい数式を組み込んだワークシートを作る必要があり、 書いた自分…

セル範囲の伸び縮みに追随して名前を定義する[Excel](2)

セル範囲の伸び縮みに追随して名前を定義するマクロの改良 改良ポイント 前回 akashi-keirin.hatenablog.com のリスト1には問題があった。すなわち、 対象のセル範囲から値を全消去したら、名前の定義されたセル範囲が元のまま残る 対象のセル範囲(を含む…

指定した名前のセル範囲が参照切れだったら削除する(Excel)

定義された名前を消す そういえば、定義された名前をVBAから消すのって、どうしたらいいんだろう? そう思ってちょっと調べてみた。 WorkbookオブジェクトのNamesプロパティ コチラによると 指定されたブックのすべての名前 (すべてのワークシートの名前を含…

セル範囲の伸び縮みに追随して名前を定義する[Excel]

セル範囲の伸び縮みに追随して名前を定義する セル範囲に名前を定義しておくと、ワークシート関数の引数にするのにも、VBAでRangeオブジェクトを参照する際にも便利なことがある。 ただ、名前を付けて管理したいセル範囲に伸び縮みがあるような場合に、その…