4

Excelで「=MAX(A1:E10)」みたいな、引数に範囲を取る関数の処理結果を、変数に取得するライブラリを作ってみました。

 

勝手に命名

Excel操作(関数(範囲)の結果取得)

 

きっかけのスレッド

https://winactor.com/questions/question/excel関連/

 

ベースライブラリ

Excel操作(範囲選択)

 

加工箇所

' メイン処理をコメントアウト
'worksheet.range(range).Select

'次の行に以下を追加

' 関数の選択肢を設定画面に表示
fnc = !関数|MAX,MIN,SUM,COUNTA,COUNT,COUNTBLANK,AVERAGE,CONCAT!

' 関数の追加方法
' 関数の選択肢と処理をセットで追加
' 最下部のリファレンス、mougのサンプル1内、MAXと差し替えて動く関数に対応

' 選択肢に応じた処理を適用
Select Case fnc
  '最大値
  Case "MAX"
    result = xlsApp.MAX(worksheet.range(range))
  '最小値
  Case "MIN"
    result = xlsApp.MIN(worksheet.range(range))
  '数値の合計
  Case "SUM"
    result = xlsApp.SUM(worksheet.range(range))
  'データの個数
  Case "COUNTA"
    result = xlsApp.COUNTA(worksheet.range(range))
  '数値や日付、時刻の個数
  Case "COUNT"
    result = xlsApp.COUNT(worksheet.range(range))
  '空白セルの個数
  Case "COUNTBLANK"
    result = xlsApp.COUNTBLANK(worksheet.range(range))
  '数値の平均値
  Case "AVERAGE"
    result = xlsApp.AVERAGE(worksheet.range(range))
  '文字列の連結
  Case "CONCAT"
    result = xlsApp.CONCAT(worksheet.range(range))
End Select

' 関数の処理結果を変数に格納
SetUMSVariable $結果$ , result

  • 長々と書いているものの、実質この2行のみ

xlsApp.MAX(worksheet.range(range))
SetUMSVariable $結果$ , result

  • この関数部分MAXだけを差し替える術はないものか、、

 

リファレンス

ワークシート関数をVBAで使用する(WorksheetFunctionプロパティ):Excel VBA|即効テクニック|Excel VBAを学ぶならmoug
https://www.moug.net/tech/exvba/0100035.html

WorksheetFunction(ワークシート関数を使う)|VBA入門
https://excel-ubara.com/excelvba1/EXCELVBA387.html

ワークシートの関数を使う(WorksheetFunction)|VBA再入門
https://excel-ubara.com/excelvba1r/EXCELVBA510.html

Excel関数 機能別一覧(全486関数) | できるネット
https://dekiru.net/article/4429/

 

 

以下、更なる機能拡張の妄想です。

 

範囲に加えて引数を指定する関数への対応

  • 関数(範囲,引数)
    1つならすぐに手が届きそう
  • 関数(範囲,引数1,引数2)
    いくつまで対応するか、、きりがない、、

 

「関数(範囲や引数)」をまるまる指定

  • Excelで使う数式をそのまま指定すれば良い状態
  • ◎ 万能になり得る
  • 早くも命名案:Excel操作(数式の結果取得)
  • ▲ 既成ライブラリのスクリプトパターンに沿う限り、RANGEとかのオブジェクトは手前で宣言が必要だったりする
  • ▲ 範囲をn回使う関数とかのバリエーションを網羅するのは難しいか
  • IF,COUNTIF,VLOOKUP,INDEX,MATCH,FILTER,UNIQUEあたりが使えたら、、
  • ! 逆に言うと、オブジェクトさえ克服すれば、万能を目指せそう
  • ! 既成ライブラリのスクリプトパターンに沿わず、ゼロベースのスクリプトなら、、
  • このへんに沿えばゴールできそうな気もする

VBSでExcelを操作(Excel の ウィンド を開かずに)- 初めてでも簡単 - VBScript初級
https://easyvbs.hatenablog.com/entry/2019/01/31/225040

Microsoft(R) VBScript ランゲージ リファレンス
http://yasusigi.net/iasdocs/aspdocs/ref/vbs/vbscript/55.htm

WSHでExcelシートの最大行数を知るには?| OKWAVE
https://okwave.jp/qa/q5623988.html

  • シート名やセル(範囲)は、値を差し替えて使い回せるようにしたい
  • 結果が変数に格納される価値の評価がモチベーション
  • 自分の業務でニーズがあったら、もしくは質問に誘惑されたら挑んでみたい
  • 誰かが颯爽と「できたよ」とシェアしてくれたら、それはそれで嬉しい
Zawawa 編集済みのコメント
回答とコメントは、会員登録(無料)で閲覧できるようになります。