t-hom’s diary

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

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

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のときに不一致になるとの報告があった。 数学的には、一致するはずである。これは面白い発見だ。実際に検証して…

VBA マクロ高速化のために停止すべき3項目

VBA

VBAでは画面描画を停止すると実行が早くなることは広く知られているが、実はあと2つ、設定すると有効なオプションがある。手動計算と、イベントの抑制だ。それぞれ、次のようにして設定する。 Application.ScreenUpdating = False '描画停止 Application.Ena…

VBA 高速化テクニック ~ 配列とセルの相互転記

VBA

VBAでセルにデータを書き込む際に、1セルずつ処理すると結構時間がかかる。以下のマクロは1000行、100列の範囲に行×列の計算結果を入力するもので、実行するとかかった時間が表示される。 Sub セルに直接書き込み() '開始時間をtに格納 Dim t As Double: t =…

VBA 定数も一度に宣言できる

VBA

知っている方からすると、いまさら何をという話かもしれないが、私は定数がカンマ区切りで一度に宣言できることをさっき知った。これまで定数は以下のように個別に宣言していた。 Const 行数 As Long = 100 Const 列数 As Long = 50 Const 実行回数 As Integ…

VBA インデントを工夫してプロシージャ内の子プロシージャを擬似的に表現するアイデア

VBA

今回もVBAHaskellのコードにヒントを得た書き方。【参照】 thom.hateblo.jp VBAHaskellのHaskell_2_stdFunモジュールでは、関数とそのポインタを表す関数が対になっており、インデントで表現されている。 以下引用 Function firstArg(ByRef a As Variant, By…

VBA Debug.Printで改行しない方法

VBA

昨日、VBAHaskellのコードを読んではじめて知ったのだが、Debug.Printで改行させずに表示させる方法があるようだ。※VBAHaskellについては過去記事を参照 thom.hateblo.jp以下は、VBAHaskellのHaskell_3_printMモジュールからprintVプロシージャの一部を引用…

VBA 日本語でプログラミング

VBA

'今回の記事は、全てVBAコードです。 Sub 日本語でVBA() 表示 "VBAの一部は日本語で書くことができます。" 表示 "日本語で書けるのは、文字列、マクロ名、変数名、定数名、" & _ "プロシージャ名、ラベルなどです。" 表示 "例えば、肥満度(BMI)を求めるプロ…

「分かりやすい」に気をつけろ!~単純さの代償~

最近コンビニで買い物をしていて思う。「先に会計を済ませてくれ」手持ちカバンに傘なんて持っていると、手が空いて無くて袋を受け取るのも一苦労。 さっさと財布をカバンに仕舞いたいのに、商品の袋詰めが終わってからでないと会計してもらえない。結果とし…

VBA Spc関数の落とし穴とSpace関数について

VBA

VBAで任意のスペースを挿入する関数がSpace関数である。 次のように使用する。 Sub test() Debug.Print "a"; Space(5); "b" End Sub 結果 a b似たような関数に、Spc関数がある。(実はさっき知った) 上記のコードをSpc関数に書き換えても、通常はうまく動作…

【紹介記事】ジャグ配列を展開(VBAHaskell版)

VBA

mmYYmmddさんにて、以下の記事が公開された。 mmyymmdd.hatenablog.com「フラットな配列」 いい表現である。これは一本とられたな。さて、VBAHaskell版について紹介していこう。そもそもVBAHaskellとは何かというのは以下の過去記事を参照してほしい。 thom.…

ジャグ配列を展開(Ariawase版)

VBA

この記事は以下の記事の続編である。 thom.hateblo.jp動的配列の拡張部分でmmYYmmddさんからアドバイスをいただいた。 ReDim Preserve で +1 するのじゃなく、いっぱいになったら *2 していって、最後に削る方がいいですよ。 なるほど。 そういえばD*さんの…

あなたのパスワードはサービス提供者も知らない。~認証プロセスを秘伝のタレに例えてみる~

アカウント、ID、パスワード、ログイン。 これらの言葉は、今では広く認知されている。でも裏側の仕組みはあまり知られていない。 今回は、認証の仕組みを「秘伝のタレ」に例えてIT系以外の方にも分かりやすくその仕組みを解説してみたい。 (うまくいくかど…

VBA ジャグ配列を通常の配列に展開

VBA

今回はジャグ配列[たとえばArray(Array(1,2), Array(3,4,5))]を普通の配列[Array(1,2,3,4,5)]になおす為のプログラムを作成してみた。ジャグ配列については以下を参照 thom.hateblo.jp コードは以下のとおり。 Sub 配列展開(x As Variant, ByRef arr2() As V…

VBA 幻の名書「そこが知りたい!Excel VBA プロの技」を入手

ついに買ってしまった!そこが知りたい!Excel VBAプロの技 Excel97/2000/2002/2003対応!作者: 井川はるき出版社/メーカー: ナツメ社発売日: 2003/11メディア: 単行本購入: 1人 クリック: 4回この商品を含むブログ (4件) を見る…とAmazonで買える時点で幻でも…

VBA Dictionaryオブジェクトを使って配列の要素の合計数を集計する。

VBA

今回は、数え上げはDictionaryオブジェクトを使うと楽ですよという話。 やりたいこと 次のような配列がある。 Array("A", "A", "B", "C", "A", "B", "A") 次のように、それぞれの数を集計したい。 A= 4 B= 2 C= 1 コード 上記の要望は、以下のコードで実現で…

黒つぶれ、白とびについて(ノンプログラマー向け)

今日書いた記事について、面白いけど難しいという意見をいただいたので、もう少しざくっと書いてみようと思う。これが先ほどのバージョン thom.hateblo.jp黒つぶれに見えても、階調が生きていればなんとかなるという結論だったが、なんでも暗い方が良いとい…

黒つぶれの写真の方が良い素材? VBAで検証してみた

VBA

最近まよい犬さんが写真に凝っているようで、読んでたらなんだか写真も楽しそうだなと思えてくる。 www.mayoinu.comまあ、私の場合は今のところ特に取りたいものがあるわけではなく、単純に技術的な面に興味があるのだが。さて、ネットで色々と調べていたら…

Excelからイミディエイトウインドウを素早く開いて自作コマンドを叩く方法

VBA

以前にVBAでワンライナー(一行コマンド)を実行するための書籍を紹介した。 thom.hateblo.jp ※すでに絶版してしまったが、Amazonで中古本が手に入る。ただ、これまでイミディエイトウインドウ自体を開くのにAlt+F11で起動し、マウスでイミディエイトウインド…

VBAでバイナリの読み書き

VBA

昨今の企業はどこでもセキュリティが厳しくて、勝手にフリーソフトウェアをインストールしたりできないことが多いと思う。業務に関係のないソフトは入れるなという最低限の基準をもうけているところもあれば、いかなるソフトも勝手にインストールしてはいけ…

VBA Excelのセル移動をVI風にしたい

VBA

VI(ブイアイ)というテキストエディタをご存じだろうか。 カーソルの移動をh・j・k・lの4キーで行う、なんとも奇妙なエディタである。 では文字入力はどうするのかというと、VIにはいくつかのモードがあり、iキーで編集モードに入ると普通のエディタのように…

ボウリング素人でも真っ直ぐ投げられる簡単なコツ

ボウリングは誰でも気軽に楽しめるスポーツである。 とは言っても、毎回ガーターばかりでは正直楽しくないだろう。私も昔はガーターばかりだったが、高校の時に弓道を始めてから、なんとなくコツのようなものが掴めるようになった。弓道で的を射るコツは、い…

弓道に関する、一般の方のよくある誤解

趣味「弓道」とプロフィールに書いておきながら、弓道ネタは今回が初めての投稿になる。よくある誤解について、本当はこうだよというのを説明したい。 誤解その壱:真ん中のほうが得点が高い アーチェリーと違って、弓道の一般競技は点数制ではない。 実は、…

VBA ビット演算で文字列を暗号化(XOR暗号)

VBA

前回ビット演算を紹介した。thom.hateblo.jpビット演算にはANDとORのほかにも色々あり、そのうちのひとつがXOR(排他的論理輪:はいたてきろんりわ)である。これは、与えられた2つのビットのうち、どちらか片方が1でもう片方が0のときに、1になる。全ケース書…

VBAでビット演算(論理演算)

VBA

ビット演算とは、二進数同士のちょっと変わった計算のことである。通常、我々の日常生活では十進数を使っている。0~9の十種類を組み合わせて数を表現する方法だ。 二進数は1と0の二種類だけですべての数を表す方法だ。たとえば、3は二進数では11、5は101と…

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