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

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

配列

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

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

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要素のサイズの取得 指定した次元のインデックスの指定…

【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のDictionaryのItemに動的配列を格納する

C++のmultimapのように、特定のキーに対し、複数のデータをDictionaryに格納できないか?キー毎にデータ数が異なる場合、最大データ数を求めてから固定長配列を格納するのは無駄だし、実際にデータがいくつ入っているか先頭から当たっていかないとわからなそ…