Office」カテゴリーアーカイブ

VBAの条件評価式は短絡評価にならない

久しぶりにVBAをせこせこと書いているわけですが、関数の概略とかそういうのを全部自力で書くというのは骨の折れるもので、なんとなくの内容をClaudeに教えて関数を作ってもらいます。

当然、そのままでは動くわけもないのでエラーをつぶしていくわけですが、ぱっと見で何が誤っているのかがよくわからないエラーにぶつかりました

Dim tableNames(5)
For i = 1 to 5
    If i > 2 And tableNames(i) <> tableNames(i - 1) Then

ちょっと内容は端折りますが、2つの条件式があった場合に、一般的なプログラミング言語であれば一つ目の条件式評価の結果、以降の条件式を評価する必要がない場合はそもそも評価が実行されないのですよね。

これによって、Nullチェックや配列のインデックス範囲外アクセスを防いだりします。
ところがVBAでは、すべての条件式が評価されるようです。

初めて知りました。。。

何というか、やっぱりVBAは独特だなぁ。。。と

エクセルのファイルサイズがやけに大きかったお話

少しエクセルで資料を作っていたら、1シートで20行未満、20列未満という程度の情報量に対してファイルサイズが 5M を超えていた。
特に図形も絵も張り付けているわけでもなくテキストのみでこのサイズはどう考えてもおかしい。
ちなみにフォーマット形式は XLSX なので圧縮が効いているはず。100K すら普通はいかないはずだ。

XLSX 形式であれば、中身を確認することが出来るので調べてみることにした。

拡張子を ZIP へ変更し、中身を解凍。
変な絵が張り付いていないことを確認して、問題のシート情報のファイルを確認する。
今回はシートは一つだけなので

./xl/worksheets/sheet1.xml

を確認してみると・・・・

80Mを超えている。

このファイル。普通にエディタで開こうとするとファイルサイズが大きいのでまともに開かない。
しょうがなく、ファイルを分割して中身を確認すると、入力したデータ以外に

<row r=”7609″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7609″ s=”16″/></row>
<row r=”7610″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7610″ s=”16″/></row>
<row r=”7611″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7611″ s=”16″/></row>
<row r=”7612″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7612″ s=”16″/></row>
<row r=”7613″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7613″ s=”16″/></row>
<row r=”7614″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7614″ s=”16″/></row>

<row r=”1048575″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C1048575″ s=”16″/></row>
<row r=”1048576″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C1048576″ s=”16″/></row>

みたいなものが大量に書かれている。なんだこれ

 

想像してみる

データというわけではないので、セルに対しての属性情報が付与されていて、それが悪さをしているように感じる。
ただ、行の削除を行っても消すことが出来なかったので、行を選択した何かというよりはシート全体もしくは特定の列に仕掛けられた設定が生きているのだろう。

困った。

row タグは行データを取り扱っているとすると c タグが CELL を対象としていそう。
row タグ中の r 属性は行番号で、 spans 属性と x14ac:dyDescent 属性は謎だ。

c タグ中の r 属性は被るかもしれないが現在位置を表しているように見える
んー。cell の s 属性は 16 となっているのは何だろう。

 

調べてみた

dyDescent に関してはMS公式に説明が書いてあった。

http://msdn.microsoft.com/en-us/library/dd926776(v=office.12).aspx

要するに、double型の定義がされているということらしい。それだけ。ということは、x14ac のネームスペース中の定義として double と読むことが出来るのであれば、
x14ac はよくわからないけど Excel を意味するのではないだろうか。

と思ったら、ファイルの冒頭に

xmlns:x14ac=”http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac”

とあったので、大体理解があっていそう。

span 属性に関してはこちらに書いてあった

http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.row(v=office.14).aspx

要するに、データが入っている範囲を示すようで、この値はすべて同じになるようだ。
とすると、変だ。

現状では19行R列までデータが入っているので、

spans=”1:18″

になるはずなのだが。。。

 

ちなみに、シートのコピーではダメだったが新しく作ったブックにコピペしたら 22KB 程度のサイズになって、 spans も想定した値になった。

spans が変だったのは気になるのだが、それ以上に大量の row タグが作られてしまった原因のほうが問題なのだろう。

フォーマットの中身がなんとな~くわかってきたけれど、じゃ、どうすれば同じ状態を引き起こせるのか?という部分がさっぱりだ。
spans 属性の定義から言うと本来入る値とは異なっているので、ありていに言えば何かの操作の際にファイルがぶっ壊れたと考えたほうがいいのかもしれない。

うーん、壊れたのだとすると、これ以上追いかけてもあまり実りはないかな~。
とりあえず、少し調べ方に関して知ることが出来たので今日のところはよしとしようか

Office Web App

MicrosoftがHTML5で動作するOffice 「Office Web App」のベータ版を公開した

The new Office Web Apps
http://blogs.office.com/b/office-next/archive/2012/07/20/the-new-office-web-apps.aspx

早速試してみた。

私が家でメインとしているiMacにはOfficeはインストールしていないのだが、
SkyDriveを利用している場合は、特に何もせず下記のリンクをクリックするだけで動作した

SkyDrive向け特設リンク
http://skydrive.live.com/?officebeta=1

上記リンクからSkyDriveを表示させると。。。

 

SkyDriveのページ上にWord, Excel, PowerPoint, OneNoteのマークが有る。
ちなみに、これはGoogle Chromeで動作させている。

 

 

Wordを軽く動かした程度では何とも言えないのかもしれないが、かなり軽快に動いている。
簡単なショートカットキーも使えるようなので、結構有用だ。

 

 

パワーポイントは、テーマ数が少ないのが気になるが、そのうちどこからかインポート出来るようになるのではないだろうか。
プレゼンテーション時にパワーポイントがインストールされているPCを利用しなくても十分行けるのではないかと思ってしまった。
アニメーションに関しても、問題なく動作しそうだ

 

 

保存される形式は、マクロ等が使用出来ないxlsxやdocxのような拡張子となる。
“Save as”では、拡張子を含んで名前を指定する事が出来たのでxlsなどの拡張子で保存出来るか?と思ったが、
ファイル名に”.xls”が付いただけという何とも悲しい結果に終わった。

駆け足で見て行ったけど、かなり使えそうな印象を受ける。
家のPCでOfficeを利用する事というのは限られているので、料金体系次第ではこの辺りのサービスは
わざわざソフトを購入するよりも遥かにコストパフォーマンスがいい。

Office2013と関連して出てくるとすると、実際のサービス開始は来年になるのかもしれないが、
ちょっと気にしておきたいサービスだ。

Office2010βのアンインストール

MSOfficeの2010βをこれまで利用していたんだけど、11/1って事で利用期限が切れてしまった。
会社ではMSDNを利用しているので2010のライセンス登録を行っても良かったんだけど、申請が面倒だったのでアンインストールすることに。アンインストールで元々利用していたOffice2007にしようとした。
ところが、ここで罠にはまった

Outlook2007を起動させようとするも、起動せずにエラーメッセージが表示される。

「MAPIがインフォメーションサービスmspst.dllをロードできません」

さて、困ったぞ。
ということで早速グーグル先生に聞いてみると、いくつかのページを指南されたが、どれもぴったり来るものがない。
さんざん困った挙句にOffice2007の修復セットアップを実行してみたけど結果は変わらなかった。どういう事だろうか。

System32かOffice12の下だと当たりをつけてクライアントPCを検索してみると、mspst.dllなるファイルがそもそも見つけられなかった。会社の同僚のPCを見てみると、Office12フォルダの直下にmspst32.dllがあったので、これを自機にコピー。Outlookを開いてみるとなんとか開くことができた。

うーん、Office2010アンインストール時に持って行かれた??

とりあえず、なんとか使えるようにはなったけど、どうも連絡帳とのリンクが上手く行ってないようでメールを書いているときに、連絡先候補が正常に表示されない。うーん、ただでさえバージョンダウンしているので機能が低下しているのにそもそもの機能すらまともに動かないとなるとさすがにテンション下がるなぁ。

以前はWindowsMobileを利用していたのでOutlookとの親和性を享受で着ていたんだけど、今はiPhoneだから、それほどOutlookに拘る必要もないように感じる。いや、確かにOutlookとiPhoneも連携してくれるからそれはそれで重宝しているんだ
けどね。
でも、多分他のメーラーでも共有できるだろうし、予定表はグーグルカレンダーでもいいしなぁ

さてはて、どうしようかしら。

散々迷ったが、連絡先とOutlookとの関連付けを復旧させることに。ただ、それっぽい文書を見つけることが出来ずに苦労していたけど、最終的には

  1. Outlook2007のアンインストール
  2. Outlook2007のインストール

という、なんとも悲しい操作によって復旧した。

修復セットアップで復旧してくれないことにもちょっとがっかりだし、この手順を踏んでもOutlook起動時に「新しいバージョンのOfficeで作られたデータファイルだよ」って文句のメッセージが必ず表示されてしまう。
うううむ。やっぱり近いうちに乗り換えを検討かな?

タスクに入れて満足していませんか

先日のエントリに続いて、Outlookを使った仕事術(?)。今回はモバイルとの組み合わせに関してである。

以前使っていたのはウィルコムのW-ZERO3。

f:id:krote:20080806060358j:image

つまり、OSはWindows Mobileだった。これにはモバイル用のOfficeがインストールされていて、PCと接続すると一部のOffice内の情報が自動的に同期をとってくれていた。OneNoteすらである(OneNoteの場合は完全な同期というよりは”モバイル用のノート”が同期されることになる)
これによっていつでもタスクを把握し、出先であっても容易に管理が可能だった。

iPhoneも実はiTunesの設定を行う事で、Outlookとの同期をとってくれるのである。同期内容としては

Outlook iPhone
アドレス帳 連絡帳
スケジュール カレンダー
メモ メモ

あれ?
タスク(仕事)は?
考えてみるとiPhoneにはタスクを管理するためのソフトが無い。いや、勿論iTunesには有るだろうけどそれでは同期が取れない。タスクをWebで管理する事も考えたが、そこだけWebで管理するというのもそれはそれでわずらわしい。
何かしらソフトを組み込んで…とも考えたが、iTunesに対して組み込むことが出来なければそもそも同期をしてくれないんじゃないか?ということに気がついてボツ。一番まともな連携手段としては、OutlookとWeb上のタスク管理サービスと連携させ、それをiPhoneで読み込む…というところかな。Outlookで同期を忘れた瞬間に破たんしそうだ。
こんなものぐさな私がそんなことを出来るはずがない。

タスクをタスクのままにしない

あれこれ考えた結果、タスクをただのタスクにしておくから問題になることが分かった。つまり、
「あ、この仕事やらなきゃ」
「これはやっておくべきでしょう」
とタスクリストに組み込んだのであれば、ちゃんとスケジュールに落としこまないといけませんよ?ってことです。

スケジュールになっていればiPhoneのカレンダー情報と同期をとることができるし、スケジュールになっているのだから実際に考えていたタスクが実行されるようになる。
これまでの私は「やらなきゃね」って思ってタスクに入れていても、それがいつまでたってもタスクに入りっぱなしの状態にあった。こういうリストだといつまでたっても減っていかないし、本当にタスクなんだかメモ書きなんだか訳が分からない。
信頼できないタスク一覧になってしまうわけだ。

さぁ、タスクリストの威厳を取り戻さなければ!

Outlookの有効利用

アナログのノートはノートで重宝するのですが、一日の大半をPCの前で過ごす私にとってはデジタルを有効活用しないのは非効率になる。という訳で、珍しくも何ともないが、Office2007 Outlookに関して書いてみたい

Office2007になってから、特に深い意味はなかったのだがメーラーをOutlookにしてみた。起動は遅く、動作も決して軽快とは言えないが悪いところばかりではない。メーラーは勿論の事スケジュール管理やタスク管理、メモ機能を備えているので、使い方によっては化けると思う。他のOffice製品との連携。特にOneNoteとはいいように感じる。
ああ、そんなマニアックな製品はいいや。誰もついていけない

メールをタスクにする

f:id:krote:20091017002715j:image

これがOutlook2007のメール受信画面。
真ん中と左の領域は至って普通のメーラーでありがちな受信用(振り分け)フォルダ一覧と、そのフォルダ内メールの一覧。ただ、Outlookでは右側にさらに直近のスケジュールを表示する欄と、”仕事”と呼ばれるタスクリストを表示する領域がある。
最初使い始めた時は、メーラーの領域を広く取りたいために仕事領域は非表示状態にしていたのだが、タスクリストを使うようになってから表示させていることの有用性を知った。
メールを受信し、それを右側にある”仕事”欄にドラッグ&ドロップすることでメールそのものをタスク(仕事)一覧に乗せることができる。これはメールがタスクのきっかけであったり、タスクの詳細内容がメールで送られてくる場合に結構役に立つ

タスクをスケジュールに設定する

f:id:krote:20091017002739j:image

設定したタスク一覧はスケジュール画面でこれもドラッグ&ドロップでスケジュール欄に設定することができる。一度設定したスケジュールとタスクはここで関係が切れてしまう。
なので、スケジュール上の時間が過ぎたからといってタスクが自動的に完了になることは無い。タスク完了時には明示的にタスク完了を行う必要がある

このように、仕事依頼のメール受信→タスク設定→スケジュール設定が一つの流れの中で行うことができる。

こんな機能が欲しい

欲を言うと、仕事を細分化させる機能が欲しいと感じている。
メールでやってきたタスクは、実際のところ大きい塊であってスケジュールに落とす際にはもう少し細分化したタスクになることが多い。仕事を細分化させ、それらの子タスクがすべて完了した段階で大元のタスクが完了するというような仕組みだ。
言ってしまうと”仕事”が一つのプロジェクトという位置づけだ。

以前、Outlookから仕事一覧の情報を引っこ抜いて、それを別アプリで管理しようとC#でガリガリとプログラムを作ってみたのだが、にわか仕込みの腕前では思ったようないいものが出来なかった。
というか、作り始めて途中で興味が薄れて別なことに取り掛かってしまったという何とも身も蓋もないオチなんだけど・・・
え、作れって?その当時はC#やりそうな雰囲気だったけど今は全くそんな感じじゃないんだよな~
うむむむ

また、メールをスレッドで表示する機能があってほしい。全然できないわけじゃないんだけど、これに関してはBecky!!のほうが圧倒的に使いやすいと思う。このあたりの改善が旨い事行われるといいな~

Office2010に関してはまだ見ていないので何とも。ただ、この点に関してはたぶん変わってないんじゃないかな…

Accessテーブルで#Deletedレコードが消えない

Microsoft Access を使って簡単なツールを作って社内で使っているんだけど、ユーザーから「データが削除できない!」って連絡があった。

見てみると、

  • 問題になっているのはテーブルのデータ
  • テキストフィルタで対象を抽出する事が出来るんだけど、全ての列が「#Deleted」になっている
  • 行を指定して削除を実行しても、再度検索するとまた表示される
  • 再起動させても状況は変わらない

「#Deleted」はフォームを開いている状態でレコードをテーブルから削除したときに表示されるのはわかっているが、リンクを張っているわけでもないテーブルのデータが直接そういう状態になっているのは初めて見た。
複数の人間が同時にテーブルにアクセスしている中で、どっかの誰かが処理例外でも引き起こして中途半端な状態が出来あがってしまったのだろうか?結局原因はわからなかった。
とりあえず四苦八苦して対処方法を考えてみたがいい方法が浮かばず、最終的には「Accessのテーブルぶっ壊れた」として、

  1. 新規のAccessファイルを作成
  2. 外部データ取り込みを利用して対象のMDBからインポート

を実行。「#Deleted」はシステム的なレコードなのでインポートした段階で既に無くなっており、不正な状態は解消された。
それにしても…やはりAccessを多人数で使うのは無理があるか。Oracleに乗り換えたいところではあるが、ライセンス費用もばかにならないので苦しいところだなぁ

OfficeIME2007を削除する

いつまでたっても学習しない。それどころか時々アルツハイマーにかかってしまうOfficeIME2007を削除する方法。リクエストがあったので書いてみる

f:id:krote:20080822231704j:image

まず、Office2007をインストールするとなぜか元々入っていたIMEが消えているのでこれを復活させる。IME設定画面を開き、追加ボタンを押す

f:id:krote:20080822231705j:image

日本語の中の「Microsoft IME」を選択する

f:id:krote:20080822231706j:image

規定の言語設定でOfficeIME2007からMicrosoft IMEを選択する。規定を変更することによって、下のリストのOfficeIME2007が削除できるようになるので削除を押す

f:id:krote:20080822231707j:image

きれいさっぱりなくなりました。

OfficeIME2007は、がんばって丁寧に”調教”すればかなり使いやすくなる。たぶん。
でも、普通に使いたいだけの人にそんな”調教”を強いるのはおかしい。そういう意味では根本的に間違っているのではないかとすら思えてくる。それでもやっていけるのはやはり巨人だからだろう。恐るべし

Outlook2007 + Advanced[es]利用率向上中!

最近、スピードハックス朝食会やGTD勉強会、その他勉強法のビジネス書を読んでいる影響で、自分が抱えているタスクをより記録できる方法がないかを色々と試行錯誤している。とりあえず、あまり活用してこなかったOffice2007のOutlookについている「仕事」機能(ToDoリスト)をうまいこと使えないか試している。

OutlookでToDoリストを行う利点は、メールをそのままToDoリストへとドラッグ&ドロップで入れることができる。もちろん受信トレイに未作業のメールを残しておいて作業を終えたものから別フォルダへ移動させるのもありだけど、期限が先のものに関してはToDoリストに入れて受信トレイに残っている数を減らしたい。そんな時に使える。

そんな感じで使っていたのに加えて、通勤中などの移動中に思いついたものに関してはAdvanced[es]の「仕事」機能へ登録。PCにUSBで接続して同期をとる事でToDoリストへ追加することができる。Advanced[es]では基本的に思いついたタイトルのみを記入して詳細な内容は同期をとってからPCで入力するようにしている

f:id:krote:20080806060358j:image

使える!使えるじゃないかAdvanced[es]!と、思ったが、この「仕事」機能に関してはもう少しかゆい所に手が届いてほしい。確かに「仕事」という形でタスクを追加することはできるんだけど、最近の勉強会やビジネス書で学んだ「タスクをできるだけ細かい単位で区切る」という事をやろうとした時に、分割したタスクがもともと何の塊だったのかがさっぱりわからなくなってしまう。OutlookのToDoリストはすべてのタスクが同一の階層に存在している感じのつくりになっているのだ。これはもう少しうまくならないか。ちょっと考え中。これは何とかすることができるんじゃないだろうかと思う。

通信速度が遅いのはもうPHSだからしょうがないのかもしれない。iPhoneやD4をどんなにうらやましがったところでこれは変わらないだろう。

どちらかというと勢いで購入したAdvanced[es]。もう少し活用してあげなければ!ただの金食い虫だ!

Open XML Format

わんくま同盟のひろえむさんのブログでOpen XML Format SDKに関するリリース案内がされていました。

Open XML Format SDKが公開されています。 (ひろえむの日々是勉強)
http://blogs.wankuma.com/hirom/archive/2008/06/11/142774.aspx

少し前にMicrosoftで行われたひろえむさんが講師として開催されたセミナーに参加したかったのですが時間の都合がうまく付かず、出ることができませんでした。残念。というのも、標準化だとかODFとの比較だとかの記事は多いもののOpen XML Formatその物に関しての記事があまりなかったりして実際にどうするのかを調べようにもちょっと迷ったりしていたんですね。あ、英語読まないといけないってのはもううすうす感づいては来ているんですが。。。

それにしても日本語のドキュメントのなさには本当にOffice2007はリリースされているのだろうかと疑問に思えてくるぐらいにないですねぇ。うまいこと使い易ければ使える場所がないかと検討したいところなので、このSDKやひろえむさんの記事中にあるリンクから少し探ってみようかな。。。。

むー。先は長そうだ