t-hom’s diary

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

2015-09-01から1ヶ月間の記事一覧

VBA String型とByte型配列の相互変換を使ってLeft関数を自作する。

VBA

先日購入した英語のVBA本にVBAが内部でどのようにString型を扱っているのかが詳しく書いてある。 thom.hateblo.jpどうやらVBAのString型とはByte型の配列と等価であるらしく、相互に代入できるようだ。 Dim ByteArray() As Byte ByteArray = "Hello" Debug.P…

英語のVBA本を買ってみたら情報てんこもりだった。

私はAmazonアソシエイトを利用しているが、そこから以下の書籍の購入があった。VBA Developer's Handbook作者: Ken Getz,Mike Gilbert出版社/メーカー: Sybex発売日: 2001/04/25メディア: ペーパーバック クリック: 18回この商品を含むブログ (1件) を見る過…

VBA 性別をBooleanで表すのはちょっと気が引けるので…

VBA

個人情報を扱うプログラムを作成しているといつも悩むのが性別をプログラム内部で扱う際のデータ型だ。文字列型で"男"・"女"としたり、Int型で1・2とするやり方もあるが、これだと他にいろんな値を取りうるので、バグの元になりかねない。そこで2値をとるBoo…

VBA ExcelVBAでパズルを解こう読了

VBA

先日から取り組んでいた以下の書籍を読みおわった。Excel VBAでパズルを解こう作者: 坪崎誠司出版社/メーカー: 株式会社プレスティージ発売日: 2010/07/06メディア: 単行本(ソフトカバー)この商品を含むブログを見るChapter9まであって、1は順列の基礎、2…

良書 UNIXという考え方 ~コマンドラインの長所

今回は私の愛読ブログ(定時にカエルVBA!閉鎖)の主であるコーヘーさんのツイートに触発されての記事。氏いわく、 コマンドラインの良さがわかってきた! とのこと。そういえば私も一時期自宅でリナックスをメインに使っていてどっぷりコマンドの魅力にはまっ…

VBA 再帰の応用 ~ バックトラックアルゴリズムで油分け算パズルを解く

VBA

昨日作成したCupクラスを使って、バックトラック法で油分け算を解いてみた。 thom.hateblo.jpバックトラック法というのは、例えば迷路などで分かれ道に差し掛かったとき、とりあえず片方に進んで行き止まりだったら一つ前の分岐点まで引き返すという方法。 …

VBA クラスモジュールを気軽に使う その3

今取り組み中の以下の書籍で、油分け算というパズルが登場する。Excel VBAでパズルを解こう作者: 坪崎誠司出版社/メーカー: 株式会社プレスティージ発売日: 2010/07/06メディア: 単行本(ソフトカバー)この商品を含むブログを見る3リットル、5リットル、8リ…

VBA 魔方陣を解く

VBA

先日から取り組んでいる以下の本の続き。Excel VBAでパズルを解こう作者: 坪崎誠司出版社/メーカー: 株式会社プレスティージ発売日: 2010/07/06メディア: 単行本(ソフトカバー)この商品を含むブログを見る今回の課題は魔方陣を作ること。 魔方陣とは、3×3…

VBA クラスモジュールを気軽に使う その2

その1ではOperatableNumberというオブジェクトを作成した。 thom.hateblo.jp似たような内容になるが、今回はOperatableStringを作成してみようと思う。 ※なお、サンプルなので変数の型などは一部省略している。クラスモジュールを追加し、以下のコードを追加…

VBA 自作のCollectionクラスをFor Eachでまわす裏ワザ

以前以下の記事で書いたものは、デフォルトプロパティの設定だった。 thom.hateblo.jpしかしその後、海外のサイトでさらにすごいテクニックを発見。 http://www.papwalker.com/ref101/ccol.htmlかいつまんで説明する。まずクラスモジュールを作成し任意のク…

VBA コードの抽象度とは

具体的、抽象的という言葉について 一般的には、「具体的でわかりやすい」とか、「抽象的でわかりにくい」という使い方をする。具体的でわかりづらい、抽象的でわかりやすいと言われても、「は?」と思う方が大半だろう。ただプログラミングのような緻密な作…

VBA 汎用的な順列作成プログラム

VBA

今回の記事は、先日取り組んだ以下の書籍のつづき。Excel VBAでパズルを解こう作者: 坪崎誠司出版社/メーカー: 株式会社プレスティージ発売日: 2010/07/06メディア: 単行本(ソフトカバー)この商品を含むブログを見る前回作成したプログラムは、順列数が固…

VBA LetとSetとCallとカッコ

過去記事で、すべての行はステートメントであり、省略せずに書くとLetやCallが付くことを説明した。thom.hateblo.jpLetについてはプロパティプロシージャでの使用が大半で、代入にわざわざ書いている人はあまり見たことが無い。 Subプロシージャ呼び出しの場…

VBAの本体はどこにあるのか

今回も雑学ネタ。特に役立つ話ではない。以前からVBAの正体が気になって仕方がなかったが、昨日ようやくその正体を突き止めたので書き留めておく。まず、VBエディタのツールから参照設定をすると、そこにVBAがいる。 VBAへの参照設定はどうやっても外すこと…

VBA スパゲティコード生む禁じ手 ~GoToプログラミング

VBA

今回は、ただのお遊びである。役に立たないばかりか、下手に参考にすると有害である。 VBAにはGoTo命令がある。On Error GoToのことではなく、普通のGoToだ。決して「活用しよう」などと思ってはいけないが、遊びでコードを作る分には頭の体操になって良いか…

VBA 関数の副作用と参照透過性について

VBA

関数とは何か まずプログラミングにおける関数とは何かということを、はっきりさせておきたい。私は関数を「外部から何かを受け取り、加工して返すもの」と認識している。たとえば平方根を返す関数Sqrなどは、2を受け取るとルート2の値(1.4142135623731)を返…

VBA クラスモジュールを気軽に使う その1

先日買った以下の書籍に取り組みはじめた。アルゴリズム大事典 (I・O BOOKS)作者: 橋本英美出版社/メーカー: 工学社発売日: 2013/11/01メディア: 単行本この商品を含むブログ (3件) を見る序盤に足し算だけで掛け算をするという問題があるが、普通に書くとこ…

VBA 表のヘッダーを作成するコード…を作るコード

VBA

皆さんはマクロで表のヘッダーを作成するときにどういう風にされているだろうか。もっともシンプルなのは、ひとつずつセルのValueを設定していく方法だ。 Sub ヘッダー設定A() Range("A1").Value = "氏名" Range("B1").Value = "住所" Range("C1").Value = "…

VBA 用語を正しく覚える ~ステートメントとは

VBA

昨日書店で久々にVBA エキスパートの公式テキストを読んでいたら、用語の説明でおかしなところに気づいた。VBAエキスパート公式テキスト Excel VBA ベーシック [模擬問題プログラム付き]作者: 田中亨出版社/メーカー: オデッセイコミュニケーションズ発売日:…

テンキーを買おうと思ったが、いろいろ種類がありすぎて決められなかった

先日フラッシュ足し算を作った話を書いた。 thom.hateblo.jpしかし、キーボードがテンキーレスなので数字専門で入力するにはつらい。 私のPC環境はこちら↓ thom.hateblo.jpたまたまヨドバシに寄ったので、テンキーが欲しいなと眺めつつ、いろいろありすぎて…

VBA Select文の比較テクニック

VBA

ときおりFizzBuzzを書きたくなる。 FizzBuzzはプログラマーにとって初歩的な題材である。 しかしいろいろと工夫の余地があって面白い。今回はSelect文を活用する方法を思いついたので、それを使って書いてみたい。 できたコードはこちら。 Sub thomFizzBuzz(…

VBA コーディング上達のコツは、整理整頓 ~まずは変数名から

VBA

私の部屋には爪切りが3個ある。部屋が散らかってくるといつもどこかへ行ってしまうが、捨てたわけではないので片付けをしたタイミングでまた見つかったりするからだ。このように、部屋が整頓されていないと、同じものを二個・三個買ってしまったりする。一方…

VBA エディタの設定で快適プログラミング

VBA

VBエディターの標準設定でマクロを書くとこのように表示される。一応キーワードに色は付いているが、私のディスプレイ設定では黒との違いがあまり目立たない。 また、文字の線が細いため見づらい。さらに、行間がやや詰まって見えるので適宜スペースを入れた…

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

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

VBAで脳トレ ~フラッシュ足し算を作ってみた

VBA

先日からこの本にトライしているのだが、、Excel VBAでパズルを解こう作者: 坪崎誠司出版社/メーカー: 株式会社プレスティージ発売日: 2010/07/06メディア: 単行本(ソフトカバー)この商品を含むブログを見る17ページ~の汎用的な順列作成というのがどうも…

VBA 遅いマクロの原因を調査する方法

VBA

マクロが遅い原因は、だいたいループにある。以下のようなマクロを実行すると、私の環境ではだいたい5秒くらいかかった。 Sub サンプルマクロ() For i = 1 To 9999 Sheets(1).Cells(1, 1).Value = i Next For j = 1 To 9999 合計 = 合計 + j Sheets(1).Cells…

VBA 順列の出力

VBA

以前購入して積ん読書になっていた以下の書籍に取り掛かった。Excel VBAでパズルを解こう作者: 坪崎誠司出版社/メーカー: 株式会社プレスティージ発売日: 2010/07/06メディア: 単行本(ソフトカバー)この商品を含むブログを見る最初の問題は順列の出力。順…

VBA 0.1 + 0.2 = 0.3にならない。

この記事の元ネタはVB.NETやC#に関してのもの。 「どぼん!」さんのサイト「DOBON.NET プログラミング道」で見つけた。 小数(浮動小数点数型)の計算が思った結果にならない理由と解決法、Decimal型はいつ使うか?: .NET Tips: C#, VB.NET最初、「えっ?こ…

VBA 指数表記と誤差

【注意】この記事は推測を含み、事実とは異なる可能性があります。とあるブログ(既に閉鎖)で、Exp関数に1を与えてi乗してLogを取ると、iが8と16のときに不一致になるとの報告があった。 数学的には、一致するはずである。これは面白い発見だ。実際に検証して…

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