t-hom’s diary

主にVBAネタを扱っているブログです。

プログラムコード中に値(あたい)は登場しない

VBAに限らず全てのプログラミング言語で言えることだが、コード中に値(あたい)が直接登場することは無い。 最近、「値とは何か」ということを掘り下げて考えることがあり、ようやくこの結論に行きついた。たとえば、数字の「1」。これは一般的に値だと理解さ…

学習において、疑問を抱えたまま次のページをめくる勇気

何かを学んでいると、まだ説明されていない箇所に対して色々と疑問が湧いてくることがある。たしかに、分からないというモヤモヤした気分のまま次に進むのはなんとなく気持ち悪いものだ。一般的に学習において疑問を持ち、自主的に調べるのは良いこととされ…

高品質なコードを短時間で編み出すには

プログラムのコーディングで一番時間を消費するのは「思考」と「試行錯誤」である。コーディングスピードが落ちることを嫌って極端に短い変数名をつけたり、一つのプロシージャで一気に書ききったりするとコードが把握しにくくなり、「思考」に時間をとられ…

VBAの知識の依存関係の整理を試みる

※今回の記事は基本的に自分用の備忘録です。VBAの学習における知識の依存関係の整理を試みた。 試みたというのは、お世辞にも成功したとは言えない為である。書籍でプログラミングを学ぶ際は、ふつう1ページずつ読み進めていく。 これに対して、実際の知識体…

Excelのセキュリティ設定と怪しいファイルの対策

Excelには、悪意のあるマクロによってコンピューターが被害を受けることがないようにいくつかの防御機構が備わっている。 しかしExcelマクロの解説書・解説サイト等では利便性の観点からか、設定を無効化しましょうという方向での解説が多く、セキュリティリ…

プログラミング言語はコンピューター語ではなく人間のための言語

プログラミング言語とは何か。 初心者に向けて、よく次のような説明がなされる。 コンピューターは日本語や英語で指示しても理解できない。だからコンピューターが理解できる言葉、つまりプログラミング言語でコードを書く必要がある。 プログラミングを学び…

VBScript ドラッグ&ドロップでファイルをAccessDBに登録する仕組み

PCのファイルは通常「フォルダ分け」によって整理される。 ところがフォルダ―ツリーを使った整理は実際のところそんなにうまく機能しない。 なぜなら、コウモリ問題が存在するから。コウモリ問題とは、物事を単一の基準で分類していくと両方の基準に合致した…

VBA入門記事 インデント徹底解説!

VBA

VBA初心者のコードを見ると、インデントが乱れていることが多い。 中・上級者にとって、インデントはあまりに自明のことで、それゆえに詳しく解説されることがない。せいぜい入門書の最初の頃にちょろっと「きちんとインデントしましょう」と書かれる程度で…

プログラミング用語はなぜ小難しいのか

プログラミングでは識別子・キーワード・文字列・演算子・リテラルといった小難しい言葉が登場する。 意味は調べれば分かるが、なんでわざわざそんな小難しい言葉を使うんだろうか。演算子は、計算記号って呼んじゃだめ? 文字列は、単語って呼んじゃだめ? …

VBA 部屋割りマクロ(ネタをいただきました)

VBA

いつも読んでるid:akashi_keirinさんのサイトに食指が動くネタがあったので乗っかってみようと思います。 akashi-keirin.hatenablog.comTwitterで本人にコンタクトして快諾いただきました。さて、まずは同じように部屋の表を用意。 そして、部屋をコレクショ…

VBA 矩形選択範囲で重複データの入ったセルを塗りつぶす方法

VBA

重複データを探すというのは比較的よくやる処理だけれど、データが矩形に配置されていてその姿のまま処理したい場合は関数では少々面倒くさい。今回は選択した矩形範囲のデータから内容の重複するセルを塗りつぶして可視化するマクロを作った。 ちなみに定数…

節目のブースト効果について

さて、そろそろ世間の皆様もお仕事が始まる頃だろうか。新年を迎え、今年こそは「〇〇」と意気込んでいる方も多いと思う。 これに対し先日、Twitterでは冷ややかな反応が「いいね」を集めていた。普段から「〇〇」してない連中が新年にこぞって「〇〇」を誓…

VBScriptとSAPIとタスクスケジューラで、一定時間ごとに音声で休憩を促す仕組みを構築

前回の記事で紹介した音声読み上げの仕組みをVBScriptに移植して、タスクに登録することで一定時間ごとに音声で休憩を促してくれる仕組みを作った。Windows 8.1以降で動作すると思われる。7は多分、音声合成エンジンが標準で入っていないのでダメ。今回は英…

Excel VBAで音声読み上げ

VBA

今回はExcel VBAでSAPIを使った音声読み上げを紹介する。 SAPIとはSpeech Application Programming Interfaceの略で、Windowsアプリケーションで音声認識や音声合成を使うためにマイクロソフトが開発したAPIである。 Windows 8.1 以降のOSには標準で音声合成…

ひと足先にPythonでCOMを利用したExcel操作をやってみる

MicrosoftがExcelにPythonを搭載することを真剣に検討しているらしい。 www.itmedia.co.jpまだ検討の段階なので、どんな実装になるかは明らかにされていないが、基本的にはVBAと同じくCOMの操作になるんじゃないかと思う。今回はひと足先に、PythonでCOMを利…

Access VBAでフォームのコントロールイベント共通化

前回紹介したExcel VBAのユーザーフォームに動的メニューを追加する方法を紹介した。 thom.hateblo.jpただ、実は作りたかったのはAccessで、連票フォームのフッター領域にそれを配置したかったのだ。 慣れないAccessと格闘する前にまずExcelフォームでプロト…

VBA クラスモジュールを使ってフォームに動的なメニューを作る

今回作成するのはボタンを動的に切り替えられるメニューである。これだけでは意味が分からないと思うので動作サンプルを紹介する。 通常は1つのボタンに1つの処理なので、5つボタンがあれば5つしか処理は書けないが、このメニューは▲と▼で動的にボタンを切り…

VBA フォームのボタンの反応が遅い理由と対策

今回はVBAでユーザーフォームに配置したボタンの反応が遅い理由とその対策について紹介する。 検証のため、以下のようなカウンターフォームを作った。 作成方法 フォームに配置した各オブジェクトは以下のように名前を変更した。 コードは以下のとおり。 Pri…

VBA クラスモジュールでExcelのテーブル(ListObject)を操作する

今回はVBAでちょっと扱いにくいExcelのテーブル(ListObject)をクラスモジュールで包んで簡単に操作できるようにするコードを紹介。 作り方 まずVBEで対象のブックを選択し、挿入メニューからクラスモジュールを挿入する。 挿入されたクラスモジュール(Class1…

VBA クラスモジュールで今月末・来月初などの日付計算を楽に扱う

今日はVBAで日付を扱う案件があった。 とりいそぎ、日付関連の関数で済ませたけれど、オブジェクトがあると楽だなと思ったのでクラスモジュールを作ってみた。 作り方 まずはクラスモジュールを挿入し、プロパティウインドウから名前をDateObjectに変えてお…

VBAでランダムかつセキュリティポリシーを満たす8桁のパスワードを生成する

VBA

今回はパスワードを生成するコードを紹介する。 過去すでに書いた気がしてたのだけど、↓と勘違いしてた。 thom.hateblo.jp 簡易版のプログラム さて、ただランダムなパスワードを作るだけなら簡単だ。 さっそくコードを書いてみた。 Sub ランダムパスワード…

VBAで関数型プログラマーの思考法を学ぶ

これは私に関数型言語の素晴らしさを教えてくれた本である。プログラミングGauche作者: Kahuaプロジェクト,川合史朗出版社/メーカー: オライリージャパン発売日: 2008/03/14メディア: 大型本購入: 22人 クリック: 713回この商品を含むブログ (244件) を見る…

ExcelでネストしたIf関数をVBAでインデントして分析しやすくする

VBA

ExcelでIF関数を使うと条件によっていろいろと処理を変えることができる。 複雑な条件はIF関数を組み合わせることで実現できるが、やりすぎるとすごく見づらい。たとえば、以下のような式を作ってみた。 =IF(条件,IF(条件,IF(条件,TRUE,FALSE),IF(条件,IF(条…

Prism.jsの紹介と日本語文字列が認識されない件の対応方法

目次 Prism.js(プリズム)とは Prismの入手 Prismの使い方 日本語文字列の問題 Prism.jsを日本語文字列に対応させる方法 7/30 追記:コード中のコメントもおかしいのでPrism.jsを再修正 Prism.js(プリズム)とは Prism.jsとはWebサイトやブログにプログラムの…

Wordでメンテナンス性の高いドキュメントを作る鍵はスタイルと描画キャンバス

前回、業務マニュアルを作る際に重要な3つのポイント(指示の明確さ、メンテナンス性、読みやすさ)について書いた。 thom.hateblo.jp今回はこのうち、メンテナンス性について、具体的にWordをどう使えばメンテナンス性の良いドキュメントができるのかを紹介…

業務マニュアルを作る際に重要な3つのポイント

今回は業務マニュアルを作る際に重要な3つのポイントを紹介する。私が重要だと思うポイントは、指示の明確さ、メンテナンス性、読みやすさの3点である。 以下にそれぞれ詳しく解説する。 指示の明確さ 業務マニュアルは作業者に対し、何をすればよいのか明確…

VBAとマクロの違い ~ マクロの語源はギリシャ語

VBA

今回はVBAとマクロがどう違うのか、雑学的なお話。よくある勘違いが以下の2つ。 マクロの記録によって作られたものがマクロだ。 マクロとVBAは同じものだ。 どちらも間違っている。巷で正確な解説を見かけないのはたぶん、厳密に話し出すと長くなるからだろ…

Javaでテキストファイルから特定文字列を含む行を除いてファイル出力

今回はJavaでテキストファイルから特定文字列を含む行を除外してファイル出力するコードを作ったので紹介。 コマンドライン引数で複数のキーワードを指定して除外できるようにした。 作成の経緯 このブログのアクセスログを分析する際、いつもダウンロードし…

VBA 名前付き引数の正体はプロシージャの仮引数の変数名

VBA

今回は名前付き引数についてその概念と仕組みを紹介する。 名前付き引数はVBAにおいて基本的な機能であり、マクロの記録で作ったコードでよく使われているが、正確に理解している方は少ないように見受けられる。かくいう私も初めて名前付き引数が何かを理解…

VBA テキストボックスで複数行表示させる場合の最適なHeightは連立方程式で求まる

前回、テキストボックスの最適なフォントサイズについて書いた。 thom.hateblo.jpそこでテキストボックスのHeightプロパティを21に設定したが、今回はその根拠と複数行書ける場合の最適なHeight値の求め方を紹介する。 Meiryo UI 12ポイントのときのテキスト…

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