« Excel VBA Variant型へInput#ステートメントで代入 | トップページ | AppleScriptアプレットの実行時にエラー »

2016年4月16日 (土)

OOo BasicでCalcの関数を作ってみた

OOo BasicでCalcの関数を作ってみた。
m個の中からn個の数字を重複無しに選ぶ。これは以前別のブログでネタにした。
今回は、1000個ぐらいあるリストから、十数個を選ぶということをしたかったので実際に作ってみた。なぜにOOoかというと、自宅のMacのExcel 2008にはVBAがないので、LibreOffceで使うため。PowerMac G3にはClassic環境のExcel 98があるけど、Classic環境を立ち上げるのに時間がかかるので使わない。

VBAの様に戻り値をAs Long()と書いたら文法エラーとなった。仕方がないのでVariant型でごまかした。OOo Basicで動作を確認したけど、VBAでも動きそうだな。

返された配列をセルに入れるには、複数セルを選択→最初のセルに関数を入力→Command + Shift + Returnとする(Macの場合)。Windowsだとどうなんだろう?

 

Option Explicit

Function RandList(mN As Long, Optional sN As Long) as Variant
    Dim sN_Local As Long
    dim mN_Local As Long
    Dim i As Long
    dim r As Long
    Dim sArray() As Long
    dim dArray as Variant

    Randomize
    mN_Local = mN
    If Not IsMissing(sN) Then
        sN_Local = sN
    Else
        sN_Local = mN_Local
    End If
    If mN_Local < sN_Local Then
        mN_Local = sN_Local
    End If
    ReDim sArray(mN_Local)
    ReDim dArray(sN_Local - 1, 0)
    For i = 1 To mN_Local
        sArray(i) = i
    Next i
    For i = 1 To sN_Local
        r = CLng(mN_Local * Rnd()) + 1
        dArray(i - 1, 0) = sArray(r)
        sArray(r) = sArray(mN_Local)
        sArray(mN_Local) = dArray(i - 1, 0)
        mN_Local = mN_Local - 1
    Next i
    RandList = dArray
    Erase sArray, dArray
End Function

Basicじゃなくて、Pythonで作ったほうが今風なのかな? Pythonは全然知らないのだけど。

|

« Excel VBA Variant型へInput#ステートメントで代入 | トップページ | AppleScriptアプレットの実行時にエラー »

NeoOffice/OpenOffice」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: OOo BasicでCalcの関数を作ってみた:

« Excel VBA Variant型へInput#ステートメントで代入 | トップページ | AppleScriptアプレットの実行時にエラー »