2013年5月18日土曜日

Excelでコンテキストメニューを実現する方法

Excelを使って他の人にデータを入力してもらうフォームを作成する時に、コンテキストメニューの形でリストメニューを表示できると入力に間違いが少なくなるのにと思うことがあります。つまり、左側のセルに入力したデータによって、入力するデータの選択肢となるリストの内容を変化させたいと思うことがあるのです。試行錯誤の末、1つのやり方がまとまったので、ここで紹介します。例として、地域名と県名を入力するExcelを用意しました。

選択肢となるリストを準備し、名前付きセルにする

今回の例ではまず地域の選択肢となるリストとして[第一階層]を、県の選択肢となるリストを3種類[東北]、[四国]、[九州]を準備します。準備ができたら、そのリストの選択肢部分を名前付きセルとします。

名前付きセルを設定するには[数式]タブの中の[名前の管理]ボタンをクリックします。

セルの名前はリストの名前と一致させるようにしてください。設定後のダイアログは以下のようになります。

データ入力規則でリストを表示するようにする

次に地域のデータを入力する部分の設定をします。まずデータ入力可能とする部分を選択します。

次にデータ入力の規則を設定しますが、これは[データ]タブから[データ入力規則]ボタンをクリックします。

[入力値の種類]を[リスト]にし、[元の値]を=第一階層とします。

これで名前付きセル「第一階層」の内容が選択肢として表示されるようになります。

左側のセルの内容により表示するリストを切り替えるためINDIRECTを使う

次に県名データを入力する部分の設定をします。今度はデータ入力可能とする部分のセルを1つだけ選択します。

次にデータ入力の規則を設定しますが、地域の時と同様に[データ]タブから[データ入力規則]ボタンをクリックします。[入力値の種類]を[リスト]にし、[元の値]を=INDIRECT(G4)とします。G4は選択したセルの左隣のセルになります。

名前付きセルとセル参照をうまく組み合わせるのがこのやり方のキモになります。設定が終了したらこのセルをコピーし、入力可能な他のエリアにペーストし完成です。

注意点

このやり方はExcel 2007とExcel 2010でしか確認していません。また、この例の地域部分に入力してから県名のデータを入力するという順番を前提にしています。県名の部分を先に入力することはできません。


2013年5月11日土曜日

Officeアプリケーションを操作するPowerShellスクリプトをタスクスケジューラから自動起動する方法

インターネットを検索すると
  • Excelを操作するPowerShellスクリプトの書き方
  • PowerShellスクリプトをタスクスケジューラから起動する方法
について説明しているブログや記事を見つけ出すことはそれ程大変ではありません。そのため、表題の件もちょっと検索して情報を集めれば実現できそうですが、実際にやってみるとどツボにハマります。
  •  OfficeアプリケーションをCOM経由で操作する
  • タスクスケジューラから起動
の条件が揃うとうまく行かないようなのです。

PowerShellから動作するスクリプトがタスクスケジューラから起動すると正常に動作しない

作成したスクリプトは複数のPowerPointファイルを1ファイルにまとめるスクリプトで、やりたかったのは、週に1度ある時刻にこのスクリプトを自動的に実施するということでした。PowerShellスクリプトでPowerPointファイルを処理する方法についてはインターネット上を検索すれば情報が得られます。大きな苦労をすることなく1ファイルにまとめるスクリプトは完成し、PowerShellから起動する分には問題なく動作していました。ところが、同じスクリプトをタスクスケジューラから起動するように設定しても、まったく目的の処理がされないという事態に直面したのです。

PowerShellスクリプトをタスクスケジューラから正常起動できているか確認

最初は自分の単純な設定ミスだと思っていたため、タスクスケジューラでの設定をいろいろ調べて調整してみたのですが、どうもそれでは解決しません。どうも簡単な問題ではないことが分かってきたので、地道に問題の切り分けを行うことにしました。まずは簡単なテキストファイルを作成するPowerShellスクリプトを作成し、それをタスクスケジューラから起動してみました。すると何の問題もなく動作します。これでタスクスケジューラからスクリプトがキックされていないということは無いことが分かりました。

New-Object -ComObjectに失敗している

今回の処理を実現するため、PowerShellスクリプトからPowerPointファイルを操作するのにCOMを使っています。問題の切り分けの次の段階としてPowerPointを起動し、ファイルをオープンするだけのスクリプトを作成し、タスクスケジューラから実行するようにしてみました。すると、今度は挙動が変わってしまい、上手く動作しません。更に絞り込んでいってみると、COMオブジェクトを作成する"New-Object -ComObject"が失敗し$nullを返していることが分かりました。ここまで分かれば、インターネットでソリューションを探すことができるだろうと検索してみましたが、なかなか同様の問題が見つかりません。まれに見つかっても(操作対象がPowerPointではなくExcelだったりするものの)質問があるだけで、解決に至っていないものでした。

解決方法はフォルダを作るだけ?

すぐに問題は解決しなかったため、思いついた時にいろいろなキーワードで検索していました。最終的に何のキーワードで検索した時に引っかかったのかは覚えていませんが、英語のサイトで回答が書かれているものが見つかったのです。その内容は
C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop
(試したのはWindows 7 64bit環境になります)
というフォルダーを作成すると良いというものでした。フォルダー作るだけ?何でこのフォルダー?と頭の中には疑問符が幾つも浮かびましたが、これしか情報が無かったので実際にやってみることにしたのです。

権限を変更したら動いた

実際にフォルダーを作成して挙動が変わるかどうかを試して見ました。元の情報にTypoがあったりして、いろんなパターンを試す必要があったのですが、結果的にはフォルダーを作成するだけでは目的の動作をするようにはなりませんでした。ただし、この"Desktop"フォルダーを作成するのに管理者権限が必要そうなメッセージが表示されたので、もしかしたら実行権限の問題があるかもと思いタスクスケジューラの設定を変更しました。





具体的には「最上位の特権で実行する」にチェックを入れて試したところ、問題切り分け用に作成したスクリプトが狙い通りに動作するようになったのです。徐々にスクリプトでやる内容を増やしていき、最終的には当初の目的のスクリプトが正常に動作することが確認できました。
何故この"Desktop"フォルダーを作成すると問題が解決するのかの理由も調べてみましたが、未だに分かっていません。もしかしたら、今回の私の環境ではたまたま動作するが、一般環境で必ず動作することをMicrosoftが保証していない設定なのかもしれません。

注意点のまとめ

Officeアプリケーションを操作するPowerShellスクリプトをタスクスケジューラから自動起動するには、
  • Windows 7 64bit版では以下の2つのフォルダーを作成するC:\Windows\System32\config\systemprofile\Desktop
    C:\Windows\SysWOW64\config\systemprofile\Desktop
  • タスクスケジューラからスクリプトの実行は「最上位の特権で実行する」設定とする必要があります。

ルーチンワークは自動化しよう

そもそも何故このような自動化をしようと思ったのかですが、ルーチンワークをできるだけ自動化し、人間が介在しないと出来ない仕事に注力したかったからです。この情報が同様の考えを持つ方の参考になれば幸いです。

2013年4月21日日曜日

神田 焼ジビエ 罠で日本酒持ち込み宴会


イギリス赴任している知り合いが帰国するので企画された宴会を神田 焼ジビエ 罠で行いました。実は前の週に来た時にワイン持ち込み可の張り紙を見つけて、日本酒を持ち込んでいいかを確認したら、快く了承していただけたので、久々の持ち込み宴会となりました。前の週に食べたより肉も美味しかったのは気のせいだったのか、タイミングが良かったのか。

お通しのキャベツ。焼き肉にはこれが必要ですね。

ポテサラ。いぶりがっこが入っていて、食感も面白い。

煮込み。ジビエの店だから警戒していましたが、うまい。

行者大蒜味噌。

猪セット。初めての人はこれを頼むべしというセットがお得ということで。

鹿セット。セットは部位によって、塩味、醤油味、味噌味と味付けが違います。

雉子のムネとモモ。雉子も本当にいけます。

猪。

羊白ワイン。

羊白ワインと羊ローズマリーを一皿に。

シュウマイ。味が濃くていいです。人数分注文しました。

罠サラダ。

猪豚タン

猪豚カシラ。

甘酢トマト。

小松菜キムチ。

青葱ハツ。

持ち込み酒のラインナップ。持ち込み料は1本あたり1000円です。8人の宴会でしたが、全て飲みきりました。


神田 焼ジビエ 罠
http://tabelog.com/tokyo/A1310/A131002/13152588/

2013年4月1日月曜日

SIMカッターを買ってみました

所有しているスマートフォンなどでフルサイズSIMの物がなくなり、一方で所有しているプリペイドSIMの中にフルサイズSIMのものがあるため、SIMカッターを買ってみました。買ったのはフルサイズSIMからマイクロSIMにカットするものです。

ちょっとピンぼけですが、購入したSIMカッター。


裏に使い方が書いてあります。


使う時にはSIMを端子全体が見えるまで差し込みます。


力を入れて、打ち抜くとこうなります。これで無事マイクロSIMの機器に入れても動作します。


2013年3月24日日曜日

神田明神で花見

今年は桜の開花が早く、今週末に見ないと散ってしまうかと思い神田明神に行ってみました。



















2013年2月3日日曜日

Viewカードの問題

12月にフランス旅行した際、いつも国内で使っているViewカードをメインで使いました。ViewカードのポイントはSuicaにチャージでき、しかも効率よくポイントが貯まるので最近はこのカードをメインとして使っていたからです。ところが問題が発生したため次に海外に行くことを考えて新しくクレジットカードを作ることにしました。

悩むフランスの店の人たち

フランスは小さな店でも大概クレジットカード決済が可能です。そのため、今回の旅行もあまり現金は準備せずにクレジットカードをメインに使う事にしていました。ところが、いざ店で使う段になると店の人がカードを見て悩み始めるのです。後になると段々理由がわかってきました。まずは、このカードは接触型ICチップ搭載カードにちょっと見えてしまうこと。(実際には違う)もう一つは磁気テープがどちら側についているか分かりにくいことのためです。事前に何も調べていかなかったので知らなかったのですが、ヨーロッパでは接触型ICチップ内蔵型のカードを使うことが基本なのですね。それでもサインすれば使えていたので、旅行中はViewカードで通していました。

最終日の夜カードが使えなくなった

悩むフランスの店員さんを暖かく見守りながら、何とかなっていたのですが最後の夕食にいった店で問題が起きました。支払いの段になってエラーになると言われたのです。親切な店員さんはきっとこっちの問題だからと再度チャレンジしてくれましたが、やっぱりエラーになる。妻がクレジットカード持っていたので、その場は事なきを得、磁気テープ不良にでもなったかと思っていました。その後は現金消費活動に入ったためフランスでクレジットカードを使いませんでした。再度問題になったのは帰国すぐ、NEXのチケットを買うときに、「このカード使えなくなっています」と言われてしまいました。この瞬間は言葉の意味を正確に理解できていなかったのですが、それは後ほど判明します。

帰国後の留守電

帰国後すぐに家の留守番電話にViewカードの会社から連絡が入っていました。連絡が欲しいということだったので、「すごいな、磁気不良なのが分かって連絡をよこしたのか?」と感心していたのですが、電話で問い合わせたら状況が違ったのでした。オペレータの方の説明によると、私のViewカードの使い方がクレジットカードの不正使用とパターンが似ていたためサーバ側で自動的に利用を停止したということ。(フランスの飲食店で使うというのがそのパターンになったらしい)つまり、磁気不良などではなかったということです。じゃあ、また海外旅行した場合には同じような事になるのか?と聞くと、そうなる可能性があるということでした。これでは海外で安心して使えません。今回のフランス旅行でも一歩間違えば無銭飲食になる所でした。なんとかならないものですかね?仕方ないので、ヨーロッパでは接触型IC付きクレジットカードの方が良いことも分かったこともあり、新しいクレジットカードを海外用に作ることにしました。