空腹おやじのログと備忘録

VBA(主にExcel)でいろいろな実験的な事とか、Linuxのコマンドとか設定とかについて忘れないように、あれこれと・・・

Excel

【VBA】Twitter お題 「280バイトを超えない範囲で区切りのよいところで分割したい」を解いてみた

Twitter のお題、 280バイトを超えない範囲で区切りのよいところで分割したい を解いてみました。お題は、こちら【エクセルお題】ツイートの下書きをA1セルに入れています。バイト数はLENB関数で分かりますが、単純に280バイトで区切ってしまうと文章が尻切…

【VBA】Excelのユーザーフォームをフェードイン、フェードアウトさせてみた

はじめに 処理の概要 使用するAPI FindWindow GetWindowLongPtr SetWindowLongPtrA SetLayeredWindowAttributes 拡張ウィンドウスタイル コード 事前準備 標準モジュール 実行サンプル はじめに Windows では、Windows 2000 Professional 以降のバージョンで…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その6 デバッグ編

初めに キーワード アタッチ デタッチ 実際にやってみる 操作の流れ アタッチ ブレークポイント ステップイン ステップオーバー ステップアウト 続行 デバッグの停止 全てデタッチ プロセスに再アタッチ ウォッチ 自動変数 ローカル メモリ 主なショートカッ…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その5 構造体の受け渡し

初めに 事前準備 アライメント #pragma pac による要素の配置への影響の確認 pacあり、ダミーメンバーなし pacなし、ダミーメンバーなし pacなし、ダミーメンバーあり pacなし、ダミーメンバーあり2 メモ コード DLL AccessibleFromVBA.h AccessibleFromVBA…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その4.3(非配列Variant型変数による配列受け渡し編)

初めに 処理 コード DLL AccessibleFromVBA.h AccessibleFromVBA.cpp AccessibleFromVBA.def VBA 実行結果 DllTestSetArrayV DllTestGetArrayV まとめ 過去掲載分 初めに 前回の予告通り、今回は非配列のVariant型変数に配列を格納して、DLLとの受け渡しをし…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その4.2(配列編)

初めに SAFEARRAYに関する追加情報 配列要素のデータ型 引数 主な処理と使用する関数 HRESULTを返す関数の成否判定 SAFEARRAYに格納されている要素のデータ型分類値の取得 配列の次元数の取得 配列の1要素のサイズの取得 指定した次元のインデックスの指定…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その3.2(String型による文字列の受け渡し)

初めに BSTR 構造 メモリ管理 ポインタを介してのデータの書き換え 内部のデータ文字列の状態 ヘッダ 関数 SysAllocStringByteLen SysAllocString SysAllocStringLen SysFreeString SysStringLen SysStringByteLen SysAllocStringとSysAllocStringByteLenの…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その4.1(配列 準備編)

はじめに SAFEARRAY SAFEARRAY構造体 cDims fFeatures cbElements pvData rgsabound 次回予告 過去掲載分 はじめに 前回の文字列の受け渡しでは、VARIANTを使いました。(自分でもびっくり)今回の配列でも、int* とか short* とかを使うのかと思いきや SAFE…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その3(文字列の受け渡し)

その1、その2と書いたものの 1年以上放置して、いまさらの第3段。今回は、文字列の受け渡しです。 初めに 文字列を受け渡しするためのデータ型 VARIANT型 vt bstrVal pbstrVal 関数 DLL側でのVARIANT内部形式の判断 VARIANTの文字列の変換 VARIANT→BSTR …

【VBA】Excelで、ひとつ上の可視セルの値を取得して貼り付けする

Excelでフィルタの適用状態に関わらず、任意のセルの(見た目上の)ひとつ上のセルの値を取得しようというもの。元ネタはこちら koroko.hatenablog.com 別の方法で、こちらでも。 infoment.hatenablog.com両者とは別のアプローチで・・・目次 抑えておくべき…

【VBA】ExcelのUnionで纏められたRangeの Areas.Count と Areas.Item(N)

初めに Union メソッド 機能 構文 パラメータ 戻り値 使用例 Areas.Count と Areas.Item(N) 実際に返ってくる値 Areas.Item(N) Areas.Count 複数の Range がひとつの Areas.Item( N ) に纏められるケース(具体例) 隣接する2個以上の Range が矩形となる場…

【VBA】同じデータのセルを結合(Union未使用版)

下記のサイトで、同じデータのセルを結合するということで、Unionを使ってRangeをまとめて最後にMergeという処理を行っていました。kouten0430.hatenablog.comこれはこれで良いのですが、非連続データならともかく、連続データである場合には、 個人的には、…

【VBA】種目別に自動採番(別解)

コロ子さん(id:SNegishi)のところで、自動採番処理をやっているのを見て、ちょっと気がついた点をコメントしました。 すぐに修正版がアップされて「おぉ~、仕事はえぇなぁ」と感心していました。 koroko.hatenablog.com そんな中で、 「Worksheet_Selecti…

【VBA】任意のRangeの先頭1行を除いたRangeを簡単に取得する

Excelでデータを入力していると、1行目にヘッダ行があって、実際のデータは2行目からということはよくあると思います。 VBAで何らかの処理を行っている際に、ヘッダ行を含んだRangeは取得済みだけど、ヘッダ行を除いた部分をRangeとして取得したい場合、今…

【VBA】Excelで、製品の販売価格の更新情報を持つマスタから、いろいろな販売日の価格を取得する

難しく書いたけど、要するに ある製品の販売価格が、不定期に変わっていて、その履歴が残っている。 じゃあ、「任意のタイミングでの販売価格はいくらか?」を取得するというもの。元ネタはこちら https://twitter.com/ia02003812/status/112285709966959820…

【VBA】Excelはアクティブシートが変わると、処理時間が変わる場合があるようだ

いつもの如く、怪しげな事(?)をゴニョゴニョとやっていて、 「あれ、さっきより処理速くね?」となったので・・・ 経緯 結果 コード まとめ(のようなもの) 追記 行削除(2019/5/5) 経緯 ワークシートに50万件ほどのデータがあって、そいつにフィルタ…

ExcelのAutoFilterの抽出条件には、配列が指定できる・・・でも、ちょっと注意しないといけない事もある

AutoFilterの抽出条件に配列が使用できるとの事で、試してみた際にハマったので・・・こんなデータを用意。 まずは、1件抽出するコード。こんな感じ? Public Sub doAutoFilter() Dim r As Range Set r = ThisWorkbook.Worksheets("Sheet1").Range("A1").Cu…

Excelのワークシート名取得 ADOでOpenSchema と Workbooks.Open を比べてみた

ADOというとデータベースに使うというイメージが強いような感じがしますが、Excelに対しても使えます。Excelのワークブックを指定して、ワークシート名の一覧取得を、ADOの使用有無で行ってみます。 使用環境 Windows 10 Home Excel 2013 CPU:古い(恥ずか…

DictionaryのItemに格納したExcelのRangeは更新可能か?

以前の記事でDictionaryのItemに配列を格納して、後から更新しようとして出来なかったが、懲りずに今度はRangeを格納して試してみた。z1000s.hatenablog.com結論から言うと、今回は更新可能でした!!! DictionaryのItemを更新することで、ワークシートの値…

Unionで纏められたRange内のセルにVBAでアクセスする(Excel)

あまり使う事はないような気がするが、複数のセル範囲の集合をひとつのRangeとした時、そのRange内のデータにどうやってアクセスするのか?やってみました。 複数のセル範囲が不連続の場合のアクセス方法を調べることが目的です。Unionで纏める記事はそれな…

Excelワークシートに指定フォルダ(サブフォルダを含む)から画像を読み込んで貼り付けてみた

もうすぐ3月です。 私のいる会社では、月末近くになると年度末の棚卸しがあります。担当の方がデジカメで写真を撮っては、Excelのワークシートに ちまちまと貼り付けてはサイズと位置を調整して・・・面倒くさそうです。(私はその作業に関しては部外者なの…

VBAのDictionaryに配列を格納して、変更してみる

どうせなので、多次元配列(3次元だけど)にしてみた。 テスト用データ その1 配列を格納してみる Public Sub Dictionaryに配列を追加() Dim dicValues As Dictionary Dim lValues(1, 1, 1) As Long Dim lKey As Long Dim i As Long Dim j As Long Dim k A…

VBAで休日判定処理を使って、Excelワークシートに休日カレンダーを作る

休日判定を作ったので、その応用を2。Excelのワークシートに休日を指定色にしたカレンダーを作成してみる。 (ソースコードは下の方に・・・) 更新履歴 2019/6/13 横1列バージョンを追加しました。 仕様みたいなもの 通常(?)の1週間横並び 年指定(1…

VBAで休日判定処理を使って、指定営業日数後の日付を取得する

休日判定処理を作ったので、その応用を。「翌営業日の日付が知りたい」とか、そういった類です。 休日判定クラスモジュールを用意して、それとは別に標準モジュールを用意して、以下のコードを貼り付けます。 あとは、getNthWorkingDayに必要なパラメータを…

VBAによる「祝日判定処理」を「休日判定処理」に拡張してみた

3ヶ月半ほど前の5月28日に、VBAの祝日判定コードを書いたところ思っていた以上にアクセスされているようで、「以外に需要があるものだ」と少々驚いています。(推定で平日30件たらず?ですけど・・・)そこで、図に乗った空腹おやじは、前回の祝日判定…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その2

次回予告までしておきながら、他にVBA関係の記事を書いていたこともあり、既に2ケ月以上が過ぎ、 「いつ頃までに、まとめられるかは、不明・・・」の記載通りになってしまった。前回も書きましたけど、64bit版のVBAではどうなるかわかりませんので!!!今…

VBAによる祝日判定および祝日取得(改正東京五輪・パラリンピック特別措置法 対応)

2018年6月13日、参院本会議で可決、成立しました。これに伴って、2020年の祝日が移動するものが出てきたようなので、先日公開した祝日判定処理を更新しました。 また、2020年からは「体育の日」が「スポーツの日」になるそうなので、合わせて対応済みです。…

VBAによる祝日判定および祝日取得

この記事では、予め用意された祝日テーブルを使用するのではなく、 クラスモジュール内で、祝日テーブルを自前で生成し、Dictionary に格納して判定処理を行っています。 祝日の定義は、クラスモジュール内に、汎用性を考慮した状態でハードコーディングして…

MS AccessのインストールされていないPCで、VBA(Excel)を使って accdbを最適化する

最近VBAネタが続く・・・今使っているOffice 2013を買う時、Accessはあれば便利かもしれないけど、 「どうせ使う機会は無いだろう」という事で、Office Personalを買ったので Accessは持っていない。しかし、最近になって〇〇なデータ管理をしようかと思った…

ExcelのVBAで使えるDLLを、C++(Visual Studio 2017)で作る。・・・その1

ExcelのVBAでもそこそこの事は出来るけれど、C++で処理したい事があって「DLLにしちゃえ」と思ったはいいが、いろいろと忘れて(いや、覚えてないから忘れられないだろうorz)作るのが大変だったので、まとめてみることにした。 とりあえず、今回は、何もし…