t-hom’s diary

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

ユーザーフォーム

Excel VBAでスクロール可能なフォームのアイデア

Excel VBAでフォームを作る際に、項目が多くてウインドウの高さに収まりきらないことがある。 そこで今回はスクロールによってフォーム全体をウインドウに収めるアイデアを紹介する。言葉では何がやりたいのか伝わりにくいと思うのでまずは動作イメージから…

VBA 連続して与えられた数の最大値、最小値を求めるクラス

今回は連続して値を投げ込み、その最大値・最小値を求めるクラスを紹介する。 かなりシンプルなのでわざわざ記録しておくこともないかなと迷ったけど、クラス初心者向けにはちょうど良いサンプルになりそうなのでとりあえず。 クラスモジュールのコード クラ…

VBA ユーザーフォームでDual Listboxを作成

今回紹介するのは、複数アイテムの選択でよく見かけるDual Listbox UI。 一応説明しておくと、左のリストからアイテムを選択し、右へ移動させ、最終的に右にあるものが選択したアイテムとして扱われるユーザーインターフェースだ。構造はそれほど難しくない…

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

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

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

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

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

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

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

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

VBA オートシェイプで作った桜のアイコンでユーザーフォームを可愛くデコレーションする

普段からこのブログを読んでくれてる方は、今回のタイトルを見て「ついにthomもVBAのやり過ぎで頭がおかしくなってしまったか」と思われた方もいるかもしれない。可愛くだなんて。30超えたオッサンが何言うとんねん。 さてさて、今回作ったのはこれ。でん! …

VBA デザインしたユーザーフォームを元にNewで複数のフォームインスタンスを作る。

VBAでユーザーフォームはふつう、単一のオブジェクトとして扱う。たとえば以下のようなフォームを作ったとしよう。 オブジェクト名は「frm成績」としたので、このフォームを表示させるコードはこうだ。 Sub hoge() frm成績.Show End Sub この時フォームは、…

VBAを写経しながらタイピング練習するツールを作成

今回作成したのは、以下のようなツール。 ※GIFアニメなので読み込み終わって動き出すまで時間かかるかもしれません。 サンプルコードが表示され、その通りに入力していくだけのシンプルなものであるが、次に入力すべきキーとそれを押す指の名前が赤く表示さ…

VBA フォームのコントロールイベントを共通化する

こちらの記事を読んだところ、同じようなChangeイベントプロシージャがコントロールの数だけできてしまうことにお悩みの様子。 kantoku.hatenablog.com面白そうなので色々調べながらやってみた。参考にしたページはこちら 3.4.3 共通イベント処理クラス - EX…

VBA ユーザーフォームのテキストボックスのサイズを自動で最適化するマクロ

今回の記事は、Excelの表から各列の最大文字数を求め、その文字数に基づいて適切なサイズのテキストボックスを新規フォームに配置するというものである。記事タイトルからすると既存フォームに対して実行するように思われたかもしれない。 なかなかキャッチ…

VBA フォームデザイナーで作ったフォームを基にして、それと同じフォームを作り出すコードを自動生成するマクロ

VBA関連のブログ記事を書いていて困るのが、フォーム関連である。 普通の標準モジュールなら、コピーして実行してもらうだけであるが、フォームを使うコードを紹介する際などは、フォームデザインとコントロール名や配置を書かなくてはならない。たとえば、…

VBA Excelでフォームのタブオーダーを自動設定する方法

次のフォームをご覧いただきたい。 普段からキーボードで入力されている方はご存じだと思うが、ひとつの項目を入力し終わったとき、Tabキーを押すと次のテキストボックスにカーソルが移動する。 実はテキストボックスのTabIndexプロパティには数値が入ってお…

VBA コンボボックスを使いやすくするテクニック

コンボボックスといえば、私がこの世で最も嫌いなユーザーインターフェースの一つである。皆さんも一度くらいこういう使われ方をしているコンボボックスを見たことがあるだろう。 例えば紙のアンケート用紙10,000枚を手渡されて、このインターフェースで都道…

VBA フォームの更新が遅いときはDoEventsを挟んでみる。

今回はボタンを押すとフォームのテキストボックスをクリアするマクロを作成していたのだが、どうもテキストがクリアされるまでが遅く、ハマってしまった。前にも似たような内容でハマったことがあるので、いいかげん忘れないようにここに記しておく。 事象の…

VBA 見栄えの良いユーザーフォームを作るコツ

自分が作ったマクロを他人に使ってもらう場合、「何ができるか」という機能だけでなく、「どのように出来るか」という操作性や、「どう感じるか」という審美性も大事である。素人の手作り感たっぷりのマクロを、本格的なシステムのように感じさせるのはやは…

VBA プログレスバーで体感速度を改善する

手作業をマクロ化することで、何時間もの作業を数秒~数分で終わらせることができる。 この大きな時間削減に比べれば、マクロの実行速度が速いか遅いかなどというのは、些細なことのように思える。しかし、関西人というのはせっかちな生き物で、画面が固まっ…

VBAでTreeViewControlのエクスポート・インポートするとレイアウトが崩れるバグ

treeviewの使い方に関しては、以下のページが詳しいのでそちらを参照されたし。Office TANAKA - Excel VBA Tips[TreeViewコントロールの使い方]さて、このTreeViewであるが、困ったことにフォームのエクスポートをすると壊れてしまい、張り直しが必要である…

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