t-hom’s diary

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

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

なぜ難しい言葉を覚えなければならないのか。

最近購読しはじめたブログに、こんな記事が掲載された。 risa.hatenablog.com素晴らしい紹介記事だ。早速Kindle版書籍を購入した。さて、ちょっと上の記事とは趣旨は違うかもしれないけれど、私も「語彙力」について温めていたネタがあるので、いい機会だか…

Android開発環境構築で丸一日ハマった ~ Android Virtual Device(AVD)のディスプレイがエミュレーターに収まらない。

表記の件、こういうことである。これはAndroid Emulatorの起動画面である。androidと書かれているのだが、aとdが隠れてしまっている。ナンダコレハ。今回使用したインストーラーは「android-studio-bundle-141.2288178-windows.exe」。 本日時点で公式から取…

なぜ32ビット版Windowsのパソコンに4GB超のメモリを積んでも意味がないのか。

私は以前、仕事で某社の社内ヘルプデスクにいたのだが、そこではパソコンの調達も担当していた。社内で選定したパソコンのカタログから商品を選んでもらうのだが、ときどき32ビットWindowsに6GBとか8GBのメモリを積もうとする方がいらっしゃった。とにかくメ…

ブログ記事の概要、編集してますか?

先日書いた記事がGoogleで検索できるか試していたところ、場合によっては誤解されそうな概要が表示されていることに気付いた。上の記事では、VBAでシェイプの重なりを判定する方法について述べているが、概要だけ見ると「なんだ、結局できないという話か」と…

VBA ReDimはなぜ最後の次元だけしか拡張できないのか。

多次元の動的配列を作ることがある。コードはこういう感じだ。 Dim Arr() As Byte ReDim Arr(1 To 3, 1 To 3) 最初のReDimは拡張というよりは初期化なので、これはうまくいく。3×3のサイズの配列なので、イメージとしてはこんな感じだろうか。 ところでこの…

VBA クラスモジュールを使用し、シェイプ同士が重なっているかどうかを判定する方法

今回の記事では、VBAでシート上のシェイプをすべて走査してどのシェイプと重なっているかを表示させるところまでを紹介する。 具体的なグループ化については今のところまだ完成していないので取り扱わないが、今回の記事がスラスラ理解できるレベルの方なら…

VBA 他人のコードはどうせ誰も読めないという前提に立って考える

この記事は事務員・運用担当者など、非開発職の方々を対象としている。 プログラマーとして雇われ、業務でプログラムを作成している場合はここに書いていることは当てはまらないので注意してほしい。さて、VBAでは、IfやForなどの基本的な構文と、RangeやWor…

VBA Set Obj = Nothing は必要か

オブジェクト変数を使い終わった後、必ず変数にNothingをセットしているコードが多いが、実はあれは別に無くても良い。Nothingを代入することでオブジェクトが破棄されると思っている方も多いと思うが、厳密には違う。オブジェクトの破棄のタイミングは、オ…

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

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

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

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

VBA クラスモジュールの使いどころ ~ Excelの一覧表とクラスモジュールは相性がいい

VBAには標準モジュールのほかに、クラスモジュールというものがある。 クラスモジュールについて調べようと思っても日本の書籍ではあまりきちんと解説されておらず、主にネットから情報を得ることになる。 使い方についてはまだ情報が存在するのだが、「使い…

VBA 巨大な表を配列に入れるとメモリはどうなるのかという心配について

以前このブログでも紹介したが、セル範囲と2次元配列は相互に変換できる。thom.hateblo.jpたとえばこんな風に。 Sub セルから配列へ() Dim Arr() As Variant Arr = Range("A1:Z100") End Sub Sub 配列からセルへ() Dim Arr(1 To 100, 1 To 26) As Variant Ra…

VBA Newキーワードの使い方は2種類だけではない。 ~ With New Objectという使い方。

オブジェクトを扱うときに登場するNewキーワード。おそらく以下の2種類の使い方が一般的かと思う。まずは、変数へ新規インスタンスをセットする際に使うNew。 (以下のObjectには任意のオブジェクトが入る。例:Collection) Dim obj As Object Set obj = New O…

名著「ピープルウェア」完読 ~ 高品質がコスト低減をもたらす

ソフトウェア開発の名著「ピープルウェア」を完読した。ピープルウエア 第3版作者: トム・デマルコ,ティモシー・リスター,松原友夫,山浦恒央出版社/メーカー: 日経BP社発売日: 2013/12/18メディア: 単行本(ソフトカバー)この商品を含むブログ (10件) を見…

VBA 開きすぎたコードウインドウを一括で閉じるマクロ

VBA

VBAでコーディングしていると、いつのまにか大量のコードウインドウを開いている。 普段最大化して使っている分には困らないのだが、ときどきモジュールを並べて表示させたいときがある。 一応VBEのメニューにはウインドウを整列させるコマンドがあるのだが…

いろんな使われ方をする「バイナリー」という言葉の本質を探る

コンピューター用語としてよく登場するバイナリー。実行ファイル(exe)のことをバイナリ―と呼んだり、二分探索をバイナリ―サーチと呼んだり、2進数のことをバイナリ―と呼んだり、VBAでテキストの大文字小文字を区別して比較するときのモードがバイナリー比較…

VBA 線形探索(リニアサーチ)と二分探索(バイナリーサーチ)

VBA

Excelのある列からVBAで値を探す方法はいくつかある。今回はこのようにExcelの全行に値を敷き詰めて、それを検索してみようと思う。 探すもなにも、そのまま行番号なのだが、VBAでの検索用サンプルとして大量の値が欲しかったのでこれで妥協することにした。…

VBA Excelで作られたマニュアルをWordに変換する補助ツールを作成

Excelで作成されたマニュアルをWord化したい場合がある。 一旦PDFにしてから読み込んでくる手もあるが、あとで色々と機能を付け足すためにもマクロでやってみたいと思う。Excelマニュアルは、以下のように文字と画像が交互に配置されているものを想定してい…

VBA Collectionのバブルソート ~ 単純実装からリフレクションを使った汎用化まで

VBA

VBAでソートプログラムを探すと割と簡単に見つかるが、ほとんどが配列をソートするものだ。 今回私が仕事で使うとあるマクロの作成中、コレクションのソートが必要になったので方法を紹介しようと思う。 必要な命令を自作する まず、どのようなソートであれ…

VBA 改良版 スクリーンショットを撮るたびに自動でシートに張り付けるマクロ ~ OnTimeによる恒常ループ

VBA

先日以下の記事で、スクリーンショットを撮るたびに自動でシートに張り付けるマクロを紹介した。thom.hateblo.jp割とうまくいったのだが、実行中にタスクバーから他のExcelへ切り替えができないことが判明した。 サーバー管理業務でマニュアルがExcelで作ら…

私が考える脳の機能マップ ~ 物事を記憶するための方法論

脳について 脳という器官は、科学的にまだ解明されていない。 そのため脳科学と称した書籍や情報には憶測や素人考えのものが多いらしい。 そもそもWikipediaの脳科学という単語を調べると、「神経科学の俗名であり、専門的・学術的な文献ではあまり使われな…

物事は、ある日突然分かるようになる。

たとえば以下のように体系化された知識というのを思い浮かべてほしい。学問でも、業務でも、プログラミングでもなんでも良い。 想定は独学でも人に教わるでも良いのだが、教える側あるいは書籍などがいくら体系的に説明したところでなかなか一筋縄ではいかな…

銭湯にて、ソフトウェア開発の名著「人月の神話」を読了

先週末の三連休にスーパー銭湯に出かけ、ソフトウェア開発の古典「人月の神話」を読了した。この本である。人月の神話【新装版】作者: Jr FrederickP.Brooks,Jr.,Frederick P. Brooks,滝沢徹,牧野祐子,富澤昇出版社/メーカー: 丸善出版発売日: 2014/04/22メ…

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

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

VBA スクリーンショットを撮るたびに自動でシートに張り付けるマクロ

VBA

私は仕事でサーバー管理をしているが、作業を行う際にスクリーンショットで証跡を残す必要がある。Alt+PrintScreenでカレントウインドウをキャプチャ―し、Excelに切り替えてCtrl+Vで張り付ける。 作業終了まで延々とこれを繰り返す。WinShotのようなツールを…

VBA 自動でコードのインデントを揃えるマクロ

VBA

ネットのサンプルなどでは、まれに以下のようなインデントされていないコードがある。 Sub FizzBuzz() For i = 1 To 100 If i Mod 15 = 0 Then Debug.Print "FizzBuzz" ElseIf i Mod 3 = 0 Then Debug.Print "Fizz" ElseIf i Mod 5 = 0 Then Debug.Print "Bu…

VBA 「真理値表を出力するプログラム」を出力するプログラム

VBA

プログラムを組んでいると、「フラグAがTrueのとき、フラグBの状態を反転させたい」というシチュエーションに出くわすことがある。If文を使うと次のように書ける。 If フラグA Then フラグB = Not フラグB End If しかし、Xorを使用すると、次のようにIfを使…

VBA クリップボードから安全にテキストを取得する方法

VBA

VBAで扱えるクリップボードには2種類あり、ひとつはOfficeクリップボード、もうひとつはWindowsのクリップボードである。今回はWindowsのクリップボードを安全に扱う方法を解説する。 わざわざ安全にと書くのは、昨日クリップボード処理のマクロを書いていて…

VBA 画面の任意の箇所をクリックさせるマクロ

VBA

ネットで色々と探したけれど、なかなかシンプルなコードが無かったので、可能な限りシンプルに、張り付けてそのまま動く形で公開しておく。 以下のマクロを実行すると、左から100ピクセル、上から35ピクセルの位置にカーソルが移動して、そこがクリックされ…

フォント界の異端児「メイリオ」。 ~ なぜWordで本文にメイリオを選択すると行間が空きすぎるのか

メイリオが異端だと思う理由について Windows Vistaあたりから標準搭載されるようになったメイリオフォント。 こうしてMS ゴシックやMS 明朝と比べてみると、非常に滑らかに見える。 画面上で綺麗に見えるので、好んで使っている人も多いと思う。しかし…

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