t-hom’s diary

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

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

VBA 変数とメモリの関係 ~ 値渡しと参照渡しをメモリの動きから理解する

今回は変数とメモリの関係について書こうと思う。 ちょっと「記号表」とかいろいろ難しいモノが登場するのだが、ちょっとわかりやすく説明するためにVBAを擬人化しておこうと思う。 コンパイラー君とインタープリターさんの紹介 まずあなたがVBAコードを書く…

VBA シートと不可分のマクロはシートモジュールに書くとスッキリする

VBAの書籍を見ていると、だいたい標準モジュールにマクロを書くように指示されている。マクロの記録で保存されるのが標準モジュールということもその理由かもしれないし、そもそも「標準」という名前が「ふつうはここに書け」という指示に見えるのかもしれな…

VBAの特徴について ~歴史、利用者層、サポートするパラダイムと型付けの作法など

これまでVBAについて色々記事を書いてきたけれど、VBAってそもそもどんな言語なのか、自分が学んできたことを整理する意味でひととおり書いておこうと思う。 VBAの歴史をざっくりと説明 VBAの祖先はアメリカのダートマス大学で作られたBASICという教育用言語…

VBA クラスという用語は「類(るい・たぐい)」を指す言葉である。

これまでクラスモジュールについて扱ってきたけど、言葉の意味を知らないままクラスクラス言っててもなかなかその本質的なイメージをつかむことは難しいと思う。やはり人間、なじみのない言葉で何かを覚えようというのは無理がある。そこで今回はVBAは一旦脇…

VBA モデル化の概念を理解すると、クラスモジュールの使い方が分かる

クラスモジュールを使いこなすためには、モデル化という概念をおさえておくと分かりやすい。しかしいきなりモデル化といわれても何のことかわからないと思うので、順を追って説明していく。まずプログラミングにおけるモデル化の話をする前に、モデルという…

VBA オブジェクト変数の宣言時にNewすると何がまずいのか

オブジェクト変数の宣言と使用については、以下の2パターンが存在する。■パターン1 宣言と同時にNewしてしまう方法 Dim C As New Collection■パターン2 宣言とオブジェクトのSetを分ける方法 Dim C As Collection Set C = New Collection私はこれまで大体の…

VBA 脱初心者を目指す ~ Functionを使いこなすにはHowではなく、Whatに注目する

VBA

VBAではFunctionプロシージャを使いこなせるようになったら、中級の域に達したと言っていいと思う。あくまで個人的な意見であるが。さて、Functionプロシージャの仕組み自体は、それほど難しいものではない。ただ初心者の方と話をしていると、Functionを使う…

Excel TRIM関数で消えない謎の半角スペースをVBAでなんとかする

VBA

先日、仕事で受け取ったExcelデータにTRIM関数で除去できない謎の半角スペースが混じっていた。その現象を再現したのがこちら。 A1セルとA2セルは全く同じに見えるが、A1セルの1文字目はトリムできない謎のスペース。A2セルの方は通常のスペースである。この…

amazonアソシエイトのウィジェットがChromeで自動再生されなくなったのでランダムに商品を並べる機能をJavaScriptで自作する。

このブログはamazonアソシエイトに参加しており、その広告収益を運営費に充てている。 先日までこのブログのサイドバーにはA8.netの固定バナーを表示していたが、まったく収益になってなかったので、そちらを削除して空いたスペースにおススメの小説を掲載す…

VBA 配列とコレクションの違いをメモリ上のデータ構造から理解する

VBAでは複数データを格納できるデータ型として、配列とコレクションがある。 それぞれ一長一短あり、どちらが優れているというものではないのだが、どちらかといえばデータの追加・削除が簡単に行えるコレクションのほうが使い勝手は良いかもしれない。さて…

VBA 新しい色の指定方法 ~XlRgbColor定数

VBA

VBAで使える色定数は以下の8種類がある。 vbBlack vbBlue vbCyan vbGreen vbMagenta vbRed vbWhite vbYellow 私も今までこれ以外使ったことが無かったが、先日オブジェクトブラウザを探索していたらXlRgbColor列挙型なるものを発見した。rgbAliceBlueとか、r…

VBA 初学者こそ、なんでもVBAでやるべし

Excelには高度な機能が備わっており、VBAを使わなくても例えば関数やピボットテーブルなどの機能で問題が解決してしまうことも多い。 その意味で、VBAでなんでもやろうとするのは効率が悪い。 でも、ことVBAの学習においては、それらExcelの機能を知っている…

VBA 業務フローチャートをマクロで簡単に作成する

VBA

フローチャートはプログラミングでよく用いられていたが、最近は専ら業務の流れを説明する図として利用されている。 特に部門をまたがる業務の全体像を把握するには便利である。しかし、図なのでとにかく作成が面倒くさい。 どうしてもボックスのサイズをそ…

VBA Withを使ったコードをWith無しのコードに変換するマクロ ~ スタックの応用 ~

今回は、Withを使ったコードをWith無しのコードに変換するマクロを作ってみる。 何の役に立つんだというツッコミはなしで。目次 マクロの概要 実現方法を検討する 入れ子になったWithの扱い方 VBAでスタックを実装 スタックを使ったWithを外すコード 課題 マ…

プログラミングだって立派な趣味だ

家でプログラムを書いているという話をすると、仕事中毒だと言われることがある。わざわざ休日に家で仕事をしているつまらない奴だと思われているようで癪である。でもプログラミングだって立派な趣味だ。絵を描いたり、作曲したりするのと同じ、創作活動だ…

VBA インターフェースを活用してコードの抽象度を上げるテクニック

以下のような注文票にマクロでデータを記入することを考えてみる。 人間が記入する場合は、次のように考えながら記入していくだろう。 「注文票の、ひとつ目の商品名は"パソコン"で、単価は10万円、個数は40個。二つ目の商品は"複合機"で、単価は150万円、個…

VBA Rangeでセル範囲に付けた名前を参照

VBA

Excelでは、セルに任意の名前を付けることができる。 任意のセルを選択した状態で、数式バーの左にある名前ボックスに名前を入れてEnterで確定させるだけだ。 セル範囲に対しても同様の操作ができる。 付けた名前は数式で参照させることができる。 行や列を…

執筆環境のグレードアップ

パームレスト 私は普段からプログラミングの学習やブログの執筆などでキーボードを良く使う。 それで結構いい値段のキーボードを使っているのだが、パソコン専用のローデスクを使うようになってから今一つ入力しづらい。 スライド式のキーボードテーブルは、…

VBA なぜ引数が一つのときは、カッコを付けても付けなくてもプロシージャを呼び出せるのか

初心者の方はプロシージャ呼び出しの時にカッコを付けるかどうか迷う方もいると思う。基本ルールは、Callを書く場合と、戻り値を利用する場合にカッコを付け、それ以外では付けてはいけないである。以下のように、不要なカッコを付けると、コンパイラに叱ら…

VBA Cellsの正体は、全セルを包むRangeオブジェクトである

セルを行・列の数値で指定するCellsはRangeと並んで基礎中の基礎であるが、その正体を知る者は少ない。まあ別に知ったところで使い方が変わるわけではないのだが、知っておいて損になるものではないので紹介しよう。今回も評価という用語を用いるので、意味…

VBA Sheetsの後にドットを入れても入力候補の自動補完がされない理由

'============▼2016/5/31追記▼============Worksheetsオブジェクトは存在しないと書きましたが、Microsoft MVPの伊藤さんから誤りを指摘いただいたので修正しました。伊藤さん、ありがとうございます。【参考】 http://www.relief.jp/itnote/archives/excel-…

VBA 式と式の評価 ~数式だけが式じゃない~

プログラミングの世界では式の評価という言い回しが登場する。 VBAの書籍では見かけない言い回しであるが、関数やオブジェクトの動作について説明・理解するのに便利な概念なので覚えておくと良い。式といえばまず数式をイメージする方が多いだろう。あの忌…

コスパが決め手のSCOTCH GRAIN ~8年履いた革靴、まだまだ現役。

3万円の靴…というと、「高っ」という反応が殆どだ。 ところが、トータルのコスパを考えるとそうでもない。ビジネスシューズは安いものなら3千円くらいから売っている。高くても1~2万くらいのものを買う人が多いと思う(知人がたまたまそうなのかもしれないが…

VBA マージソートの実装と図解

VBA

前回はトランプを使ってマージソートを説明した。 thom.hateblo.jp今回は実際にVBAでマージソートを書いてみる。目次 準備 分割するコード マージするコード 完成コードの全体 ソートの呼び出しコード マージソート本体 ソートのテストコード マージソートの…

トランプを使ってマージソートを理解する。

これまでアルゴリズムに強くなりたいと思いながら、有名どころは二分探索、バブルソートくらいしか書けなかった。 そこで、マージソートにチャレンジしようと思ったのだがなかなかうまくいかず、今日ようやく動くものができた。まぁネットで探せばマージソー…

自炊なし、昼は外食で1日の食費を1,500円に抑える

家計簿をつけ始めてから節約を意識するようになった。特に食費。これまでは朝食300~460円、昼食800円、夕食1,000円(酒・スナック菓子など込み)に加え、昼間自販機で5~6本のコーヒーという生活をしてたので、1日あたり2,500円超の食費がかかっていた計算。…

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

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

Excelでクレジットカード対応の家計簿を作る

家計簿は節約の基本であるが、クレジットカードを使うと家計簿をつけるのが難しい。 普通の家計簿では収支の記帳のみで、クレジットカードのような「負債」をうまく扱えない為だ。 そこで、複式簿記を使いたくなる。いわゆる会計ソフトの類。しかし個人で使…

WordPressレッスンブックが楽しい

最近メインサイトの方をさっぱり更新していない。ブログで楽々更新できるインターフェースに慣れてしまうと、手打ちのhtmlはなかなか面倒くさい。作成当初は、正しいhtmlでサイトを構築するというモチベーションがあった。単に何かを作るだけではなく、その…

VBA 他人の書いたコードを読むには、プロシージャの呼び出しマップを作ってみる。

VBA

他人の書いたコードを読むのはなかなか難しい。 今回はプロシージャやモジュールが分かれているプログラムを読むときに使える手法「呼び出しマップ」を紹介する。「呼び出しマップ」というのは私が勝手にそう呼んでいるだけなのだが、どのプロシージャがどの…

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