t-hom’s diary

主にVBAネタを扱っているブログです。

VBA

VBAで花火もどき

VBA

こちらの記事に触発されて、あ、そういえばVBAでもパーティクルうまく使えば花火っぽいことできるかなぁと思ってやってみた。 karaage.hatenadiary.jp 結果。。超絶劣化コピー(間違えた、もはや別物)が爆誕。 実際作って気づいたんだけど、これちゃんとやろ…

VBA × Network学習:プレフィックス長からサブネットマスクに変換する

今回は久々にVBA。 ネットワーク学習で苦手なサブネット回りの計算をしてみようと思う。IPアドレスとサブネットマスクを表記する方法として、プレフィックス長表記(またはCIDR表記)という方法があり、たとえば192.168.1.0/24と書くとIPアドレスが192.168.1.0…

VBA クラスモジュールで工場建造ゲームSatisfactoryのコンベアスプリッター効率検証

最近遊んでいる工場建造ゲーム Satisfactoryで少し疑問に思うことがあったので、今回はVBAを使って検証してみた。 ゲームを題材にしてはいるものの、この記事で伝えたいことはクラスモジュールの有用性なので、ゲーム自体に興味ない方も是非ご一読いただけれ…

VBA クラスモジュールでタートルグラフィックプログラムを作成

今回はExcel VBAのクラスモジュールを使ってタートルグラフィックを描けるオブジェクトを作成してみた。タートルグラフィックはカメを動かして線を引いていくプログラムで、プログラミング初心者の学習等で活用されることも多い。 例えばPythonでは標準装備…

VBA 三角関数を用いて複数のオートシェイプを円周状に並べる

今回は三角関数を用いて複数のオートシェイプを円周状に並べるプログラムを作成したので備忘禄がてらサクッとご紹介。 目的はとあるゲームのためであるが、記事の本筋ではないのでそれは最後に紹介。 作ったもの 以下のように、正方形を円形に3周分並べた。 …

VBA 線が絡まないPERT図(グラフ)の自動レイアウトアルゴリズム

今回は、グラフのレイアウトを自動化するためのアルゴリズムを紹介する。 ここでいうグラフはExcelのグラフ機能のことではなく、数学のグラフ理論の方のグラフ。知らない方は、以下のような作業工程図をイメージしてもらえば良いかと思う。 マインドマップ等…

VBA PERT図もどきを作図して依存関係を考慮したスケジュールを自動生成するツール

VBA

今回は久々にVBAでツールを作ったのでご紹介。 作ったもの プロジェクト管理で使える、スケジューリングツール。タスクリストからタスクの依存関係図(PERT図もどき)を作成して、依存関係を反映させたスケジュールを生成するための補助ツールである。 動機 小…

材料力学:モールの応力円をVBAで検証する。

前回の記事で書いたように、円柱状の棒を垂直に切った断面積Aと、角度θで斜めに切った断面積Bの関係が B = A / cosθとなることが理解できた。 thom.hateblo.jp今回はここから、モールの応力円を理解するためにVBAを書いてみた。 モールの応力円とは、ドイツ…

VBA Excelガントチャート作成マクロ

VBA

今回はVBAでExcelガントチャートを作成するマクロを紹介する。 作成したガントチャート自体はマクロに依存せずExcelの基本機能で動作する。完成すると以下のようなイメージになる。 大元のアイデアはこちらのYouTube動画を参考にしている。 動画だと英語の解…

VBA 数値をふりがなに変換するマクロ

VBA

今回のマクロは、数値をふりがなに変換するマクロの紹介。 例えば1なら「いち」、290なら「に / ひゃく / きゅう / じゅう」という具合だ。これの何が難しいかというと、単純に数値の読み「1~9」と位の読み「じゅう・ひゃく・せん」を組み合わせればできる…

VBA 減量のためのカロリー計算

VBA

ちょっと最近太りぎみなのでそろろそマジでダイエットでもしようかと思い立ったところ、世の中には種々様々なダイエット法が存在していて、一体どうすれば良いのか混乱する。ただ基本的には、シンプルにこういう式で表すことができる。 摂取エネルギー > 消…

VBA 電波の図形を作成するマクロ

VBA

今回は電波の図形を作成するマクロを作った。 といってもサイン派みたいなのではなく、イラストでよくある電波でてますよーというアイコンみたいなもの。 下図のように基本図形の「円弧」を使って作画するのだが、手動でやるとどうにも綺麗にできないのでプ…

VBAで外部ツールを使わずに簡易テスト駆動開発をやってみる。

VBA

最近会社の会議でTDDが話題になった。 TDDとは何か?まずWikipediaを引用してみる。 テスト駆動開発 (てすとくどうかいはつ、test-driven development; TDD) とは、プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これ…

VBA 開発中マクロブックのバックアップを取るマクロ

VBA

開発中のマクロで、こまめに保存しておきたいケースがあったのでコードを書いてみた。 これは開発中のブックに埋め込んで利用する前提。私は標準モジュール「DevTools」に保存して使っている。 Sub BackupFile() 'Microsoft Scripting Runtimeへの参照設定が…

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

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

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

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

VBA 呼び出し履歴を使ったデバッグ

VBA

VBEditorには呼び出し履歴という機能がある。たとえば、プロシージャProcAからプロシージャProcBを呼び出した際にProcBで実行時エラーを吐いて中断したとする。 このとき、中断モードでプロシージャ呼び出しを遡ることができる機能である。本記事ではこれを…

VBA Debug.Print、Debug.Assertの代用クラス案

Debug.Print、Debug.Assertはいずれもデバッグ用の機能なので、リリース版のコードには不要である。 かといって消してしまうと、次にコードを修正するときに面倒なので残しておきたい。そこで代用クラスを作ってみたので紹介。まずクラスモジュールを挿入し…

VBA アサーションチェックとは

最近Twitterで何件か、Debug.Assertについて語られているのを見かけたので乗っかってみる。Debug.Assertの使い方自体は以下で述べたので今回はその意義を中心に説明してみようと思う。 thom.hateblo.jp アサートとは Assertという英単語には、主張する・断言…

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

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

VBA 繰り返される定常業務の工数を見える化するアイデア

VBA

サービス業において、業務工数を見える化するというのはとても難しい。 実績ベースで工数入力をしている職場は多いと思うけど、実際のところその方法は担当者の匙加減で何とでもなってしまう。工数分析をしようと思ったら、工数は理論値で出して、実績との乖…

VBA 特定日付が、第何週目の何曜日なのかを求める関数

VBA

今回は特定日付が、第何週目の何曜日なのかを求める関数を紹介する。 といっても曜日はWeekday関数やFormat関数で簡単に求まるので、今回紹介するのは月のうちの何週目に相当するかを求める関数だ。まず、特定月のうち何週目に当たるのかは、次の関数で求め…

PowerPoint VBA スライドにプロジェクトのスケジュール図をプロットするマクロ

VBA

今回はパワポでよくあるこういうスケジュールスライドを作るVBAコードを紹介。 と言っても現段階では完成度は低いのであまり期待されると困ってしまう。ところどころハードコーディングしているし、クラスモジュール内でSelectionを参照しちゃってるし、変数…

VBA マクロのバージョン番号の付け方

ソフトウェアは一度作って終わりではなく、公開後もバグの修正や機能向上のため修正を繰り返すことになる。 マクロも同様で、通常はバージョン番号をつけて管理したりする。バージョン番号の付け方は特に決まっているわけではないが、一般的には次のルールに…

VBA Win32API GetAsyncKeyStateを使ってマクロ実行時に特定キーが押されているかを検知する。

VBA

今回はWin32APIのGetAsyncKeyStateを使ってマクロ実行時に特定キーが押されているかを検知するコード。 この手の情報は既に沢山出ているが、検索したサイトはいずれも情報が完全ではなかったので少し苦労した。では、早速完成コードを紹介する。 今回はシフ…

VBA フローチャート作成ツールBread Chartに挿入機能検討

VBA

先ほど新版を公開したところだけど、以前から悩んでいた機能がなんとか実現できそうな感じがしてきたので、取り急ぎコードだけここに書いておく。 thom.hateblo.jp 実現したい機能 たとえば下図のようなことをやりたいとする。 しかし、単純に列ごと切り取っ…

VBA フローチャート作成ツール(BreadChart)の更新 Version 1.2

VBA

GitHubで公開しているフローチャート作成ツールをアップデートしたので変更点のご案内。 入手場所 こちらからアクセスしていただき、 github.com以下のDownloadボタンで入手できます。 更新内容 Configシートでシェイプの色を指定できるように変更 Process・…

VBA 狙った範囲だけをAutoFitするマクロ

VBA

以下のような表を作ったとき、普通にオートフィットをかけるとA1セルに入力されたタイトルの幅もカウントされてしまい、幅がおかしくなる。 ↓AutoFit後 今回はこれを何とかするマクロ。元ネタはこちら。こういった表、よく作るんですが、列幅のオートフィッ…

VBA そのマクロ集約、ちょっとまった!

たとえば、とあるデータを次のようなステップで加工しているとする。それぞれのマクロはボタンを押すだけで完了する。 だったら、わざわざ3つもボタンを押させる意味はあるのか。 普通はそう考える。そしてボタンを3つ押す作業を一つのボタンに集約する。こ…

マクロ作成者が覚えておきたい重要な概念「冪等性(べきとうせい)」について

冪等性(べきとうせい)とは、ある操作を1回行っても複数回行っても結果が同じであることをいう概念である。 言葉の響きは難しいが、これはプログラマーなら何度も遭遇するシチュエーションなので、是非とも覚えておきたい。たとえばExcelマクロにおいて、以下…

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