おかげさまでspamコメントが増えてきましたので、一応コメントを承認制にしました。基本的には承認します。
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 もともとVBAが使えていたんですか,というと使えていなかったんですが,ともあれexcel2008ではVBAが使えない(んですよね?),ということで,ちょっとapplescriptを試してみたので覚え書きです。参考にしたのは,microsoftの Offcie 2008 Developersとか,excel applescript (PDF)とか。後者の元のページがどこかが良くわからないです… さて,まずは"tell"。 tell application "Microsoft Excel" なんのアプリケーションに対して以下のスクリプトを実施するのか?ということを,tell x で明示する必要があるようです。まずはExcelを使うのでこういう形ですが,Excelそのものの中でも, tell sheet "sheetname" of active workbookなどとして使います(この場合は,どのワークシートを使うか,ということで,こっちの方が有用ですね)。あ,"active"というのは,今動かせるやつ,的な意味ですね(たとえば,複数のワークブックを開いていれば,一般的には「最後の奴」だったり,「今クリックした奴」だったりするアレです)。 次に,"set x to y"。 set name of active sheet to "50ms"のように使います。基本的には,いわゆる「変数」でして,xにyを代入する,ということなのですが,Excelのセルやシートの名前にも適用できることになります。新しいファイルを開くと,"sheet1"があると思いますが,上記スクリプトによって,sheet1の名前が50msに変わる,というわけですね。たとえば。まだ試しては無いのですが,set X to {a,b,c,d,e}とすれば,Xの中にリストの形で変数を設定することができます。1 of Xとかにすると,aを呼び出せるということのようですね。 また,これはこのまんま覚えていただくとして, make new worksheet at active workbook with properties ¬というので新しいシートを作成することができます。¬←これは読み方が良くわからないのですが,alt+Lで出ると思います。{}内にもう少し色々なプロパティが設定できるようですが,とりあえず name:"sheetname"で,ダブルクオーテーション内の名前が新しいシートの名前になります。 コピーについては,いくつかのやり方があり,最もシンプルなやり方は, copy X to Yで,Xをコピーし,Yにペーストするというものです。ここで,X(あるいはY)の設定は, column A of row bのように,セルの位置を左上を基点として呼び出す方法と, range "An:Xm" というように,セル名をrangeで呼び出す方法があるようです。この場合は,copy range (rangeを指定)というコマンドになるので,実際は copy range (range "A1:A10")のようになります。更に,より詳細にどこからコピーするかを明白にすることもできます。たとえば, copy range (range "A1:A10" of sheet "sheetname" of active workbook)のように。rangeの場合,コピー先は,多分頭のセルだけを設定すれば良いように思います。 とりあえずコピーだけしておいて,ペーストは別にする,ということも可能です。この場合は, paste worksheet destination range "A3"とすれば,A3を基点として,コピーしておいたレンジを張り付けることができます。別のシート等にペーストをする場合は,その前に, tell sheet "sheetname" of active workbookとして,ペースト先のシートを明示しておきましょう。 ある式を特定のセルに入れるためには,次のようにします。 set formula of range "A1" of active sheet to "-199.795""formula"というのが良くわからないのですが,これがないと,range "A1" of active sheetという「変数」に"-199.795"という値を書き込むよ,という話になってしまい,セルに記入してもらえません。 また,この値に1000/600を足し続ける,だとか,ある列のセルを加算したものを下に並べていく,というときには,もっと良い解があるかもしれませんが,とりあえずrepeat処理を使うのが便利です。まず例を出しますと repeat with i from 1 to 422とすれば,さっき設定したA1の値に,1000/600を延々と足し続けるということが可能です。具体的に説明しますと, repeat with i from 1 to 422というのは,iという変数に,1から422の数字を入れます,ということですね。これは別に1から始まらなくても良いようです。次の, set formula of columun 1 of row(i+1) of active sheet toまでをまず説明すると,今のシート(active sheet)の一列目,(i+1)行目に,to以下のものを入れていきますよ,ということになりますよね。iは1から422でしたから,2から423の値が入りますよ,ということになります。次に, "=A"&i&"+1000/600"というのは,かなり苦肉の策なんですが…。やりたいことは,ひとつ上のセルの値に1000/600を足したいということです。つまり,A1セル(-199.795)以下は,A2セルに=A1+1000/600,A3セルに=A2+1000/600…といれていきたいんですね。普通にエクセルシート上であれば,$なしでコピペしていけばできるわけですが,applescriptでそれを実装するためにどうしたか,ということですね。ダブルクオーテーションで囲むと「文字列」として認識され,囲まないと変数(設定していれば)として認識されるはず,さらに文字列と変数を,&で繋ぐことができますよ,ということだったので,結局入れたい式のうち変わっているのはAの後にくる数字だけということなので, "=A"にi(数字)を入れて,その後に,"+1000/600"をつなげますよということになるわけです。うーん,うまく説明できない…。最後の end repeatというのは,ここまでで「repeat」が終わりですよ,ということで,まあこれはおまじないですね。 特定の行のデータを平均した,新たな行を作りたい,とかいう場合は,おそらく repeat with i from 1 to 100とかになるでしょうか。とりあえず使えるようになったところはこんなところです。誤解もあるかもしれませんので,詳しい方で気が向いたらいろいろ教えていただければと思います。 今日の結論:matlabを使った方が早いよ PR |
カレンダー
カテゴリー
プロフィール
HN:
渡辺隼人
性別:
男性
ブログ内検索
アクセス解析
カウンター
|