TEMTECOMAI ORTHOSTATIC HYPOTENSION

元ダメプログラマで現ダメ中間管理職の駄文

カテゴリ: Office

こんな現象があるなんて気づかなかった。 今まで作ってきた数多くの表は大丈夫だったろうか。。。

Microsoft サポート情報

Excel でハイパーリンクを設定した後に並べ替えるとリンク先が変更される
https://support.microsoft.com/ja-jp/help/410238

今まで数多くの表を作ってきたが、その中にこの条件を満たしてしまっている物はなかっただろうか・・・あったんじゃないかなぁ。

紙をスキャンして作った PDF ファイルを管理するために Excel で管理表を作り、各行に PDF ファイルへのハイパーリンクを仕込むケース、きっとあるよね。

既にハイパーリンクが設定されている Excel の表で並び替えをすると、ハイパーリンクが解除されたり、どこか別のセルに移っちゃったりと、それはもう滅茶苦茶になるらしい。
上記のサポート情報ページにある再現手順セクションにある結果がエグイこと。

原因は開示されてないよ

再現手順と回避策までは書いてあるけれど、原因までは説明されていない。
「マイクロソフト製品の問題として認識している」 とまでは書いてある。

ちょっと考えてみた。

VBA のオブジェクト モデルで考えると、一つの Excel ファイルである Workbook オブジェクトは、複数のワークシートを表す Worksheets コレクションを持っている。
Worksheets コレクションは、1枚のワークシートを表す Worksheet オブジェクトの集合体。
単体の Worksheet オブジェクトは、複数のセルを表す Cells コレクションを持っている。
Cells コレクションは一つのセルを表す Range オブジェクトの集合体。(ちょっと違うけど)

現在のブックの一番左側のシートのセル A10 の文字を変更するには
ThisWorkbook.Worksheets(1).Cells(10,1).Value = "hoge"
てな風に書く。(もちろん Range でやる場合もあるけれど)
セルにハイパーリンクを設定する場合も、作り手の感覚的には 「とあるセルにハイパーリンクを設定する」 って感じなので、
ThisWorkbook.Worksheets(1).Cells(10,1).SetHyperlink(アドレス, 表示文字列)
みたいに想像するけれど実際は違うらしい。(使ったことないので今回初めて知った)
ThisWorkbook.Worksheets(1).Hyperlinks.Add(セル番地, アドレス, 表示文字)
みたいな感じなんだと。(実際はもう少し引数があるけど)

びっくりポイントがいくつか。

  • ハイパーリンクはセルのプロパティからではなく、シートごとの Hyperlinks コレクションから操作する
  • Hyperlink オブジェクトは 「どこのセルで使われているのか」 を保持する Range というプロパティを持っている
  • Hyperlink オブジェクトは 「セルに表示する文字列 (クリックする対象の文字列)」 を保持する TextToDisplay というプロパティを持っている

あらやだ、セルの子分じゃないじゃん。 完全に独立してるじゃん。 というかセルに表示する文字まで握っちゃってるじゃん。
これを踏まえると、セル側の都合で並び替えをしちゃうと Hyperlink が追従 (各ハイパーリンクが持つ Range プロパティの値をソート後のセル番地に変更する) してないんじゃないかな、なんて想像をしちゃうのだが、先のサポートページの再現ドラマではもっとえげつない結果になっているので予想は外れているようだ。
というか、Excel 2016 で試してみたら正常に並び替えができてたし。
Excel 2010 では再現するが、Excel 2016 では解消済みってことか。
「最新のバージョンにしてください」 の一言で解決する話かよ。
もちろんそんな事を軽々しく言えればの話だが。

クイック操作による新規メール作成では宛先, cc, bcc, タイトル, 本文, フラグ, 重要度などをあらかじめ定義しておけるため、こりゃほぼほぼテンプレート機能じゃないか、というのが前回の記事

しかしクイック操作による新規メール作成の定義では、本文はプレーン テキストに限られており、HTML メールのような装飾は入れることができません。
定型業務報告などでメール本文で済ませるような場合に表を使いたいこともあるのですが、テンプレート機能だと呼び出し操作の手数が多いので困ってしまいます。

そこでもう少しクイック操作について深掘りしてみたところ、メールを新規で作成させるジョブじゃなくても同様の事ができる気がしてきました。

テンプレートとなるメールを下書きフォルダーに保存しておき、その下書きメールを複製して編集 → 送信ってする手順をクイック操作でやってみる。
  1. 新規メール作成画面を開き、定型化する要素を入れ込んでいく。
  2. 一通り作成したらメールを下書きに保存する。(作成画面を閉じようとすると聞いてくる)
  3. [ホーム] タブの [クイック操作] を開き、[新しいクイック操作] - [ユーザー設定] をクリック。
  4. 適当な名前を付ける。
  5. 「フォルダーへコピー」 のアクションを選択。
  6. コピー先のフォルダーとして 「下書き」 を選択。
これで準備完了。 次は本番
  1. 下書きフォルダーを開き、テンプレートとなる下書きメールを選択。
  2. [ホーム] タブの [クイック操作] から、先ほど作成したクイック操作を選択する。
  3. 選択した下書きメールが下書きフォルダーに複製される。
  4. 複製されたメール (どっちでもいいけど) をダブルクリックして編集画面を開き、必要な修正を加えたら送信する。
手順としてはこんなもんですかね。

他に、定型句的なアプローチ方法も使えそうだ。
いわゆるクイック ギャラリーってやつですね。 クイック ギャラリーにユーザー独自の本文パーツを用意しておき、これらを挿入してメールを組み立てていく。 本文にバリエーションを持たせる場合に使えそうなので、定型業務向けというよりは、会社のメール文化や自分のスタイルに合わせた定型文パーツを複数用意しておいて、これらを組み合わせてビジネスメールを作成するって感じでしょうか。
  1. メールの作成画面で本文をある程度作りこむ。
  2. クイック パーツに登録したい箇所をマウスでドラッグして選択する
  3. メール作成画面の [挿入] タブにある [クイック パーツ] から [選択範囲をクイック パーツ ギャラリーに保存] を選択する。
  4. 適当な名前を付け、オプションが 「内容のみ挿入」 となっていることを確認する。
これで準備完了。 次は本番
  1. いつものように新規メール作成画面を開く。
  2. 作成画面の [挿入] タブにある [クイック パーツ] を開き、本文に挿入したいクイック パーツを選択する。
タイトルや宛先を定義しておくことはできないのでガチガチの定型メールでは扱いづらいのも否めない。
これらをテンプレートや下書きで定義しておき、いくつかのパターンが考えられる本文の一部に対してクイック パーツを使うという手もあるって話ですね。

Outlook 2010 やら 2013 での話。 (2016 はまだ使っていないのでわからない)

せっかく作ったメール テンプレートですが、これを使って新規メールを作成するまでの手順がひどすぎる。
[ホーム] タブの [新規作成] グループにある [新しいアイテム] をクリックし、その中の [その他のアイテム] の更に奥の [フォームの選択] をクリックすると 「フォームの選択」 というダイアログが出る。
POP3 のメール設定だからなのかもしれないが、「フォルダーの場所」 のドロップダウン ボックスで 「ファイル システム内のユーザー テンプレート」 を選択し、一覧に表示された中から目的のテンプレートを選択して [開く] ボタンをクリック (またはテンプレートをダブルクリック) する。
これでようやくテンプレートを使った新規メールが開く。

Outlook 2013 : メール テンプレートへの長い道のり

Outlook 2013 : フォーム選択ダイアログ

定型メールを手早く作成するためのテンプレートも、呼び出すためにマウスを何度もクリックせにゃならんと面倒になってきて、だんだんと使わなくなり、しまいにゃ前回送ったメールを元に新規メールを作ったりするようになる。

そこで Outlook のクイック操作が登場。
[ホーム] タブの [クイック操作] グループにある [新しいクイック操作] から [新しい電子メール] を選択。
このダイアログで宛先、タイトル、本文などを保存しておくと、クイック操作の一覧からワンクリックで定型メールが作成できるようになる。

Outlook : クイック操作

これで定型メールを連発することが可能になった。

Office 365 Enterprise E3 にサービス リクエストで対応していただいたのでメモ。

結論から言うと現時点で MSI の Office 製品と、クイック実行の Office 製品を同居させることはできないとのこと。

回避策として OneDrive for Business のフォルダーを PC にマウントする方法を教わった。
一つ目の方法はネットワーク ドライブ。 もう一つは 「ネットワークの場所を追加」 ってやつ。


OneDrive for Busines のサイトをネットワーク ドライブとしてマウントする

とりあえず馴染みのあるネットワーク ドライブで OneDrive for Business の個人サイトをマウントしてみる。
WebDAV ってやつですかね、これは。

まずは自分の OneDrive for Business の URL をメモする
portal.office.com に行って Office 365 にサインインする。 この時 [サインインしたままにする] にチェックを入れておく。
ポータル画面が表示されたら OneDrive のアイコンをクリックする。
自分が今 [ドキュメント] にいることを確認。
リボンの [ライブラリ] をクリック。 [接続とエクスポート] の [エクスプローラーで開く] のアイコンをクリック。
(OneDrive の画面にリボンが表示されていなかったら右上の歯車アイコンをクリックし、[リボンを表示] のメニューをクリック)
エクスプローラーが起動し、OneDrive for Business に保存してあるフォルダーやファイルが表示される。

この時の URL がこんな感じ。
https://AAA-my.sharepoint.com/personal/BBB_BBB_BBB_BBB/Documents
AAA の部分は Office 365 に設定しテナント名で、BBB_BBB_BBB_BBB が自分の名前。

IE の [インターネット オプション]-[セキュリティ] で [信頼済みサイト] を選択して [サイト] ボタンをクリック。
上記 URL の https://AAA-my.sharepoint.com を信頼済みサイトとして登録しておく。
面倒ならば https://*.sharepoint.com としてもかまわない。
これで準備完了。

コンピュータを右クリックして [ネットワーク ドライブの割り当て] をクリック。
空いているドライブ レターを選択し、フォルダーの場所に上記 URL を入力する。
https://AAA-my.sharepoint.com/personal/BBB_BBB_BBB_BBB/Documents
エラーが出なければこれで完了。

しかし小さな問題が一つある。
作成されたネットワーク ドライブの名前がひどすぎる。
一般的に C ドライブなら "Windows" とかの名前が入っているのだが、OneDrive for Business をマウントしたドライブの名前はやたらと長い。 名前の後ろに (Z) って表示さるべきドライブ レターが欄外になってしまうほど。
ドライブの名前は自由に変更可能なのだが、一部の情報によると翌日には元に戻っていたって話もあったので経過観察する。


もう一つ。 明日以降もこのネットワーク ドライブを使い続けるための注意点。
次回起動時、ドライブの再マウントで使われる認証情報は、IE で OneDrive for Business (というか Office 365 かな) にサインインした時の [サインインしたままにする] で保存される情報に依存しているらしい。 Office 365 がサインイン状態を保持してくれるのは最大 5日間で、[サインインしたままにする] にチェックを入れなかった場合は 8 - 10時間程度とのこと。
この資格情報が有効期限になってしまうとネットワーク ドライブの自動マウントができなくなってしまうため、再度ブラウザから Office 365 にサインインする必要があるとのこと。

これらの工程がうまくいかなかった場合の参考情報が Microsoft のサポート情報 KB2616712にある。
https://support.microsoft.com/ja-jp/kb/2616712


ついでに OneDrive もネットワーク ドライブとしてマウントしてみた

今までローカルと同期させていた一般向け OneDrive も OneDrive for Business と同様にローカル同期をやめ、ネットワーク ドライブでアクセスするようにしてみた。
OneDrive をブラウザで開き、ドキュメント フォルダーに入る。
https://onedrive.live.com/?id=AAAAAAAAAAAAAAAA%21133&cid=BBBBBBBBBBBBBBBB&group=0
URL の中の BBBBBBBBBBBBBBBB の部分が自分の ID なのでコピっておく。
ネットワーク ドライブの割り当てを行うウィザードを実行し、フォルダーの欄へ以下のように入力する。
https://d.docs.live.net/BBBBBBBBBBBBBBBB
これでマウント完了。


[ネットワークの場所を追加] ってやつ

これもネットワーク ドライブをマウントするウィザードとほとんど一緒。
違いとしては、ドライブ レターを選択する必要がないのと、場所に対する名前をウィザードの中で設定できるって点。 最初から短い名前を付けられる。

各種情報によるとネットワーク ドライブでマウントした場合も、単にネットワークの場所を追加した場合も、利用する側から見ればドライブ レターの有無ぐらいしか違いがないような事が書いてあるのですが、試してみたところ次の場合は明確な違いが現れた。
複数の PC を使って作業がしやすいように IE のお気に入りを共有しているのだが、お気に入りフォルダーを右クリックして [場所] タブに OneDrive のフォルダーへのパスを入力する際、ローカル同期させている OneDrive のフォルダーや、ネットワーク ドライブとしてマウントした OneDrive のフォルダーなら OK なのだが、「ネットワークの場所」 でマウントした場合はパスが通らない。
恐らく URL 形式のパスでは設定できないのでしょう。

したがって OneDrive および OneDrive for Business はネットワーク ドライブとしてマウントする事にした。

Windows 7 Professional x64
Office 2010 Professional Plus x86 (VL) (Access, Excel, PowerPoint, OneNote, Outlook, Word)
Visio Professional 2013 x86 (Technet サブスクリプション版)
OneDrive 同期アプリ
OneDrive for Business 同期アプリ (x86)

という構成。
導入した順番も多分上記の通り。
バージョン違いの Office ファミリーが同居しているため、Office アップロード センターとかいうツールが 2種類常駐している。 (仕様だとする Microsoft のアーティクルを見かけたことがある)

何かをきっかけに 「申し訳ありませんが、この操作を行えません。互換性のない Office 製品がコンピューターにインストールされます。」 というメッセージが表示されて OneDrive for Business 同期アプリ (Groove.exe) が起動しなくなってしまう。
多分 Windows Update が原因なんじゃないかと思っている。
先のエントリーのように Windows Update の払い出しをした後に出ているような気がする。

Visio Professional 2013 は OneDrive for Business にネイティブ対応しているので、OneDrive for Business のサイトに保存されているファイルを直接操作することができるのだが、Office 2010 はネイティブ対応していないので同期アプリでサイトとローカルを同期させ、ローカルのファイルを Explorer から開くようにしている。

とりあえず Office 2010 Professional Plus のライセンスが 2013 で購入されたものかどうか確認し、2013 をインストール可能なら Office 2010 から Office 2013 に鞍替えしちゃえば今回の 「利用者としての問題」 は解決だね。
Office 以外のファイルも OneDrive for Business に保存するので同期ツールをインストールするのは仕方がないとしても、Office の 2010 と 2013 が同居してるところから来るトラブルの種は排除できるかな。


とか思っていても、最大の難題が残ってしまう。
無償版 OneNote 2013 を試そうとしたときにも乗り越えられなかった問題。
Windows インストーラー (MSI) によってインストールされる Office 製品と、クイック実行 (Click to Run) によってインストールされる Office 製品を同居させられないという問題。
Office 365 と無関係な Office 製品 (今回の場合は VL 版の Office や Technet サブスクリプション版の Visio) を使わなきゃならないのは固定なので避けられない。
そこに OneDrive for Business 同期ツールをインストールしたいのだが、こいつがクイック実行版のインストーラーなためにインストールできないという予想。
ここら辺の情報があまりない。
せっかく Office 365 Enterprise E3 を購入しているのだからサービス リクエストで質問してみようと思う。

知らなかったよ。
ショックだよ。
邪魔で仕方がないんだよ。
メール一覧の下に閲覧ウィンドウを配置してるのだけれど、現在表示しているメールの件名、送信者、送信日時、宛先が表示されている 「ヘッダー情報」 と呼ばれるエリアがでかすぎるわけですよ。
Outlook 2010 閲覧ウィンドウのヘッダー情報エリア


きっとビューの設定なんだろうなーと思い、[表示] リボンの [現在のビュー] - [ビューの設定] と行き、[その他の設定] に入ってみると [閲覧ウィンドウ] というセクションがあって、[ヘッダー情報を表示しない] という選択項目があるわけです。
ヘッダーを表示しない


ここにチェックを入れてみたんですが、一向に閲覧ウィンドウの様子が変化しない。
したっけコレですよ。
You cannot hide header information in the Reading Pane in outlook 2010
Outlook 2010 の閲覧ウィンドウのヘッダー情報を非表示にすることはできません
Microsoft サポート情報 KB2301453

「非表示にできないよー困ったよー」 っていうトラブルをネタにしたタイトルが機械翻訳でおかしな事になってるのかって思ったけど、どうも違うみたいだ。

In Microsoft Outlook 2010, you click to select the Hide header information check box to hide an email message's header information in the Reading pane. However, the header information is not hidden as expected.

Outlook 2010 は閲覧ウィンドウでメール メッセージのヘッダー情報を非表示にするチェックボックスを選択してもヘッダー情報が隠れませんよ。


なんだと?
原因はなんなんだ?
This issue occurs because the "Hide header information" functionality was removed from Outlook 2010. However, the UI setting was not removed.

この機能は Outlook 2010 で削除したんだ。 でも設定画面は残ったままだからね。


奥歯ギギギですよ。

OneNote が無償化されてたのは知ってた。 つかそれは iOS とか Android とか OneDrive サイトで利用できる Web 版の話かと思ってたんだけど、Windows 用デスクトップ版とかストア アプリ版も無償化されてたんだね。

Windows 7 の PC で Office Professional 2010 と単体の Visio Professional 2013 と Project Professional 2013 を使っていまして、Office 2010 に含まれている OneNote 2010 を主に使ってました。 (Windows 8.1 + Office Professional 2013 + Visio Professional 2013 なんてのも使ってはいるが)
んでどうも無償版の OneNote 2013 は商用利用不可で一部の機能に制限があるという形で登場したのですが、何やら 「サポートに問い合わせたら商用可能と言われた」 とか 「OneDrive だけじゃなくてちゃんとローカルに保存できた」 なんて声もあるわけですが、とにかくまぁテストってことでインストールしてみました。

  1. Office Professional 2010 の OneNote 2010 をアンインストール。

  2. OneNote 2013 (32bit) のインストーラーをダウンロード。

  3. インストーラーを起動。

  4. 即エラーで続行不可。



We're sorry, Office Click-to-Run installer encountered a problem because you have these Windows Installer based office programs installed on your computer:

Microsoft Visio Professional 2013
Microsoft Project Professional 2013

Click-to-Run and Windows Installer editions of office programs don't get along for this version, so you can only have one type installed at a time. Please try installing the Windows installer edition of Office instead, or uninstall your other Windows Installer based Office programs and try this installation again.

なんだろね。
今回インストールしようとした無償版の OneNote 2013 は Click-to Run Installer ってタイプのインストーラーなんだね。 日本語にすると 「クイック実行」 って言うらしく、Office 365 に付属するデスクトップ版 Office でも聞いたような気がする。
Visio 2013 と Project 2013 がインストールされているからクイック実行のインストーラーに問題が発生した、と。
Office 用のインストーラーはクイック実行か通常の Windows インストーラー版のどちらかひとつしかダメ。 Windows インストーラー版の OneNote 2013 をインストールするか、または Windows インストーラー版の既存の Office 2013 製品をアンインストールしてから再度 OneNote 2013 をクイック実行でインストールしてみてね。
ってところですかね。

無償版 OneNote 2013 に Windows インストーラー版が存在するのかっていうと多分存在しないでしょうね。 選択肢としては Visio と Project をアンインストールしてくださいっていう一択になるんでしょうかね。
クイック実行で OneNote 2013 をインストールしたあとから Visio もきちんとインストールできるんでしょうかね。 この Visio、今は亡き Technet の有料サブスクリプションで iso をダウンロードしたものだったんだけど、ちゃんと入るんでしょうかね。 (Project は使わないのでアンインストールしちゃおう)
なんだかドツボにはまりそうな気がするので、素直に Office 2010 の OneNote を復活させたほうがいいんじゃなかろうか。

ちなみに無償版の OneNote 2013 インストール関連で得られるエラー情報としては 「すでに 64bit 版 Office 2013 をインストールしてあるのなら OneNote 2013 も 64bit版を使いなさい」 とか、「既にインストールしてある Office 2013 をきれいさっぱりアンインストールするための Fix it があるよ」 といったところ。
なぜ Fix it を使わなきゃならなくなったのかまでは読んでませんが、もしかしたらオイラのケースもここらへんに関係しているのかな。

ということでまずは OneNote 2010 に落ち着こうと思う。
しかし 2013 に比べると随所で使いづらさが目立ってしまう。 個人用 OneDrive と Office 365 の OneDrive for Business の両方にアクセスできるようにしておきたいのだけれど、ここら辺のアカウント管理が 2013 のほうが優秀なので。

昔に比べて C# からも扱いやすくなったって話を聞いたんで C# でやってみました。
確かに扱いやすくなっている。
VBA の時にスルーしている Workbooks とか Worksheets とか Cells あたり、VSTO の記事ではきちんと漏らさず参照しては解放してあげないとならないって話だったけど、今回は VBA のようにスルーしてみた。
ドキュメント レベルのカスタマイズで、こいつが中心となって 2種類のファイルを読み込み、新規ブックにシートを 3つ作成してデータを吐き出す。 特に Excel のプロセスが残るようなトラブルもありませんでした。
いやー面倒くさくない。 楽ちん楽ちん。

とは言え、所詮は Excel の COM オブジェクトのラッパーでしかないので、セルへのアクセスが多いと速度が出ないですね。
Worksheet オブジェクトのインスタンス内包し、各種の独自メソッドなどを組み込んだクラスを作成してガツガツと数万件のデータを読み込んでは加工して出力していったんですけれど、数万件のデータを 1件ずつセルから入出力してるとスピードの遅さが気になって仕方がない。
ならば処理の進捗をカスタム作業ウィンドウにプログレスバーなどで表示してみようと思ったのですが、これも所詮は Excel です。 長い処理を行うプロセスから進捗具合を Excel の作業ウィンドウで受け取る術がない。
スレッドを分けるとかできないんですね。
というか VBA のようにカスタム作業ウィンドウのコードに処理を詰め込んでしまえばプログレスバーに進捗を表示できるんでしょうが、いくらなんでも開発言語のメリットを殺してますよね。

Excel アプリケーション自体を駆動することを諦め、Excel のドキュメントをコントロールするライブラリを探す時間がなかった。
2年ぐらい前に ClosedXML ってライブラリを使ったんだけど、ライブラリの完成度がいまいちだったのでいろいろ泣かされた記憶がある。
今はもっと成熟してるのかなぁ。 ほかにも同種のライブラリが出てきたりしてるのかなぁ。

ともかくそういう調査をしている時間がなかったので泣く泣く VBA で行うことになりました。
VBA ならば Office Developer Tools for Visual Studio 2013 を使うよりも処理は速そうだけど、やっぱ数万件のデータってのが気になる。 データが書き込まれているファイルを開いたら、シート上のデータを 2次元配列に一気に読み取って、すべての中間加工処理は配列の中で済ませることにした。
書き込みは処理の都合上 1件ずつセルに書き込むしかない。
それでも 3万件のデータ処理が 10秒ぐらいで終わる爆速ぶり。
VBA すげーな。
そしてこの種の処理に VSTO (というか Office Developer Tools for Office) は向かないのかもしれないね。
私のスキルが低いだけか。

期末ですね。
社内ツールの依頼があったので久々に VSTO についても候補に入れてみました。
ここ 2年ほどはネットワーク屋さんのような感じだったのでツール開発は浦島太郎。

Visual Studio 2013 をインストールしてみたんですが、C# のバージョン上がってたんですね。
VSTO (Visual Studio Tools for Office) って名前が消えちゃって、今は Office Developer Tools for Visual Studio 2013 っていうんですね。 長い名前ですね。 でも ODT とか ODTVS 2013 って読まないで、便宜上 VSTO って言ってる人も多いようですね。 ほんとはどう読んだらいいんでしょうかね。 わかりづらいですね。

最近の Visual Studio は定期的に Update されてて、Visual Studio 2013 は 2014年11月に出た Microsoft Visual Studio 2013 Update 4 ってのが最新なんでしょうかね。 Visual Studio 2013 Update 4 はここからもダウンロードできますし、もちろん Visual Studio を起動して [ツール]−[拡張機能と更新プログラム] からダウンロードすることもできます。
そして Visual Studio 2013 Update 4 には関連したリースもあって、その中に Office Developer Tools for Visual Studio 2013 もありました。 Office Developer Tools for Visual Studio 2013 - 2014 年 11 月更新プログラムって名前です。
ところがこの Office Developer Tools for Visual Studio 2013 (ホントに長い名前だなぁ) には専用のダウンロード ページが用意されていないようなのです。
Visual Studio 2013 Update 4 のページの本文にインストーラー ファイルへの直リンクが貼ってあるだけなんですね。 見つけづらいよ、ホントに。
それでも実際に私がダウンロードした時はこんな親切なページ見つからなかったんだよな。 英語のブログ記事の本文にあった直リンクからダウンロードしましたよ。

独自ドメインも復活したのでブログ以外にも使ってみようと思う。

1年くらい前に実験目的で WebARENA suiteX を購入した時は機能の検証だったので実用的な事は何もやってなかった。

てことで Office 365 ってことになった。
んでつい最近 Office 365 の個人向けが出たばかりってんで内容を調べてみたところ、どうやら個人向けは独自ドメインを使えないってことがわかった。
ってことで従来からある法人向けになってしまったのだけれど、デスクトップ版 Office のエディションを調べてみて、Professional Plus 相当が使えるのは最上位の Office 365 E3 らしいんだわ。
ユーザー数無制限、、、大企業向けっつーか、最上位。
んでもユーザー数はオレ一人。。。
月額 1,800円程度、年一括でも安い安い。

Office File Validation っていう Office ファイルの検証機能が Windows Update や WSUS で公開されたんですわ。
"優先度の高い更新プログラム" で公開されているので未検証のまま社内に配信しちゃってる管理者も多いかと。(ホントはダメなんだろうけどさ)
んでこいつを入れるとファイルサーバー上にある 97-2003 形式の Office ファイルを開くのにえらく時間が掛かるようになるらしいんだわ。(Office 2003 のアプリから開くとき)

これに対するマイクロソフトの回答が公開されております。
Office File Validation (OFV) アドインがインストールされた Excel 2003 でネットワーク上のファイル共有から XLS ファイルを開く時に時間がかかる
http://support.microsoft.com/kb/2575312/ja

対策 1 : ファイルをローカルに一度コピーしてきてから開く
ローカルで編集している間、サーバー上のファイルにロック掛からないじゃないか。
ローカルで編集している間に他のユーザーがサーバー上のファイルを更新しちゃってたらどうするんだい。

対策 2 : レジストリを編集してこの機能を無効にする
「レジストリ編集を誤ると深刻な問題が発生する」 ってビビらすわけですよ。
アンインストールって手はないのかね。

対策 3 : Office 2007 や 2010 を使う
コレなんだね、一番言いたいのは。

定型の CSV ファイルを Excel で読み込んで、Excel 形式に変換して保存したいわけです。
ところがこの CSV ファイル、全列とも文字列形式で構わないのだけれど、値をダブルクォーテーションで囲んでいないもんだから、ダブルクリックして Excel で開くと西暦を下2桁で表してるデータの頭ゼロが消えてしまうわけです。
CSV ファイルの拡張子を txt にしてやって Excel から開いてやるとテキスト インポート ウィザードが起動し、各列のデーター型を指定できたりするんだけれど、これって定義として保存しておけないんでしょうかね。
Access ならできるのになぁ。

Access でインポートして、Excel 形式でエクスポートするってのも面倒くさいしなぁ。。。

教えて! goo が面白いことになっている。
"エクセル2007をつかっています。「会社で何月何日に、誰がどこへいったのか」がわかる表を作ろうとしています" の回答欄が面白い。

日報を書きためたシートから、日付指定で該当する記録を別シートに抽出したいって質問。質問者も少しは試行錯誤したらしい。

オデはこの質問を見て素直に 「オートフィルターでいいじゃん」 と思った。無理やり VBA を使うこともなかろう、と。
同じような趣旨の回答が 1件付いたあと、「VBA をお勧めします」 という回答が付く。
回答者自ら 「素人」 ですと言っている。Excel 素人なのか VBA 素人なのかはわからない。
そこで最初の回答者が
VBA を勧める? 知ったか野郎だな。
質問者は 「素人」 であると自己申告してるぞ。
と回答欄で反論。
それに対して "知ったか" の回答者 (オデがその人を "知ったか" 認定してるわけじゃなく、回答者の名前を出すのに躊躇したからこういう表現を使ってます) も
オレはちゃんと解決方法を知ってるんだ。オレの周りには独学で VBA を学んだ奴らがたくさんいるんだぞ。
とキレた。
そこで先の回答者、
ハイハイ、わかったから。
でも今からここでレクチャーして解決はいつになるんだ?
質問内容からして業務ツールであることは明白。
だったらここで VBA の研修するんじゃなくて、「困っていることを解決したい」 てところに手を貸してやれよ。
と。
ここらへんで慌てた質問者が両者の回答に 「自分、べつに VBA の回答でも大丈夫です。がんばりますから」 てきなフォローのコメント。
そんな中、別の回答者からも VLookup などの解決方法が提示される。
"知ったか" の回答者からは VBA コードが提示されず、処理概要が提示された。
オイオイ、ホントにそこからレクチャー始めるつもりなのか?
しかも 「別シートに抽出したい」 という最初の質問文にある要望を拠り所に VBA にこだわる姿勢だ。
オデだったら 「別シートに抽出したい」 の部分からもう一度練り直すけどね。
別シートにこだわらないんだったら VBA 使わなくても柔軟な物が作れるしね。
したっけ最初にオートフィルターを提示した回答者や別の回答者たちから具体的な VBA コードが次々に提示される。
きわめて具体的。
貼りつけるだけ。
しかし本来なら貼り付け先は標準モジュールを推奨したいところだが、自称素人な質問者のために Sheet1 のコードモジュールに張り付ける指示とか、なかなかに相手を思いやっての回答。
そう、標準モジュールに張り付けるってことは、そのプロシージャをキックするイベントが必要なわけで、シートにフォーム ボタンを置くとかテキストボックスを置くとか、ここら辺のイメージが質問者にないことには説明が面倒くさいわけですな。

さて、先の "知ったか" 回答者さんからは未だに具体的なコードが回答されていない。
結局、処理概要を提示したところで質問者が消化できてないし、その文章を VBA の処理に変換するイメージもできていない事が伺える。

VBA のコードを知る前に、コードをどこに書けばいいのか、VB Editor はどのように使うのか、てことを入門書などを買って勉強していない素人なのだよ、相手は。

例えば Excel の VB Editor で "MsgBox" を選択して [F1] を押してみる。

01

VBA ヘルプのウィンドウが表示されるけど、MsgBox に関するコンテンツが表示されない。
左ペインは "ダウンロード中..." と "該当結果はありません。" ですわ。

02

この時ウィンドウの右下は "Office Online に接続" になってます。

06

そんで検索方法の部分は "Office Online のコンテンツ" の "開発者用リファレンス" が選択されてます。

03

そこで検索方法を "このコンピューター上のコンテンツ" の "開発者用リファレンス" にしてみます。

05

もちろんウィンドウ右下部分も "オフライン" に変わります。

07

するとこのように MsgBox のヘルプが表示されます。

04

この現象、会社の PC でも最近起こりました。
会社の PC は Windows XP Professional x86 で Office Ultimate 2007 SP2、この PC は Windows 7 Ultimate x64 で Office Ultimate 2007 SP2 (MSO 12.0.6529.5000)
両方の PC とも Office の診断をしてみたら 1個の修正が入った。
それでも直らない。
Office のインストール オプションで VBA 関連を一度外してから再度入れなおしたけれど直らない。

この PC で現象が起こったあたりにやったこと、、、
4月の Windows 用の定例アップデートをした。
Silverlight 4 を入れた。
Web Platform Installer 2.0 で URL Rewrite1.1 と ASP.NET MVC 2(英語) を入れた。
Google 日本語入力 (リリース版) を入れて試してアンインストールした。
Google 日本語入力の開発者版を入れて試してアンインストールした。

会社の PC では、、、 覚えてないな。。。
Google 日本語入力 (リリース版) はだいぶ前にアンインストールしたけれど、その後とくに問題なく使えてた。
だけど 「何か」 をアンインストールした記憶はある。
Office 関連ではない。
「何か」 が何だったか記憶がない。。。
考えるのも面倒くさい。

印刷ダイアログでプリンターの設定を変更して手差しトレイを選択しているのに既定のトレイを使ってしまう。
そうだった、Access のレポートは、レポート自身がプリンターの設定を 「ページ設定」 てことで覚えちゃってるんだった。
レポートをデザインモードで開いて [ファイル]-[ページ設定] でトレイを変更し、上書き保存せにゃならんかったんだ。
やれやれだぜ。

Access や Word から Excel を CreateObject してブックを開いて上書き保存すると、ブックを閉じて Excel を Quit しても Excel のプロセスが残ってしまう問題の続き。
複数の打合せで一日中離席している間に部下本人がある程度まで調査してました。
周りの Windows XP SP3 + Office 2003 SP3 な PC では再現しなかった。
Office 周辺で違いを調査した。
本人の PC には Office Live アドイン(バージョン不明)が入っていた。
(ホントはここで同じ Office Live アドインが入ってる PC を見つけられるとよかったが)
本人の PC から Office Live アドインをアンインストールして実験してみたところ、見事にプロセスが消えてくれた。
このままだと Office Live アドインに原因があるのか、インストールされていたアドインの状態に原因があるのかわからん。
マイクロソフトのサイトから Office Live アドイン 1.2 (正確には Microsoft Office Live Update 1.2 ) をダウンロードしてインストール。
またプロセスが残ってしまった。
1.2 をアンインストールせず Office Live アドイン 1.3 (正確には Office Live Update 1.3) をインストールして実験。
まだプロセスが残ってしまう。
1.3 もそのままに Office Live アドイン 1.4 (正確には Office Live Update 1.4)をインストールして実験。
今度はちゃんとプロセスが消えてくれた。

本人はサポート担当じゃないので細かいところで調査不足はありますが、とりあえず仕事を先に進めなくてはならないのでこのまま放置。
あとで時間があれば別の PC に Office Live Update 1.3 あたりを入れてみます。

金曜の帰りしな、部下が浮かない顔をしているので訊いてみると Excel のプロセスが残ってしまって困っているらしい。
C# か VB.net の話かと思ったら VBA だっつうんだ。
現象が再現するミニマムなコードがこんな感じ。 一応 .NET の風習に習って Workbooks も変数で参照してみた。
Access VBA の標準モジュールから Excel をコントロールする。
Sub Test()
    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True

    Dim xlBooks As Object
    Set xlBooks = xlApp.Workbooks

    Dim xlBook As Object
    Set xlBook = xlBooks.Open("D:?hoge.xls")

    xlBook.Save
    xlBook.Close
    xlApp.Quit

    Set xlBook = Nothing
    Set xlBooks = Nothing
    Set xlApp = Nothing
End Sub

ちなみに xlBook.Save こいつをコメント アウトするとプロセスが消えてくれる。

Windows XP SP3 & Office 2003 SP3 の PC で再現を確認。ただし時間がなかったので部下の 1台でしか動かしてない。
ちなみにオイラが使ってる Windows XP SP3 & Office 2007 SP2 では xlApp = Nothing の所で Excel のプロセスは終了する。この行をコメント アウトしても End Sub で終了してくれる。
コードを見る限りバージョンの違いではないと思う。
暗黙的な参照されちゃってるかなぁ、、、されてないと思うんだけどなぁ。。。
"Excel プロセス 残る" で検索しても得られるのは .Net Framework な情報ばかりなんだよなぁ。
ともかく明日は他の PC でも調査だな。

マイクロソフト主催による Visio 単独のカンファレンス、Visio Conference 2007 in Autumn が 11月20日に東京国際フォーラムで開催されます。
入場は無料ですが、事前登録が必要です。
事前登録はここから。
オイラは長年 Visio を使ってるんで、Visio 無しでは仕事がつらいですね。
んで長年 Visio で更新してきた社内のネットワーク図やレイアウト図を、今の担当は Excel で苦労しながら書き直してまして、「なんで?」といった感じ。
Visio 2002 が 1本余ってるからアップグレードしちゃえばいいのに。。。

ともかく、講習会でもないんで気軽に行ってきな〜と後輩に言っておきました。

とりあえず一通り作成した。
341ページにもなっちゃいました。
そこでまだ一度も保存していないことに気づいた。あぶねー。
こいつは明日のミーティングで使う資料。
なので文字が大きめ。いわゆる高橋メソッドで作ってます。
最初に普通の方法で 30ページぐらいの資料を作り、それをバラして作り直す。それで約 10倍の 341ページの大作完成。
さ、テンポ良くめくるぞ。

マイクロソフトの Office System 2007 紹介サイト。
Flash を使ったデモ動画なのですが、女性の語りがとっても変。
Microsoft Office : It's a new day. It's a new Office.
http://www.microsoft.com/japan/office/newday/default.mspx?WT.mc_id=Online
マイクロソフト オフィ〜ス システム、テキ〜ストボックス
新バージョンでは、プルダウン メニューから、機能を探して、クリックする必要が・・・ありません。

"2007 Microsoft Office プログラム用 Microsoft PDF/XPS 保存アドイン" てのをインストールすると PDF 出力が可能になるのですが、半透明の効果を掛けたオートシェイプが汚くなっちゃうわけですよ。
したっけ、[PDF または XPS 形式で発行] のダイアログで [オプション] を押し、「ISO 1900-1 に準拠 (PDF/A)」 のチェックを外して PDF 化すればきれいになりましたとさ。

先の mdb 最適化の時や、一般的にファイルを保存する際の「名前を付けて保存」ダイアログでの話ですが、どうやら Office 2007 で使っているこれらのダイアログでは、右下に [ツール] ってボタンがあるんですよ。
んでこれを押してみるとサブメニューが表示され、ダイアログの中の状況に応じていろんなコマンドが使えるようになってるのね。
たとえばダイアログの中でフォルダをポイントしてる時に [ツール] をクリックすると「削除」「名前の変更」なんてコマンドが有効状態になってるし、ファイルなら「印刷」てなコマンドも使える。
要するに、昔からこのダイアログの中ではエクスプローラの操作をすることができるわけで、エクスプローラの右クリックあたりで出てくるコマンドを中心に、[ツール] の中にも実装してるって感じですね。

んで、左側のプレース ボタンでデスクトップをクリックした直後に [ツール] をクリックすると「プロパティ」ってコマンドが有効になってるんさ。
こいつをクリックしてみたら画面のプロパティが表示されましたw
使わないよねぇ。。。
ちなみにプレース ボタンでマイ コンピュータをクリックして [ツール]-[プロパティ] ってやってみたら予想通り、システムのプロパティが表示されました。

Access 2007 で新規作成した Access 2000 形式の mdb での話であり、2007 形式のデータベースとかで試したわけじゃないです。

[データベース ツール] タブの [データベース ツール] グループの [データベースのエンコード/デコード] コマンドを実行。
<エンコード先データベース> ダイアログ(名前を付けて保存するダイアログ)にて保存先を決定する。
すると保存された mdb は最適化された状態になっている「みたい」です。

Access 2007 で新規作成した Access 2000 形式の mdb をいじくってます。
テーブルの列をバッサリと削除したんで 50MB もあるファイル サイズを小さくしようとおもったんですが、どうやって最適化したらいいのか見当がつきません・・・
Access 2003 までは [ツール]-[データベース ユーティリティ]-[データベースの最適化/修復...] ってコマンドで一発でしたね。

[データベース ツール] タブの [解析] グループにある [パフォーマンスの最適化] コマンドはデータベース内の各オブジェクトを解析して「リレーションを作ったほうがいいよ」とかアドバイス & 実行してくれるコマンドなので、ちょっと違うよね。
んで同じく [データベース ツール] タブの [データベース ツール] グループにある [データベースのエンコード/でコード] ってコマンドを実行してみたら <エンコード先データベース> っていう、いわゆる「名前を付けて保存」のダイアログが登場。保存先を選べってことですな。
保存先とファイル名を決定して [保存] をクリック。
保存された mdb ファイルのプロパティを見てみるとファイルサイズが小さくなってました。
Access 2003 までは [現在開いている mdb を閉じる]->[Access が対象 mdb を最適化して同じフォルダに別名保存]->[Access が対象 mdb を削除して最適化済み mdb に元の名前を付ける] てな動きだったもんで、どうにも Access 2007 の動作が怪しく感じます。
しかしこの動作のほうが助かる場面もないわけじゃないです。
開いたときにイロイロと自動実行させるようにしている mdb をメンテして、最後に最適化をしたい場合。
今までなら最適化が終わると最適化済みの mdb が自動的に開いたわけですが、自動実行されちゃこまるわけで、あわてて [Shift] を押したり。
Access 2007 の動作ならめでたく最適化済みの mdb がフォルダに転がってるわけで、それをサーバにポーンと放り込むだけでメンテナンス終了。てな感じ。
いや、ホントにこのコマンドで最適化するのが正解なら、て話ですが。

Access 2007 で新規作成した Access 2000 形式 mdb を開いてて、VBEditor でシコシコとデータ変換するコードを書いてたです。
InStr 関数の引数に名前付き引数を使ったらコンパイル エラーになっちゃったわけです。
sepPosition = InStr(String1:= orgValue, String2:= "-")
そういや InStr 関数って名前付き引数を使えないんだっけ? と [F1] を押したわけです。
したらヘルプが開いたわけですが、ヘルプのウィンドウでなんちゃらエラーが出ました。オブジェクトがどうたらこうたら、と。(画面キャプチャしてなかった)
おそらくは IE 7 のセキュリティ オプションあたりだと思いますが、一応報告。

Google のキャッシュしか残っていないが、MOUG の Excel VBA 掲示板での出来事。
VBAってほんとにあるの?
<経緯> 「VB 5.0 の Form ではできたコントロール配列が VB 6.0 の UserForm ではできないのは何故?」といった質問がポストされた。当然ながら VB 6.0 でもコントロール配列は普通に出来る。
"UserForm" というキーワードから「VB 6.0 ではなくて VBA の話だと思う」という回答と、「ここは Excel VBA の掲示板だから、Moug にある別の掲示板 "プログラミング" へ行った方がいいよ」という回答が付く。
質問者が直接なんと返答したのか分からないが、程なく質問をクローズした。
その流れに疑問を持った別のユーザーが新たなスレッドを開いたのが「VBAってほんとにあるの?」である。
ざっと読んでもらえばわかるが、論旨が何回転もしてしまう(回答者側から見れば)。

そして質問者の最後の捨て台詞。
Excel などの VB Editor で [ヘルプ]-[バージョン情報] では「Visual Basic 6.0」と表示されてあり、ダイアログの下の方に「Version 9972」「VBA: Retail 6.x.xxxx」「Forms3: 11.0.6550」などとも書いてあるが、この製品はバージョン情報にも書いてある通り「Visual Basic 6.0」としか読めない。マイクロソフトほどの大企業が製品名を間違えることはないはずだ。よって「この製品は VBA ではない」 と推論する。
VBA という「製品」はこの世に存在しないのである。
しかし「VBA という概念」は実際に存在しているであろうから、自分はこれからも VBA というキーワードは使い続ける。

まぁ嵐は起こしたものの、めでたしめでたしじゃないでしょうかね。
この方はこのスレッドのなかで大いに叫び、「VBA は概念である」と結論付けましたが、実際に自分で誰かに VBA を教える時にそんな事を言うとは思えません。まぁちょっと熱くなっちゃっただけだと思います。


しかしスレッドの中にあったリンクを読んでびっくりしたんだけど、VBA ってマルチスレッドの機能を持ってるのねw
だけど Excel などの製品に組み込む過程でそこら辺の機能を封印してるみたいですわ。だからマイクロソフトから VBA のライセンスを受けて自社製品に VBA を組み込む場合はマルチスレッドにもできるみたいよ。
マイクロソフト Visual Basic for Applications 製品のご案内「よくある質問」

↑このページのトップヘ