作成した動機
例えばこのようなエクセルがあったとして、各セルの数値を合計した値を知りたいといった場合、
いちいち計算式書くの面倒なのでAppleScriptを書いてみました。
調べながら、前進
エクセルの範囲指定された領域を取得するには、以下のスクリプトでできました。
tell application "Microsoft Excel"
get selection
end tell
get selection で返ってくるのは range オブジェクトです。
tell application "Microsoft Excel"
set myRange to get selection
class of myRange
end tell
range
この状態では各セルの値が取れそうもないので、スクリプトエディタ.appでエクセルの用語説明を見てみます。
renge の arias プロパティがそれっぽいですね。
areas (list of specifier, r/o) : Returns a list of range objects that represents all the ranges in a multiple-area selection.
DeepLで翻訳してみると
areas (list of specifier, r/o) : 複数領域選択におけるすべての領域を表す範囲オブジェクトのリストを返す。
renge の arias プロパティを見てみましょう
tell application "Microsoft Excel"
set myRange to get selection
--class of myRange --> range object
areas of myRange
end tell
{range "[Book1]Sheet1!$A$1:$C$3" of application "Microsoft Excel"}
返ってきた値には、範囲指定されたセルのアドレスが入っていました。
なので、これでどうなるか……試してみます
tell application "Microsoft Excel"
set myRange to get selection
value of areas of myRange
end tell
{{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}, {7.0, 8.0, 9.0}}
各セルの値がリストで取得できました。
範囲指定したセルの数字の合計を求める
これまでの成果をハンドラにし、合計を求めます。
set myList to getVals()
set total to 0
repeat with r from 1 to number of myList
set myRow to item r of myList
repeat with c from 1 to number of myRow
set myVal to item c of myRow
set total to total + myVal
end repeat
end repeat
total
on getVals()
tell application "Microsoft Excel"
set myRange to get selection -- range obj
tell myRange
value of areas
end tell
end tell
end getVals
45.0
何かの参考になれば、幸いです。