t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

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

ひと足先にPythonでCOMを利用したExcel操作をやってみる

MicrosoftがExcelにPythonを搭載することを真剣に検討しているらしい。 www.itmedia.co.jpまだ検討の段階なので、どんな実装になるかは明らかにされていないが、基本的にはVBAと同じくCOMの操作になるんじゃないかと思う。今回はひと足先に、PythonでCOMを利…

Access VBAでフォームのコントロールイベント共通化

前回紹介したExcel VBAのユーザーフォームに動的メニューを追加する方法を紹介した。 thom.hateblo.jpただ、実は作りたかったのはAccessで、連票フォームのフッター領域にそれを配置したかったのだ。 慣れないAccessと格闘する前にまずExcelフォームでプロト…

VBA クラスモジュールを使ってフォームに動的なメニューを作る

今回作成するのはボタンを動的に切り替えられるメニューである。これだけでは意味が分からないと思うので動作サンプルを紹介する。 通常は1つのボタンに1つの処理なので、5つボタンがあれば5つしか処理は書けないが、このメニューは▲と▼で動的にボタンを切り…

VBA フォームのボタンの反応が遅い理由と対策

今回はVBAでユーザーフォームに配置したボタンの反応が遅い理由とその対策について紹介する。 検証のため、以下のようなカウンターフォームを作った。 作成方法 フォームに配置した各オブジェクトは以下のように名前を変更した。 コードは以下のとおり。 Pri…

VBA クラスモジュールでExcelのテーブル(ListObject)を操作する

今回はVBAでちょっと扱いにくいExcelのテーブル(ListObject)をクラスモジュールで包んで簡単に操作できるようにするコードを紹介。 作り方 まずVBEで対象のブックを選択し、挿入メニューからクラスモジュールを挿入する。 挿入されたクラスモジュール(Class1…

VBA クラスモジュールで今月末・来月初などの日付計算を楽に扱う

今日はVBAで日付を扱う案件があった。 とりいそぎ、日付関連の関数で済ませたけれど、オブジェクトがあると楽だなと思ったのでクラスモジュールを作ってみた。 作り方 まずはクラスモジュールを挿入し、プロパティウインドウから名前をDateObjectに変えてお…

VBAでランダムかつセキュリティポリシーを満たす8桁のパスワードを生成する

VBA

今回はパスワードを生成するコードを紹介する。 過去すでに書いた気がしてたのだけど、↓と勘違いしてた。 thom.hateblo.jp 簡易版のプログラム さて、ただランダムなパスワードを作るだけなら簡単だ。 さっそくコードを書いてみた。 Sub ランダムパスワード…

VBAで関数型プログラマーの思考法を学ぶ

これは私に関数型言語の素晴らしさを教えてくれた本である。プログラミングGauche作者:KahuaプロジェクトオライリージャパンAmazonプログラミングGauche(ゴーシュ)。一度売ってしまったのだけど、どうしてもその本のコラム「Lisp脳」の謎に迫る-Schemeプロ…

ExcelでネストしたIf関数をVBAでインデントして分析しやすくする

VBA

ExcelでIF関数を使うと条件によっていろいろと処理を変えることができる。 複雑な条件はIF関数を組み合わせることで実現できるが、やりすぎるとすごく見づらい。たとえば、以下のような式を作ってみた。 =IF(条件,IF(条件,IF(条件,TRUE,FALSE),IF(条件,IF(条…

Prism.jsの紹介と日本語文字列が認識されない件の対応方法

目次 Prism.js(プリズム)とは Prismの入手 Prismの使い方 日本語文字列の問題 Prism.jsを日本語文字列に対応させる方法 7/30 追記:コード中のコメントもおかしいのでPrism.jsを再修正 Prism.js(プリズム)とは Prism.jsとはWebサイトやブログにプログラムの…

Wordでメンテナンス性の高いドキュメントを作る鍵はスタイルと描画キャンバス

前回、業務マニュアルを作る際に重要な3つのポイント(指示の明確さ、メンテナンス性、読みやすさ)について書いた。 thom.hateblo.jp今回はこのうち、メンテナンス性について、具体的にWordをどう使えばメンテナンス性の良いドキュメントができるのかを紹介…

業務マニュアルを作る際に重要な3つのポイント

今回は業務マニュアルを作る際に重要な3つのポイントを紹介する。私が重要だと思うポイントは、指示の明確さ、メンテナンス性、読みやすさの3点である。 以下にそれぞれ詳しく解説する。 指示の明確さ 業務マニュアルは作業者に対し、何をすればよいのか明確…

VBAとマクロの違い ~ マクロの語源はギリシャ語

VBA

今回はVBAとマクロがどう違うのか、雑学的なお話。よくある勘違いが以下の2つ。 マクロの記録によって作られたものがマクロだ。 マクロとVBAは同じものだ。 どちらも間違っている。巷で正確な解説を見かけないのはたぶん、厳密に話し出すと長くなるからだろ…

Javaでテキストファイルから特定文字列を含む行を除いてファイル出力

今回はJavaでテキストファイルから特定文字列を含む行を除外してファイル出力するコードを作ったので紹介。 コマンドライン引数で複数のキーワードを指定して除外できるようにした。 作成の経緯 このブログのアクセスログを分析する際、いつもダウンロードし…

VBA 名前付き引数の正体はプロシージャの仮引数の変数名

VBA

今回は名前付き引数についてその概念と仕組みを紹介する。 名前付き引数はVBAにおいて基本的な機能であり、マクロの記録で作ったコードでよく使われているが、正確に理解している方は少ないように見受けられる。かくいう私も初めて名前付き引数が何かを理解…

VBA テキストボックスで複数行表示させる場合の最適なHeightは連立方程式で求まる

前回、テキストボックスの最適なフォントサイズについて書いた。 thom.hateblo.jpそこでテキストボックスのHeightプロパティを21に設定したが、今回はその根拠と複数行書ける場合の最適なHeight値の求め方を紹介する。 Meiryo UI 12ポイントのときのテキスト…

VBA テキストボックスの最適なフォントサイズは12ポイント

VBAでユーザーフォームをデザインする際、フォントサイズに気を配っているだろうか。まず、ふつうにテキストボックスを配置するとこのような外観になる。 フォントはMS UI Gothicの9ポイント。これ、ブログの画像だと読みにくくないけれど、実際にフォームを…

VBAからVBScriptへマクロを移植する方法

今回はVBScriptをやってみたいVBA使いの方へ、VBAで書いたコードをVBSに移植する方法を説明しようと思う。 特にあまり知られていないであろう最初から移植性を意識したコードを書く方法について紹介する。執筆のきっかけになったのはこちらの記事。 chemiphy…

VBA Boolean型をTrueやFalseと比較することの是非について

If文の条件式でBoolean型をTrueやFalseと比較することは昔から論争の種だった。たとえば以下のようなIf文。 If IsNumeric(x) = True Then If IsDate(x) = False Then わざわざTrueやFalseと比較しなくても、このように書くことができる。 If IsNumeric(x) Th…

VBAでアホな実験 ~ Not演算子は何個連続で使えるか

二重否定文…それは時に控えめな肯定を、時に強い肯定を生み出す日本語のテクニックである。控えめな肯定の例「できなくもない」 強い肯定の例「やらねばならない」なんてことを考えてたら、そういやNotって二個以上つなげても大丈夫なんかしらと、アホなこと…

VBA クラスモジュールでRangeの仕組みを説明する

昨日公開した以下の記事について、比喩ではちょっと難しいという声をいただいたので、今回はクラスモジュールを使って私が想像するRangeの仕組みを具体的なコードで解説しようと思う。 thom.hateblo.jpまずはSheetの模擬クラスとRangeの模擬クラスを用意する…

そんなに沢山のソートアルゴリズム、意味あるの?って方へ

みなさん本日は情報処理試験お疲れ様でした。 (私は今回申し込みすらしてないけど)本当は試験前にこの記事を書きたかったんだけど文章悩んでるうちに試験が終わってしまった。まぁ今回ダメだった方、決意を新たにした方もいると思うので一応公開するか。さ…

VBA Rangeオブジェクトはシートを操作するエージェント

VBAで扱える代表的なExcelのオブジェクトにWorkbook、Worksheet、Rangeなどがある。 ひとつのブックにはひとつのWorkbookオブジェクトが対応している。 ひとつのシートにはひとつのWorksheetオブジェクトが対応している。 ではひとつのセルに対応する固有の…

オブジェクト指向における「メッセージ」とは何か

現在主に認知されているオブジェクト指向 私がオブジェクト指向というとき、それは基本的にC++から始まりJavaに受け継がれた、あのオブジェクト指向を指す。つまり、カプセル化、継承、多態性で説明されるアレだ。VBAは継承、多態性のサポートがほとんど無い…

オブジェクト指向の本質はカプセル化 ~継承も多態性も脇役にすぎない

ずいぶんと挑発的なタイトルをつけてしまったが、継承や多態性が重要でないなどというつもりはない。 ただオブジェクト指向の本質はどれかと言われると、やっぱりカプセル化だろうなと。 オブジェクト指向とは オブジェクト指向とは、データや機能をまとめて…

VBA Application.OnKeyを使い、F1キーで任意のアクティブブックのメインプロシージャを実行させる

VBA

今回の記事はF1キーを押したときに、今使用しているブックによって実行するプロシージャを分けるというもの。執筆のきっかけになったのはこちらの記事のコメント欄のやりとり。 chemiphys.hateblo.jp OnKeyマクロを記載したブックを閉じた後,そのショートカ…

VBA ヒープソートを実装 ~関数を沢山作って複雑な問題に対処する

VBA

私は長らくヒープソートというものが理解できなかったのだが、ついに今日、なんとか動くところまで実装できたので紹介しようと思う。ヒープソートを理解しようと思ったら、実装の前にまずヒープのノードが入れ替わるイメージを理解しておく必要がある。 そこ…

VBA Collectionを使って数値をランダムに並び替える

VBA

今回はn個の数値をランダムに並び替えるアルゴリズム。 元ネタはこちらの記事。 chemiphys.hateblo.jp上記はRnd関数のランダム性を利用したアルゴリズムで、出てきたSingle値の順位を付けることで結果的にその順位が重複のないランダムな数列になるというも…

VBA マクロの高速化のためのApplication設定をクラスモジュールにまとめる

今回はちょっと変わったクラスモジュールのテクニック案。 異端扱いされそうな気がするので、思いついた私自身、採用には慎重なのだけれど、アイデアとしては面白いと思ったので備忘録として公開してしまうことにした。さて、過去にPropertyプロシージャを使…

VBA マクロが遅い・速いという議論は、要件ありきの話

VBAのコードについて、よく、この手法は遅いから使うなという話を聞く。高速化万歳! またはその逆で、高速化のためにわかりやすさを犠牲にするなどナンセンスだ!という話も聞く。この記事では前者を「$バンザイ」、後者を「$ナンセンス」と呼ぼう。$バンザ…

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。