VBA

セル書式の"aaa"は使用上の注意をよくお読みください

問題1:時系列データから土日を除外して平均を出したい まず、このスプレッドシートの平均Aと平均Bを見て欲しい。同じ数字が表示されている。しかし、平均Aは土日を除外したセルが対象で、平均Bはすべてのセルが対象となっている。 フォーミュラは以下のと…

MsgBoxではなくビープ音で知らせて欲しい

VBA

何かの処理が終わったときに「終わりましたよ」的なお知らせがあると助かりますが、一番手っ取り早いのはMsgBoxです。でも、MsgBoxだとVBAの処理も止まってしまうため、タイマーを使って10分毎や30分毎に処理をさせているようなケースでは困ってしまいます。…

選択範囲のセルを画像として保存する

やりたいのはエクセルのセルを画像として保存して、添付ファイルとしてメール送信です。mailItem.bodyには文字列しかセットできないのですが、セルの背景色情報がどうしても知りたいんです。特殊な条件で背景色を変更するようにセットしているからです。考え…

Timerクラス

最近の働き方改革で夜遅くまでオフィスで仕事をしない人は関係ない話なので、この記事は読まなくても大丈夫です。 経過時間をざっくり計算するために一番簡単な方法はVBAのTimer関数です。たいていの人がこんな感じで済ませていると思いますが、これだと対応…

Boolean表記とIIF関数

IF-ELSE文で次のようなコードを書くときに5行も使うの嫌ですよね。 Dim fFlag As Boolean If buff = "EP9 sucks" Then fFlag = True Else fFlag = False End If IIF関数なら1行で書けます。 fFlag = IIf(buff = "EP9 sucks", True, False) でも、ステート…

日本国民として知っておくべきこと:国民祝日

まずは技術的な話 Windows10のカレンダーアプリには、OutlookとGmailの国民祝日があります。普通に考えてOutlookのAPIで簡単に取れるだろうと思って、いろいろ調べてみたんですが、サンプル通りにやってもうまくいきません。 休日一覧をウェブから取ってくれ…

条件付き書式で表示が変わったセルの背景色をVBAでチェックするには

条件付き書式で背景色が変更されている行に対して、任意の背景色を持つセルの列だけを表示したかったので次のようなコードを書いてみたんですが、.Interior.Colorの値が16777215(=vbWhite )になってしまい、今更こんなことでつまづくのかと苦笑してしまいま…

株価スクレイピング

VBAで株価スクレイピングしようかと思ったんですが、検索すると圧倒的にPythonがヒットするので、どれだけ高速なのか調査も兼ねてPythonの開発環境を整備して、ある程度動作できるところまでやってみました。 ただ、もう面倒くさい。インタープリターベース…

SpecialCellsで落とし穴にハマってみた

シートの一番下のセルを一発で教えてくれるSpecialCells(xlCellTypeLastCell)は便利なのでたまに使いますが、例えば次のようなシートで実行すると14を返します。当然ですよね。 ? Sheet1.Range("A1").SpecialCells(xlCellTypeLastCell).Row では、同じシート…

いまさらテキストファイルの読み書き

テキストファイルにデータを書き出したい、または読み込みたい。ああ、なんだっけLine Inputだっけなんだっけ? FreeFileいるよな。調べるの面倒くせー というわけで仕方なくクラスを書くことにしました。コピペで済ませたい人は、このクラスをコピーしてく…

エクセルからメール送信

エクセルからメール送信するにはどうしたらよいでしょうか。Outlookライブラリを使えば、簡単にできます。サンプルでは、ワークシートの内容を送っていますが、ワードドキュメントを添付したり、応用範囲はいろいろ考えられると思います。 参照設定: Micros…

Webクエリのダウンロード時間がかかるようになった

Webクエリを使い続けていると、3秒程度だったダウンロード時間が1分以上になることがあります。あちこちのサイトを検索してもはっきりした原因はどこにも書いてありませんが、やっと原因を特定できたので情報公開することにします。おそらくこれがファイナル…

VBAの高速化

画面の更新をオフにする .Selectionはダメ絶対 セル自動計算オフは禁止 イベントをオフにする ステータスバーの更新頻度を下げる ループの中でのDoEvents Webクエリが遅くなる問題 Webクエリはテーブル指定で それは言われなくても知ってます編 画面の更新を…

クリップボードとのインターフェース

エクセルの中で .Copyで内部的なクリップボードに入れて、.PasteSpecialするのは簡単です。では、エクセルではなく別アプリで使えるようにクリップボードに入れるにはどうしたらいいでしょうか。セルの内容を.Copyすれば別アプリでもアクセスできるので問題…

Collection vs Dictionary

Collectionオブジェクトは安直にデータをぶっこんで、あとでグルグル回すのに便利です。たぶん、みなさんも使ったことがあると思います。 コレクションにはオブジェクトを格納することもできるので次のようにRangeオブジェクトを入れることができます。For E…

セルからマクロ関数を呼び出す

オートフィルターを使って、表示されているデータに対して合計、平均、個数、最大、最小といった集計を行いたい場合は、SUBTOTAL関数の独擅場です。え? SUMじゃダメなの?という人に簡単に説明すると、SUMは非表示のデータも合計しますが、SUBTOTALは非表示…

HTMLファイルをダウンロード

HTMLファイルをダウンロードして何をしたいのかは人それぞれですが、私がやっているのは株価をダウンロードしてMySQLに落とし込むとか、適宜開示情報や格付け情報の監視などでしょうか。 HTMLファイルをダウンロードするには大きく2つの方法があります。1…

For Each xCell In Selectionの落とし穴

エクセルでマクロの書き方が分からない場合は、マクロ記録でコードを生成させて参考にするのが一番簡単です。ところが、そのコードはそのままでは使えない代物だということが分かってますか? 今回は、Selectionの落とし穴について書いてみたいと思います。 …