VBAより便利で手軽?

Posted on 2009年12月10日 (木) in articles • Tagged with Excel, VBA

Rubyist Magazine #27に「VBAより便利で手軽Excel操作スクリプト言語『Ruby』へのお誘い(前編)」という記事が掲載されていたので、読んでみたのだがちょっと寒い内容だ。VBAでもきっちりサンプルソースを書いた上でrubyとの比較をしていただきたい。むろん僕自身はVBA自身はバッドノウハウ(すでに死語の気もするが)の巣窟であり、出来る限る捨て去りたい物であるのはと思っていることを否定しないし、VBAになんの思い入れもない。VBAの話題自身がいまさらだろうが。

新規にVBAプログラムを書く鉄則はPerlの「use strictとuse warningsを必ず書け」というのと同様に「Option Explicitを必ず書け」で、静的型付け言語なので注意して書きましょうと言うのが前提。これをやってエラーが出るソースは放置するか捨てましょう。放置しておいたほうがよいものに関わってはいけません。(笑)

で、話を戻す。「VBA での文字列操作の不満やイライラを Ruby で解消する」と言う項で書かれているような定型なテンプレートにCellに入力した値を動的に入れて文書やソースを自動で生成したいと言う場合は、ソースにテンプレートを埋め込むと確かにぐちゃぐちゃになってしまうので、やらないというかやってはいけない。ただしヒアドキュメントの埋め込みのようなことはVBAでは出来ないので、下図のA5セルのように適当にテンプレー …


Continue reading

2006年06月16日 金曜日

Posted on 2006年06月16日 (金) in articles • Tagged with Excel, Photo, Equipment, VBA, 統計, Mathematics, C++, LaTeX, TeX, Ruby, Scheme, Network

Excel2007を評価中

体験って何だ・・・ というのは置いておいて、Excel2007 Betaをインストールしてみました。(正確にはOffice2007 Pro Betaだが)

Excel2007

メニューがなくなってリボンと言う奴になりました。最初は手惑いそうだけど操作自身は本質ではないし、まあ慣れれば気にはならないかも。マウスでオペレーションする方向になったような気はする。ちょっとしたことをするにもいちいち探索することが多いが、右クリックでうまく乗り切れそうではある。もうプルダウンメニューに飽きたし、IE7もそんな感じなので、Vistaではだいぶんかわるのだろう。とりあえずいろいろつっこみどころ満載のExcelで遊んでみよう。ざっくり使えるように設定の変更。

  1. デフォルトではVBA関係のアクセスができないので、アクセスできるようにする。
    • 「ファイル」-> 「Excelのオプション」->「個人設定」
    • 「開発タブをリボンに追加」にチェック
  2. Addinやマクロ関係の設定
    • 「ファイル」-> 「Excelのオプション」->「セキュリティ センタ」
    • 「セキュリティセンタの設定」は以下の物を設定。他はデフォルト
    • マクロの設定は「デジタル署名されたマクロを除きすべてのマクロを無効にする」
    • アドインの設定 「アプリケーションアドインに対し信頼できる発行元の署名を必須にする」

ここまで設定しておいてようやくVBAやつっこみどころ満載の分析ツールで遊ぶことができ …


Continue reading

2006年04月10日 月曜日

Posted on 2006年04月10日 (月) in articles • Tagged with Excel, VBA, Photo, Equipment, Network

Excel VBA Hacks (4)

前回まではテキスト処理を中心に書いてきたが、Excelと言えばワークシートを使ってなんぼ。ということで、ワークシートを使うお題から。先日つらつら仕事をしていて、Excelで書いた表の升目の大きさに合わせて、写真を貼らなければならない資料を作る必要が生じた。まぁ数枚だったら適当に貼り付けるのだが、さすがに貼り付ける写真の枚数が総数で400枚を越えると考えも変えざるえない。貼る時間よりマクロを書く方が数段速いので、サクサクこんなツールを書いてみる。

```vbnet InsertImages.bas Option Explicit

Sub InsertImages()

Dim FileName As String
Dim c, cs As Range
Dim fs As Object

Set fs = CreateObject("Scripting.FileSystemObject")
Set cs = Selection

For Each c In cs

    FileName = c.Value

    If fs.FileExists(FileName) = True Then

        c.Value = ""

        With ActiveSheet.Pictures.Insert(FileName)
            .ShapeRange.LockAspectRatio = msoTrue
            .ShapeRange.Height = c.Height - 2   ' 画像の高さをセルの高さに適当に合わせる
            .ShapeRange.Width = c.Width - 2     ' 画像の幅をセルの幅に適当に合わせる
            .ShapeRange.Top = c.Top + 1         ' 画像の上側の辺をセルの上側の辺に適当に合わせる
            .ShapeRange.Left = c.Left + 1       ' 画像の左側の辺をセルの左側の辺に適当に合わせる
        End With

    End If

Next c

End Sub ```

使い方は、写真を張り込みたい表を作ってしまって、写真を貼り付けたいセルに貼り付けたい写真のファイル名をフルパスで入力。あとは写真を貼りたいセルをすべて選択して上のマクロを実行。あっという間に作業は終了。ちなみに写真はセルに対して貼り付けられる訳ではなくワークシートに対して …


Continue reading

2005年12月07日 水曜日

Posted on 2005年12月07日 (水) in articles • Tagged with Excel, VBA, Equipment, PC, TeX

Excel VBA Hacks (3)

なんでもかんでもExcel症候群」なんて言う_刺激的な_タイトルを付けるとなんだかそれだけでアクセスする人がいるのと、シリーズ化してみても良いかもしれないということで、タイトル変更。本シリーズではVBAとWindowsの標準的な環境における機能だけを使ったExcelおよびOfficeの使いこなしを深めていきたいと思う。

そんなわけで第3弾。テキストデータをさわっているといろいろ考えさせてくれるのが文字コード周辺の問題となる。通常Unixではnkfやらiconvやらを使ってコード変換をするのであるが、Windowsではどうするかというと、たいていの記事ではnkfをDLL化したフリーのライブラリnkf.dllを使うのが常道である。が、これもいちいちインストールしないと使えないので、めんどくさい。(めんどくさくないよと言う人は以下の記事を読む必要はない。ただ数十人のPCにいちいちマクロ以外のプログラムやライブラリを導入しつつ、自分がそのバージョンの管理もしなきゃならないという事態に陥れば、考えるところもあるだろう。)

いろいろWindowsのドキュメントをひもといていけば、だいたいの場合でやっぱりnkf32.dllもいらないと言う結論に落ち着いた。とりあえず文字コード変換して取り込むと言う関数も書いてみよう。方法としてはUnixのファイルをバイナリでもらっ …


Continue reading

2005年12月04日 日曜日

Posted on 2005年12月04日 (日) in articles • Tagged with Equipment, Excel, XML, Network, HTML

David Hawley, Raina Hawley / Excel Hacks—プロが教える究極のテクニック100選

最近Excelのスキルが凄くあがったなあと思ったので、道場破りでもと思って、本屋でこの本を_立ち読み_してみた。出てくる項目でしか判断してませんが、最後のXMLの項(これExcel2003の話だよなあ)を除けば、僕にとっては_ほぼすべてが既知_の本でした。O'ReillyのHacksシリーズは何冊か購入したけど内容のレベルにムラを感じるのではるが、この本ははっきりいって不要な本であるという結論ですかね。ランダムに結構な数をサンプリングしてみましたが、ほぼ既知の内容で読む価値無しという結論。ああっ、Excel依存症なのは僕のことなのかぁ・・・

ピボットテーブルとかピボットグラフとかソルバーとか言うものを使ったことが無いという人はExcel使いとしては初心者もいいところと思うので、Excelの初心者を卒業したいあたりの人にはまぁお勧めできるでしょうか。

そんなわけで、Excel依存症であることに気がついてしまった結果、全くブルーな気持ちでいっぱいです。この本を買ってやろうという予算は、ずっと買いそびれていた塩野七生さんの「ローマ人の物語」の1巻と2巻の購入資金に転用します。(実は3巻まで、図書館からかりて読んでいたので、未購入なのでした。7巻以降は別な理由で未購入ですが。と言っても、立ち読みレ …


Continue reading

2005年11月29日 火曜日

Posted on 2005年11月29日 (火) in articles • Tagged with Equipment, Excel, PC, 統計

はてなブックマーク - なんでもかんでもExcel症候群

気がついたらこんな所にリンクを貼られてしまっているとは... 世の中恐ろしいものだ。今のところこの日記はblog的な要素(trackbackとかcommentとか)を持っていないことと、サーバの引っ越しをしたときに実行環境の差でBBSが動かなくなってしまったので、読んだ人の意見が取れない・・・(BBS自身は入れ替えたいけど、時間がねえ。) ちょっと悲しいが、まぁ良いか。

統計関係のワークシート関数のうちよく使うものだけは何とかしたいものだなあ・・・


2005年11月24日 木曜日

Posted on 2005年11月24日 (木) in articles • Tagged with Excel, TeX, VBA, Perl, Ruby, Network, Equipment

続・なんでもかんでもExcel症候群

Unixな機械からテキストファイルを直接持ってくると、改行がWindowsと異なるので、Excelで扱うのがちょっとめんどくさい。FTPできるときは、ASCIIで持ってくればDOS/Windowsなテキストファイルになるのだけど、世の中FTPできなくて専用のクライアントを共用されることもあって涙が出てくることがもうしょっちゅうあって困る。で、そんな_だめだめクライアント_に泣く泣くつきあわなければならないのだが、この際_なんでもかんでもExcelにお任せ_なのだ。

これからはASCIIモード転送のことは忘れて、すべてBINARYモード転送にしてしまいましょう。DOS/Windowsの世界ではUnixで作成したテキストは何行あっても、_たった1行のテキストファイル_と見なせるから、これを全部1つの文字列に取り込んで、ばらす方向で考える。ソースを示す。

```vbnet TextRead.bas Sub TextRead(FileName As Variant) ' TextReadプロシジャ: FileNameで指定されたファイルを読み込む ' FileName: 入力するファイルのファイル名

Dim RE As Object
Dim StreamString As String
Dim textlines As Object
Dim textline As Object
Dim tmp(2) As String
Dim myDate As Date
Dim PATTERN as String

Set RE = CreateObject("VBScript.RegExp")

With RE
    .Pattern = ".+\n"
    .IgnoreCase = False
    .Global = True
End With

Open FileName For Input As #1
Line Input #1, StreamString
Close #1

Set textlines = RE.Execute(StreamString)

For Each textline In textlines

' textlineはUnixにおける行と同じ。ここに処理したいことを書く

Next

Set RE = Nothing

End Sub

こんなことをやると、textlinesコレクションに入る各要素はUnixで言うところの行の集合、その要素は行と同じ …

Continue reading

2005年11月22日 火曜日

Posted on 2005年11月22日 (火) in articles • Tagged with Excel, Equipment, PowerPoint, XML, Emacs, VBA, Perl, Ruby, Network, PC, C++

なんでもかんでもExcel症候群

何でもかんでもPowerPoint症候群の弊害を日記で書いたのだが、それよりも世の中に広く広まっている病的な物と言えば、_なんでもかんでもExcel症候群_であろう。とにかく通常の表だけに飽きたらず、提出書類から報告書まで_何でもかんでもExcel_なのである。つまり「何でもかんでもExcel症候群」とはExcelだけですべての仕事が完結してしまう恐ろしい病気なのだ。

その病巣の由来を簡単に予想するとすれば、子供の頃に升目の入ったノートで漢字の書き取りをやらされ(つまりカーニングとかに無頓着になる)、読書感想文などの類は原稿用紙で書かされ、漢字は少ない文字数で情報量を詰め込めることからすっきりとした表が書きやすく、何でもかんでも_表にしないと気が済まない_という日本人の悲しい習性に由来する物であろうと思うのだ。

まぁUnixでEmacsしか使わないというのと似たような話ではあるのだが、典型的なEmacsユーザーが扱うのは汎用的なテキストファイルであり、Emacs LISPでがんがんプログラムを書く(設定ですらLISPを書かねばならないので、多少は誰でも書く物だ)人が多い用に思われる。Excelの場合は、XLS形式という特殊なフォーマット(最近のはXMLなのか?)を用い、適当なワークシート関数などを表層的に使いこなしている人が多く、Excelの基本 …


Continue reading

2005年10月27日 木曜日

Posted on 2005年10月27日 (木) in articles • Tagged with PowerPoint, Excel, Photo, Portrait, Equipment

何でもかんでもPowerPoint症候群

前の職場は_何でもかんでもExcel_という会社であったが、今の職場はさらに何でもかんでもPowerPointで資料を作る風潮がある何とも言えないところだ。ちょっとした打ち合わせの資料(はっきり言ってグラフだけだったら、不満はあるにせよExcelやDelta Graphのグラフだけで十分)から業務引継まで、何でもかんでも呆れてしまうくらいPowerPointなのである。たしかにプレゼンするときはPowerPointの資料は凄くすっきりまとまって良いのだけど、いかんせんまとまりすぎちゃうのである。 特に業務引継をPowerPointでされちゃうと、あとで見ると項目しか残らないのである。 欲しい情報は項目ではなくて、その詳細なのだがどうして文章を書かないのだろう? 全く持って泣けてくる話である。

Wordを使いこなせとは言わない。どうせ今まであった人で僕以上にWordをちゃんと使いこなしている人を見たことがないので。せめて報告書や引継関係の書類はめんどくさがらずに、テキストファイルでいいからきっちり文章を書いて欲しいのである。

ビジュアルな物にだまされちゃいけない。学生の頃に「ワープロで書くと文章の校正能力が落ちるんだよ」といわれたことがある。綺麗な外見にだまされて中身のチェックがおろそかになるぞという教訓であろうと思うのだが、なんでも綺麗な …


Continue reading

2005年04月22日 金曜日

Posted on 2005年04月22日 (金) in articles • Tagged with Equipment, Excel, HTML, Network

国際化 R(GNU R-2.1.0)

4月18日にリリースされたR-2.1.0では正式にI18N対応になってますね。これまで日本語を使うだけで、それなりの苦労があったけど、今後はそんな苦労も無くなるのね。ああっ、すばらしい... 国際化をされた皆様ありがとうございます。これからがんがん使わせて貰います。ということで、ダウンロードしてみた。

Excel、有効桁が足りないみたい...

昨日の問題を乗り切ったかと思ったら、新たな問題を与えられてしまった。今日の課題は2個の独立変数(x, y)に対する測定値 z を、xとyの3次項までの多項式で当てはめを行いたいとのこと。xとyは10^8程度の大きさなので、3次項まで計算すると3次項の係数を計算するための必要な桁数は結構な桁数が必要だ。Excelで多重回帰してみたけど、欲しい値から若干ずれている。他の系での計算結果と比較すると言うことで、Mathematicaの非線形回帰(NonlinearRegress関数)とRの非線形回帰(nls関数)で計算した結果はほぼ欲しい値と一致しており、Excelでの計算で有効桁がまるで足りてないようだ。この手の計算にはExcelはやっぱ使うべきではないのかもしれない。

まぁ今回の場合は、xとyの値適当にスケールすればいいだけの話だけど...

送別会

今日は職場の送別会で飲み。

2次会のカラオケで、集まった仲間で歌い出したところ、尾崎 豊は良い …


Continue reading