t-hom’s diary

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

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

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と…

JPEGファイルは保存のたびに劣化する

まよい犬さんの以下記事を読んだ。 www.mayoinu.com写真のことはあまり分かっていないけれど、たぶんRAW(ロウ)データというのはパソコンでいうビットマップファイルのことかと思う。JPEGファイルの「画質劣化」であるが、困ったことにJPEGは編集→保存を繰り…

名著 Excel VBAによるWin32 APIプログラミング入門の改定電子版

Excel VBAでWin32 APIを使う方法はネット上に色々出ている。 しかしネットの情報は玉石混合で、どれが正しい作法なのかよく分からない。 そこで先日以下の書籍を見つけたのだが、、、Excel VBAによるWin32 APIプログラミング入門作者: 大村あつし出版社/メー…

VBA 関数呼び出しの際、Variant型の仮引数に別型の実引数を参照渡しするとメモリアドレスが変わってしまう事象

以下の記事で、ByRef x As VariantにLongやStringなどの別の型を渡すとメモリアドレスが変わるとの紹介が。 mmyymmdd.hatenablog.com前回私が書いた記事もそこがネックだった。 thom.hateblo.jpさて、この事象について、色々試していたら原因が見えてきたの…

ファイルの移動で、コピーより切り取りの方が速い理由

今回は普通のWindowsのお話。デスクトップのファイルを、マイドキュメントやCドライブに移動させるとき、通常は切り取り・貼り付けかドラッグ&ドロップを行う。 一方、コピー・貼り付けという手段もある。見た目には、移動元のファイルが残るか、消えるかの…

VBA Win32apiを使った変数のアドレス交換(固有型対応版)

VBA

前回検証記事で、Win32apiを使った変数のアドレス交換を紹介した。 thom.hateblo.jpただし、この方法には受け渡しする変数がVariant型でなければならないという制約がある。 そこで、Variant以外の変数でも対応できるように作ろうとしたのがこちら。。 Decla…

【検証記事】VBAでWin32apiを使って変数のアドレス交換

VBA

先日、以下の記事を書いた。 thom.hateblo.jpそのとき私は、VBAでメモリ番地の入れ替えはマシン語でも呼び出さないかぎり出来ないと思っていたのだが、ふつうにCopyMemoryで出来たようだ。mmYYmmddさんがそれを実現する関数を作成してくれた。 https://mmyym…

VBA アルゴリズム大辞典を買ってきた

VBA

私は割とアルゴリズムに弱い。 ソートやサーチなどはそもそも大抵の言語に最初から機能としてあるので、今までプログラムを作ってきた中でそれほど困ったことにはならなかった。本格的にアルゴリズム学習の必要性を感じたのは、このブログを立ち上げた頃であ…

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