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

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

【VBA】FindFirstFileW、FindNextFileWを使ってファイルリストを取得する(Unicode 文字 対応版、64bit版)

FindFirstFileW による Unicode対応してみた 以前の記事で、FindFirstFile を使って、ファイルリストを取得するコードを書いたが、Unicode文字が含まれると文字化けするため修正してみた。 処理としては、ざっくりいうと、FindFirstFileA、FindNextFileA を…

【VBA】SafeArrayGetDim を使って、配列の次元数を求める

ネットを見ていると、SafeArrayGetDim のVBA での宣言は、以下のように書かれているのを見かける。 Private Declare PtrSafe Function SafeArrayGetDim Lib "oleaut32" (ByRef psa() As Any) As Long しかし、MSのサイトの C++ 表記では、以下のようになって…

【C++】色を選択できるコンボボックス(ドロップダウンリスト)を作ってみた(MFC 未使用)

きっかけ 完成イメージ 環境 技術情報 メッセージ WM_INITDIALOG WM_DRAWITEM WM_COMMAND 構造体 ソース おまけ 前置きが長いので、ソースが欲しい方は、リンクで前置きをスキップして下さいw きっかけ 趣味のような感じで、VBAのコードを書いているのですが…

【VBA】暗号化API を使って、ファイルのハッシュ値(SHA-1、SHA-256、SHA-512、MD5)を求めてみた。

ダウンロードしたファイルの検証や、ファイルの改竄がないかの検証などに MD5や、SHA-256などによるハッシュ値が使われる事があります。例えば、下の図は、CrystalDiskInfoのダウンロードサイト に記載されているハッシュ値部分をキャプチャしたものです。 …

【VBA】トライ木を使って、文字列Aにある文字列Bを数えてみた

トライ木とは コード トライ木 InStr 結果 テストデータ 結果 トライ木とは 人に説明できるだけ理解していないので、Wikipediaより抜粋。 順序付き木の一種。あるノードの配下の全ノードは、自身に対応する文字列に共通するプレフィックス(接頭部)があり、…

【C++】Windowsをシャットダウン or サスペンド させる

スタートメニューを辿っていくのが面倒だったので、 実行ファイルを作って、デスクトップにショートカットを作ることにしました。環境 Windows 10 Home 64bit Visual Studio Community 2019 #include <Windows.h> #include <iostream> using namespace std; BOOL EnablePrivileges</iostream></windows.h>…

【C++】フォルダ内のファイル一覧取得(エクスプローラー風ソート)

前置き コード 実行結果 参考 前置き C++で、FindFirstFileEx を使って、ファイルを取得。 エクスプローラー風に、数字が綺麗に昇順になるようにソートする。 サブフォルダは、除外。 コード #include <iostream> #include <vector> #include <algorithm> #include <string> #include <Windows.h> #include <shlwapi.h> /</shlwapi.h></windows.h></string></algorithm></vector></iostream>…

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

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

【VBA】組み合わせ数を求める

n個の要素から、r個を抜き出す組み合わせ数を求めてみた。とりあえず、コードだけ。 解説は、時間とその気が出来たら、後日wwwn = 99 なら、全ての r の組み合わせを出力できる。 n = 100 なら、47 コード Public Function nCr(ByVal n As Long, ByVal r As …

【C++】Twitter のお題 「魚の数を数えろ!」を正規表現を使って解いてみた

ゴールデンウィークに行われた、Twitter のお題 「魚の数を数えろ!」 「魚の数を数えろ! 蟹バージョン」 を今更ながら、C++で正規表現を使って解いてみた。物足りない人向けに、ちょっと難易度を上げたアレンジ問題を。タラバガニ毛ガニタラバガニ毛ガニ越…

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

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

【VBA】Twitter お題「ねこちゃんの数を数える」を解いてみた

Twitter で、ほえほえ氏から提示されたお題「ねこちゃんの数を数える」を解いてみた。少しお題を考えたので投稿してみます。お題のためのお題ということで少し不自然だし、簡単な解法があるかもしれませんがご容赦を。発展型で言ってみます。お題 ねこちゃん…

【VBA】導関数を求める

Twitter でのお題 「y = 5x^3 + 2x^2 + 7x + 5」の導関数を求めろ! を解いてみた。正規表現を使って、必要なデータを取り出して、ゴニョゴニョしました。使用したパターンは、以下の通り。 "([+-]?)(\d*)x(\^([+-]?\d+))?"大雑把な説明 x に対して、 [+-]? …

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

【VBA】非配列のVariant型変数に格納した配列のLBoundや要素数を変えてみた

SafeArrayRedim を使うと、 非配列のVariant型変数に格納した配列でも、LBoundとかElementsとかの変更ができる。だまって、 ReDim Preserve v(2 To 4) とかすればいいんだけど・・・ ソース Private Type SAFEARRAYBOUND cElements As Long lLbound As Long …

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

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

【VBA】UTF-8 CSV の読み込みを、ADODB.Recordset と ADODB.Stream で比べてみた・・・第2回 ADODB.Streamを使ったコードの処理速度改善

前回のコードでは、完敗だったADODB.Stream ですが、汚名返上なるか? 見つけたサイトに掲載された方法による効果を検証してみます。 前回 z1000s.hatenablog.com 目次 前回の結果概要 処理時間 不明な点 ADODB.Stream を使った処理の分析と改善 参考サイト…

【VBA】UTF-8 CSV の読み込みを、ADODB.Recordset と ADODB.Stream で比べてみた・・・第1回 1行ずつ読み込みしてみる

初めに データ 処理概要 ADODB.Recordset ADODB.Stream コード 事前準備 共通部分 ADODB.Recordset Scema.ini ADODB.Stream(1行ずつ読み込み) 結果 要素分割が正しく行われていなかった・・・ まとめ それぞれの方法の比較 次回予告 初めに 以前、ADODB.R…

エクセルクイズ 回答コード

ネタ元はこちら暗号で会話ができれば、本当のチャレンジ成功か!?問題Excelを用いて、次の暗号を解読して、暗号で答えてください。BMT NX YMJ HZWWJSY RNSNXYJW TK IJKJSXJ#エクセルクイズ pic.twitter.com/qTYr7ZmVWG— わえなび the Theory of Word-Excel …

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

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

【VBA】9桁以上の16進数表記文字列同士のORを求める

昨日、Twitter で、 「16進数のORをとるのにもっと効率のいいやり方ある?」 というやつを見つけました。16進数のORをとるのにもっと効率のいいやり方ある?誰かおせーて!#VBA pic.twitter.com/qmQrwBiWti— ささきさん (@sasaki__san) 2019年9月16日スマホ…

【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】偶数判定、奇数判定

主に偶数判定のための私的メモ。 判定式結果 偶数の場合奇数の場合 偶数判定( N Eqv 0 ) And 101 ( N And 1 ) = 0TrueFalse 奇数判定N And 101 ( N And 1 ) = 1TrueFalse Eqv(XOr の逆パターン) 値1 値2 値1 Eqv 値2 False False True False True Fals…

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

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

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

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