Libre & OOo Basic Tips ユーザ定義関数(色の付いたセルを数える)
たいへん大変たいへんご無沙汰してます。FXはかなり放置気味です…(-_-;) 含み損があるので、スワップが追いつく方法を模索中です。ところで最近、暇つぶしに競馬や宝くじのロトの結果分析をざっくりやってまして、予想につながるように、LibreOffice(Calc)にデータを入れてるのですが、MS Office(Excel)と違って、痒い所に手が届くような関数等が中々ありません。そこで、試行錯誤しながらBasicでユーザ定義関数を作りました。参考にしたサイトは以下です。OSS( Open Source Software )でいこう!!「OpenOffice.org / LibreOfficeを使おう編」 内のMacroの杜(OpenOffice.org/LibreOffice Basic編)http://openoffice3.web.fc2.com/index.htmlで、ユーザ定義関数で何がしたいの?というと、色の付いたセルを数える。 ま、それだけなんですけど… 以下はロト6の結果を元に該当数字に色がついてます。青(水色?)が本数字、緑?がボーナス数字です。早速コードです。関数名はCOUNTBGC(Back Ground Colorの略)です。ループカウンタ用変数 i , j はよく使うのでプロシージャ外に大域変数として定義してます(Public i As Long , j As Long)要点は、・引数を使うと参照先の配列のみ?が引き渡される為不使用。代わりに関数を入れたセル(参照元)から参照先範囲の文字列を切り出す。・相対AddressでCurosorを Cell/Range指定をして、そこからループその為、セル1つのみでも、セル範囲でも対応可能(だと思う…)・セルに色がついていれば(正確には色なし以外のセルを)カウント ループ内の処理(If~)を変えれば他に応用可難点は、・若干不安定(関数のフィルコピーはあまりお勧めしません)シートがアクティブになったときに再計算されたりされなかったり…・セル背景色に白を使うと正しくカウントしません(当たり前ですけど。)追記)今回のユーザ定義関数は、①再計算は任意の1セルのみ再計算されるっぽい(たぶんアクティブセル)②その値が全てのセル範囲に反映される場合がある(範囲外(数式の入ってないセル)がアクティブだと0を返すっぽい)③関数の実行はブックと非同期?と思われ、実行エラーになる(特にブックを開いた時)⇒全体的な対策を考えないと…暫定対応策1つの関数の入ったセルに対し、F9キーで正しく再計算されます(とりあえず手動更新的な…)また、セル範囲の再計算は、Ctrl + Shift + F9でできますが、上記①、②になります