2011年12月13日火曜日

アイディア創造のフレームワーク

どうやったらいいアイディアを生み出せるか。
そんなことを考える機会があり、レポートを書くことになりました。
レポートの材料として自分で本を選び、A41枚程度にまとめるというのが課題。

実はそういうレポートを書いたことのない私ですが、あえてここにそのレポートを載せようと思います。


目的を果たすためのアイディアをどう生み出すか



小沢正光氏の著書、「プロフェッショナルアイディア。」についてレポーティングする。
著書で筆者は思いつきではなく、必要なときにニーズを満たすアイディアを生み出すには、3回3ラウンドのプロセスが有効であるとしている。
3回3ラウンドとは「書きだす」「整理する」「チョイスする」という3つのステップを順にこなすことでアイディアを練りあげていき、さらにこれらを3回繰り返すことでアイディアを完成させる、という手法である。

「3回3ラウンド」ではまず最初に「書きだす」作業を行う。この作業で頭の中にあるすべてのことを目に見える形にする。
頭の中で考えているだけでは曖昧だったことも、書き出すことで具体化していくのだ。
この作業では、次の点に気をつける。
・優劣はつけず、思いついた考えをすべて書き出す(中途半端なままにすると心残りになり、アイディアを見極める阻害要因となるため)
・書き出す作業は手書きで行う(手で書くことで脳が活性化するため)
・人目を気にしなくてよい場所で行う(考えることに集中するため)
・書き出す作業は最長でも2時間を限度にする(集中して作業に取り組むため)

次に、書き出したことを「整理する」。
書き出したアイディアを第三者にも理解できるように別の紙に清書する。このことによって、書き出されたアイディアを鮮明にすることができるのだ。
この作業では、次の点に気をつける。
・重複している内容はひとつにまとめる(思いつくままに書き出したものには重複するものが存在するため)
・意味不明なものは書き改めるか削除する(考えながら書き出したものの中には自分でも理解できないものもあるため)
・アイディアの良し悪しを吟味しない(整理することだけに集中するため)
・誤字脱字をなくし、わからない語句を調べて表現を練る(上司やクライアントに提出できるレベルにするため)
・骨子や要点に的を絞り、一目見て理解できる内容にする(シンプルな表現にするため)
・字は丁寧に書く(丁寧に書くことで自分の考えのあらが見えてくるため)
・清書する紙はひとつのアイディアにつき1枚使用する(次の作業で使用するため)

最後に、「チョイスする」。
清書した紙を壁に貼り、少し離れた位置から紙を眺め、良いと思ったものは残し、そうでないものは剥がしていく。
こうすることで客観的な視点に立つことができ、思い入れを排除して正しくアイディアの良し悪しを判断できるようになる。
この作業では、次の点に気をつける。
・以下の3つの視点に立って3つすべての視点を満たすアイディアを選ぶ
・個人の視点:自分の価値観に照らし合わせてそのアイディアが好きか嫌いかを判断する(自分が好きなアイディアでないと第三者を説得することが難しいため)
・相手の視点:クライアントの視点に立って、そのアイディアが受け入れられるかどうか、利益になるかどうかを考える(クライアントに満足してもらうため)
・全体の視点:社会的な視点に立って、業界での評価や社会的影響の観点からアイディアを選ぶ(役割や評価、モラルについて検証するため)

これらの3つの作業を1ラウンドとし、3回繰り返す。
3回繰り返すのには次のような理由がある。
・最初に出たアイディアには自分のおごりや思い込みが強く出ていることが多く、公には通用しない可能性がある
・頭の中にあることをすべて書き出していても、まだアイディアは頭の中に眠っている
・繰り返すことで考えの甘さをなくしていく
また、3ラウンドは必ず締切りを決めて計画を立てて実行する。時間的な制限の中で力を振り絞ることで良いアイディアを生み出すことができるからだ。

このように3つの局面それぞれでその作業に集中し、それらを繰り返していくことで練り上げる。これが筆者の言う3回3ラウンドであり、そこで生み出されたアイディアは、目的を達成するためのソリューションとなるのである。

参考




レポートなのに書いていると主観的になってきてしまい、視点を遠ざけるのに苦労しました。
自分ではあまり満足していませんが今回はこれで…

理解したことを人に伝えようとすると自分の足りない部分がよく見えてきます。
このアイディアのフレームワークと同じように、とにかく書きだしてみること、これはアイディアを創りだすこと以外にも有効なのかもしれないです。


2011年7月12日火曜日

VBAでHTMLのTableタグ内データを取得する

HTMLファイルからデータを取得するプログラムをVBAで作りました。

具体的にはhtml、body、table、tdタグをキーにしてTableタグ内のデータを取得する仕組みです。
tdタグ内に記述されたデータ(innertext)が取得対象となります。
実行環境はExcel VBA、IE6です。
VBA側の参照設定はデフォルトのままで実行できます。


TDタグ内のデータを取得するプロシージャ



Sub getTDinnertext()

    Dim intIndex As Integer
    Dim objTag As Object
    Dim objTagTable As Object
    Dim varTDinner(371) As Variant
  
    intIndex = 0
  
    For Each objTag In objIE.document.body.all
      
        If objTag.tagname = "TABLE" Then
      
            For Each objTagTable In objTag.all
              
                If objTagTable.tagname = "TD" Then
              
                    varTDinner(intIndex) = objTagTable.innertext
                  
                    '取得したデータに対する処理
                    'Debug.Print intIndex &  "::" & varTDinner(intIndex)
                    'Cells(intIndex + 1, 1).Value = intIndex
                    'Cells(intIndex + 1, 2).Value = varTDinner(intIndex)
          
                    intIndex = intIndex + 1
                  
                End If
              
            Next objTagTable
          
        End If
      
    Next objTag
  
End Sub


取得した値は配列型の変数に格納しています。
このプログラムではTD要素が371個存在したので371個の要素を持つ配列を宣言しています。
(動的配列を使った方がスマートに書けるのかな)
なのでTD要素の個数が372以上の場合、上記プログラムでは「インデックスが有効範囲にありません」というエラーが発生します。

また、このプログラムは先にIEオブジェクトを生成して取得対象のWebページを開いておく必要があります。
実際には以下のようなプログラムの中で上記プロシージャを呼び出して使っています。


アクセスしたサイトからデータを取得するプロシージャ

Sub test110712()

    'IEオブジェクトを作るサブルーチン
    Call CreateIE
    
    objIE.navigate "http://www.shimatetsu.co.jp/bus/busjikoku/bust01.htm"
    
    'ページの読み込みを待機するサブルーチン
    Call WaitIE
    
    objIE.Visible = True
    
    Call getTDinnertext

    Set objTag = Nothing
    Set objTagTable = Nothing
    Set objIE = Nothing
    
End Sub


※CreateIEプロシージャとWaitIEプロシージャについてはお手数ですがVBAでJavaScriptが埋め込まれたリンクをクリックするエントリーを参照してください。


例えば長崎空港線(島原港⇔長崎空港)のデータを取得すると次のような結果が返ってきます。

仕事場の環境的な制約でVBAを使ってこんなものを作っていますが、これが意外に役に立っていたりします。

イミディエイトウィンドウの限界

VBE(Visual Basic Editor)を使ったVBAプログラミングのお話です。

テストコードの動作確認のためにDebug.printを使ってイミディエイトウィンドウに取得した値を出力していました。
一度に371行のデータを出力するプログラムなのですが、お?
全てのデータが出力されていません。
※テキストは一部マスキングしています。

プログラムが悪いのかと思ってステップ実行をしてみたところ、ちゃんと1行目から順に出力されていました。
つまり、イミディエイトウィンドウで一度に出力できるデータ数は
371 - 172 = 199 行?

イミディエイトウィンドウの最終行は常にプログラムが1行入力できる状態にしてあります。
従ってイミディエイトウィンドウで使用できる行数は199 + 1 = 200 行ということです。

199を超えるデータを出力してテストする場合は出力のロジックか出力先を考えてあげないといけないですね。

2011年7月11日月曜日

WARファイルのデプロイ

勉強が進まなすぎて悲しくなってくるので、もうちょっとしたことでもいいからアウトプット。
WARファイルのデプロイについてメモっておく。

サンプルプログラムをインポートして参照するためにはWARファイルをデプロイしてEclipseで使えるようにする必要がありますよ、ということで以下デプロイ手順。

1.[ファイル]→[インポート]
ファイルをインポートする、っていうところが入り口。

2.インポート対象を選択
[Web]フォルダの中にある[WARファイル]を選択して次へ進む。

3.インポートするWARファイルを選択する

4.選択したファイルが表示されたら完了!

…これでデプロイは完了。
ここからインポートしたソースを見ながら勉強していくことになります。



Sample通りに構成できない〜JavaとJDBCで奮闘中〜

一向に進まないJavaの勉強。
JDBCを使ったMySQLDBへのアクセスがどうにもこうにも行き詰ってしまったので一旦離れてみることに。
で、Sampleとして提供されたプロジェクトをそっくりそのまま真似してクローンを作ってみることにした。
Sampleがやっていることはログインログアウトの実装、StrutsとMySQLなDBを使っている。

コピーするだけとは言ってもコードは全部自分で入力した。
必要なライブラリのインポートも一個一個確認しながら遂行。
どうにかこうにかできあがったので実行してみたけど動かない。

こんなエラーが出ている。
 The server encountered an internal error () that prevented it from fulfilling this request.

気になっているのは真似できていない箇所。
ライブラリの構成がSampleプロジェクトとは違っている。しかし同じにする方法がわからない。
Sampleのライブラリ

私が作ったプロジェクトのライブラリ

うーむ。
「Web Apps ライブラリー」フォルダの下にどうしても配置できない。
どうやったらいいんだろう。
これをSampleどおりに配置したところで問題が解決できるかどうかはわからないが、とりあえず同じにして間違いの可能性を検証したいところ。

もうひと踏ん張り調べてきますかぁ。


2011年7月6日水曜日

その2:MySQLへJDBCを使って接続する〜ドライバのインストール〜

2.MySQLドライバのインストール


その前に、やさしいJavaさんを読んでみると「共通するファイルの設定」というのがある。
Tomcatで共通して使用するファイルをTomcatがインストールされたディレクトリのlibディレクトリ内に配置する必要があるらしい。
で、その共通して使用するファイルというのは「derby.jar」でmこれはJDKに添付されているJavaDBなんだそうだ。
私の環境ではこのファイルが
「/Users/Anri/eclipse/plugins/com.aptana.ide.libraries_2.0.0.1253913567」
っていうところにあった。
勢いでインストールしたAptanaのプラグインの中?!
他には見当たらず。よくわからないけどこのまま続けてみよう。

というわけでこのファイルをコピーしてTomcatの下に配置する。
「/usr/local/lib」
がその場所みたい。このディレクトリには他に「tomcat-coyote.jar」とかっていう「tomcat〜」っていうjarのファイルが存在している。
※メモ:そもそも「Tomcat〜」っていうディレクトリが存在していない状態のTomcatのインストール状況には問題ないのかな?!
それと問題のMySQL用のドライバもここと同じ場所にコピーしておくらしい。
これは別のWebサイトを参考にしたもの。
"今回はサーブレットでの利用を前提としていますので"と書いてあるのが気になるんだけど(サーブレットの使用が前提ではなかったらここにコピーしないの?!)、ひとまず試してみることに。

※参考
JDBCドライバの取得(MySQL用)
http://www.javadrive.jp/servlet/database/index1.html

インストールはこれでおしまいみたい。
次は何をするんだ?

やさしいJavaの記載を参考にすると「web.xml」を編集するらしい。
Eclipseを使っているとどこまで自動でやってくれていて、どこは自分で設定してあげないといけないのかよくわからない。
この本はEclipseの使用を前提にしてはいないので、Eclipseを使用した場合にこの本にあることすべてをやる必要はないのかもしれない。

ま、わかんないことはやってみるしかない!ということで。

3.web.xmlの編集(※次のページへリンク予定)

その1:MySQLへJDBCを使って接続する〜ドライバの入手〜

やさしいJava活用編を参考にしながらEclipseを使ってMySQLへの接続を試みているが成功しない。
The requested resource () is not available.
というわけでエラーが返ってくる。
・MySQLのドライバがちゃんと設定出来ていないのか?
・URLが間違っているのか?
・クラスパスのところを見ればいいのか?

原因を探りつつあれこれ挑戦してみるも、出続けるのは同じエラー。
嫌になってやる気も失せてしまったり…しかしそれでは先に進めないので手順をひとつひとつ追いかけながらどうにかこうにか解決に導きたいと思う。
いろんなソースにあたればそのうち原因がわかるかもしれない…よね…(とてもとても淡い希望)


1.JDBCドライバの取得

MySQLのサイトから当該ドライバをもらってくる。
http://dev.mysql.com/downloads/
Java用のドライバはここ

で、私はMacを使って勉強しているので拡張子tar.gzの方をダウンロードする。
アカウントは作りませんよ、を選択してミラーサイトからダウンロード。
解凍するとファイルがざざっと出現。
「mysql-connector-java-5.1.16-bin.jar」ってのがそのドライバらしい。

【Berak Point】
…多分ここまでは手順(準備)として間違っていないと思う。
で、ダウンロードしたら次の課題はこれだよね?

2.MySQLドライバのインストール(※次の記事へリンク予定)




2011年7月3日日曜日

勉強が進まない〜Java〜

Javaの勉強をしていますがなんだかやる気がわかず、しかし時間ばかり過ぎて何も習得出来ていないことに焦りを覚える…

どうしてやる気が出ないんだろう、と思って色々考えてみました。
とりあえず、遠くを見る。
今月勉強したいと思っていることをざっとマインドマップにしてみました。
※基本情報技術者のところは読んでいる参考書の目次をマッピングしただけなので必ずしも7月にやるってわけではないです(そこもちゃんと計画しましょう>私)。

主にJavaの勉強について遅々として進まない状況にストレスを感じているのですが、マインドマップにしてみるとよくわかります。
みえているものの少なさ。

つまり何をしたらいいのかよくわかっていないんでしょうね。
一応課題は与えられていますが、課題と自分ができることとの間には隔たりがあるわけです。
勉強しているんだから当然のことですが、その隔たりの埋め方がわからない。
ひとつひとつ、構成要素を埋めつつ進んでいくしかないんでしょうが、焦燥感と不安(これでいいのかな、っていう)がやる気を奪ってしまうのです。

仕事をする上でのメンタルな部分のコントロールが私は苦手だなと思います。
感情の起伏が激しいし、自分が納得したことでないとすごくストレスを感じます。
こんなふうに不安な要素があるとやる気までなくなってしまったり…
そのたびにまたこうやって何が悪いのか、何をすべきなのか考えるわけですが、悩むたびに少しは強くなっていっててほしいものです。

2011年7月1日金曜日

自己と意義

合宿を通して、自己実現を図りながら仕事をしていく過程において、仕事の意義とは大変重要なものであることを再認識した。
何に意義を感じて仕事をしていくのかというのは自分がどんな人であるのかを表すものでもあると感じ、自信がそれを把握しておくことが今後の仕事の仕方にも大きく影響するのではないかと思った。

ここでは私がどのように仕事に向き合っているのかを振り返り、同じような場面に遭遇したときにどうすればよいのかを考える。そして意義を明確にするという手段によって自分がどうであるかを把握する機会を日々の生活の中で設けられるようにしていきたいと思う。



仕事と意義

私にとってその仕事がどんな意義を持つかということはとても重要なことだ。
それは私が取り組んでいるものにある意義を原動力として仕事を推進し、学習の動機を得ているからだ。
その仕事にどんな意義があるのかわからないと原動力は失われ、勉強しようにも何を勉強すべきなのかわからなくなる。
とはいえ、仕事をしていれば意義がどうであろうとやらなければいけないことがある。しかし体が動かない、仕事が進まない。そうなると、やらなければいけないことに対して行動することができない自分に嫌悪感を抱き、負のスパイラルに陥ってしまう。

このままの状態で考え続けることが現実的でないことは明らかだ。では一体どうすればいいのだろうか。


意義の再発見―第1のステップ

抱えている仕事に意義を感じられないとき、その仕事に対して何らかの疑問が生じている場合が多い。
その疑問は自分がどんなことに意義を感じるのかということと関係している。
例えば私は「自分の作っているものがユーザの役に立ち、喜んでもらえる」ということに意義を感じるが、意義を感じられない状況では「この成果物は本当にユーザに使ってもらえるのだろうか、必要とされているのだろうか」という疑問を感じていたりする。
このような場合、疑問を解決することで再び仕事の意義を見つけることが出来る。
関係する人に質問をしたり、自分が思っていることを提案してみたりして疑問をひとつずつクリアしてくことでぼやけていた意義が鮮明になってくるのだ。


しかし疑問の解消が意義の発見に結びつかないこともある。期待する答えが得られなかったり、そもそも関心を持ってもらえないこともあるのだ。


意義の再発見―第2のステップ

仕事とそれに付随する疑問や課題の解決によって意義を見いだせないとき、目の前にある仕事よりももっと先にある目的を再度見直すことが有効だと思う。
意義を見いだせず、行き詰まってしまったときの私は目の前のことで頭がいっぱいになり、広い視野で物事を考えることができなくなっている。
そこで意図的に遠くを見、自分が何をしたいのか、どこに向かいたいのかを自問自答する。
そうすることでまず目の前の問題の重さが変わってくる。
それまでは頭の中の大半を占領していた問題が、取るに足りない些細な問題であると思えてくる。そして今目の前にある課題よりももっと考えるべきことがあるということに気づく。
個々のタスクがどうであるかというより、そのタスクを包括しているプロジェクトがどうあるか、どうであるべきかを考えるという具合だ。

このような考え方をするのは当たり前のことかもしれないが、ある目標からブレークダウンされたタスクに取り組んでいるともとの目標に立ち返った視点を忘れてしまいがちだ。
思い描く成果をあげるためにも、こうして広い視野がもてる場所に立ち返ることが必要だ。


意義の再発見―第3のステップ

取り戻した広い視野の中でさえも意義が見いだせないことがある。そもそも進むべき方向は正しいのか、という疑問があったり、自分のしていることに自信がなくなったりするのだ。
意識して遠くを見つめることができても納得する答えが得られない、もはや何がいけなくて何に悩んでいるのかもよくわからない。

こうして一生懸命考えても先へ進めなくなったとき、自分の中にある知識や経験からではアウトプットできない次元のことをしようとしているのだと思う。
今までにない次元のことをアウトプットしたいができないもどかしさに苦しんでいる状態だ。
それを解決するには自分にはない情報に触れることが必要だと思う。書籍やインターネットなどで得られる新しい知識や考え方、誰かの経験談や意見、あるいはアウトプットの手法などがそれに当たると思う。
こうして自分の中には存在しない要素を取り込むことでどこに目標を置くのか、その意義は何かを形にできるはずだ。


発見の繰り返しで見つかる自分

意義を見いだし意欲的にものごとに取り組む、その意義を見失ってしまった時には新たな意義を見いだすための行動をする。
このサイクルによって意義とそれによる動機を得ながら仕事を進められる。また、ひとつひとつの仕事に対して意義を明確にしていく行為は自分がどんな人であるのかを明らかにしていく。

こうして何によって意義を感じられるのかを把握していくことで「自分」という存在をいろんな側面から見つめることができると思う。そして自分を把握することで今後自分が関わっていく仕事や、それを一緒に進めて行くメンバーとの関わり方をより実りあるものにしていきたい。

2011年6月12日日曜日

500時間の行方

8時間。

私が平日仕事に費やしている時間です。
残業はなし、業務改善と題してマクロを使ったツールを作ったり、業務要件をまとめたり、業務マニュアルを作ったりしています。
メインの仕事はマクロの作成になっている今日この頃。
少し前まではそれでもやりがいを感じていたし、実際プログラミングする時に浮上する課題の解決が楽しくもありました。
しかし最近、このメインの仕事がどうにも楽しめなくなってきました。
ストレートに言うとつまんないのです。

同じようなプログラムの流用でだいたいやりたいことができるようになってしまいました。
ずっと同じ部署で仕事をしているので案件も似たり寄ったり。
だからといってその流用しているプログラムをパッケージ化しようとか、クラスにしようとか、そこまでは思えない・・・これは単にやる気の問題なのかもしれませんがね。

そして残念なことに、今の仕事場には今かかえている以上の仕事はありません。
今でも私は時間を持て余しているのであちこちの業務をつついてみては仕事を拾ってくる、そんなやりかたをしています。
つまりやろうと思わなければ何も仕事が無いのです。

今の仕事は契約で行っており、今年9月一杯までがその期間です。
今が6月、つまりあと3ヶ月ちょっとこの仕事を続けることになります。
1日8時間、1ヶ月160時間、3ヶ月ちょっとで500時間ぐらいでしょうか。


仕事があるだけでも幸せな世の中なのかもしれませんが、お金がもらえるってことの前にお金では買えない自分の時間を提供しています。
有限な私の時間ですから、私はもっと有意義な時間の使い方をしたいと思うのです。
さて、どうしたらいいのでしょう。


まだ次のステップはみえていません。
次の扉はどこに?

2011年5月10日火曜日

VBAで図形描画

業務マニュアルを作成していると業務フロー図を描くことがしばしばあります。
フロー図を描くための便利なソフトもありますが、みんなが使えるお手軽ソフトということでExcelを使って描くことが多いです(恐ろしく効率が悪いので私は好きじゃないけどね)。

そこで、どうやったら簡単に図形描画ができるかなと考えるわけです。


ワークシートにあるデータの個数分だけ図形を作成し、セルのデータを図形のテキストとして挿入する


こんな要件で作ることにしました。
使う部品は2つ。

  • 対象となるデータが入力された範囲をループする
  • 取得した内容で図形を作成する

使えるプログラムは書きためておきたいと思っているので部品であることがポイントです。
現段階ではこれから記述する内容になっていますが、もっと賢い書き方があるかもしれないし、部品にすべきポイントが違っているかもしれません。
どうであれ、書かないことには上達しません。

ということで。






○部品1:対象となるデータが入力された範囲をループする

Sub データ範囲の繰り返し処理()

  '処理開始位置行
  Dim i As Integer
  '処理終了位置行
  Dim m As Integer
  '処理対象カウンタ
  Dim cCNT As Integer

  '条件:処理開始位置をセレクトした状態にする

  i = Selection.Row

  Selection.End(xlDown).Select
  m = Selection.Row

  For cCNT = i To m

    'ここに処理を記述
    Debug.Print cCNT

  Next cCNT

End Sub





○部品2:取得した内容で図形を作成する


Sub リストから図形を作成する()

  '作成した図形
  Dim myShape As Shape

  '操作対象ワークシート
  With ActiveSheet

    '作成する図形のタイプ,表示位置TopLeft,サイズ幅高さ
    '四角形:msoShapeRectangle
    Set myShape = .Shapes.AddShape(msoShapeRectangle, 200, cCNT * 25, 100, 25)

    '参照したセルの値を図形に挿入
    myShape.TextFrame.Characters.Text = .Cells(cCNT, 2).Value

    'テキスト表示位置
    myShape.TextFrame.HorizontalAlignment = xlHAlignCenter

  End With

End Sub





○フュージョン!!:要件を実現する(リストデータから図形を作成)

Sub リストから図形を作成する()

 '処理開始位置行
  Dim i As Integer
  '処理終了位置行
  Dim m As Integer
  '処理対象カウンタ
  Dim cCNT As Integer

  '条件:処理開始位置をセレクトした状態にする

  i = Selection.Row

  Selection.End(xlDown).Select
  m = Selection.Row

  For cCNT = i To m

  '作成した図形
    Dim myShape As Shape

    '操作対象ワークシート
    With ActiveSheet

      '作成する図形のタイプ,表示位置TopLeft,サイズ幅高さ
      '四角形:msoShapeRectangle
      Set myShape = .Shapes.AddShape(msoShapeRectangle, 200, cCNT * 25, 100, 25)

      '参照したセルの値を図形に挿入
      myShape.TextFrame.Characters.Text = .Cells(cCNT, 2).Value

      'テキスト表示位置
      myShape.TextFrame.HorizontalAlignment = xlHAlignCenter

    End With

 Next cCNT

End Sub




依存しまくっている部品ですね 苦笑。

繰り返し処理はDo LoopよりForで処理した方が速いんだとか(大村あつしさんの本で読みました)。
以前はDo Until cells(cCNT,2).value = ""を使ってループ処理を書いていたのですが、最近はForを使って書くようにしています。

VBAは私が楽に仕事をするための道具です。
なのであくまでも"道具"として、磨きをかけていこうかなと思っています。
("手段"が"目的"になりがちな自分へのメッセージを改めて。笑)

2011年5月9日月曜日

ものごとがうまく進まないとき

つい最近まで仕事に行き詰まっていて、毎日もんもんとしていました。
夜眠れないこと、朝目覚ましより先に起きてしまうことまでもストレスで、そうなると日常にあふれることの多くはストレスでしかなくなります。
自分が良くない状態にあることはわかっていますが、「脱却したい、でもそれができない」という状態であることもストレス・・・もうどうしようもないという状態でした。

今回このような状況に陥ったのはおそらく仕事が原因のひとつだと思っています。
また同じ状況に陥ることがないように、また陥ってしまった場合にどうすればよいか、少しでもよい方向に自分を導けるように、ここに記しておこうと思います。


スパイラルの始まり

私は意味のない仕事をするのが嫌いです。
多くの人はそうだと思いますが、実際現場にはその意味がわからない仕事というのが転がっているものです(少なくとも私の派遣先現場には)。
そんな仕事でも要求されればやらなくてはなりません。でもやる気は全く起きません。
そこで私は仕事の意味や目的を自分で創りだしてしまいます。
そうすることでひとまず目の前の仕事を完了させるだけのエネルギーを捻出するのです。


でもこんな仕事のやり方をしていると無理が生じてきます。
だって本当はやりたくない仕事に無理矢理理由をつけているんですもの。
このまま理由を自分に押し付けてやる気を保とうとしていると、おかしな精神状態になります。
無駄に高まった意欲と目の前にある重みのない仕事とのギャップが吸収できなくなるのです。


仕事が進まない、初期の対応

抱えているタスクに疑問があるのなら、それに理由をつけて取り掛かる前にその仕事の意味を明確にすべきです。
業務の担当者に疑問点をぶつけてみる、本当にすべきだと思う仕事内容を提案してみる、そういうプロセスなしに言われたままの仕事を自分なりの解釈で進めていてもきっといいものはできません。
5分くらい担当者と話してみる、そんなことでもやもやが晴れることも多いです。



それでも納得がいかない時は少し先を見る

ひとまず目の前の仕事の目的を確認できた、それでも腑に落ちない何かがある場合。
私はなんのためにこの仕事をしているんだろう、漠然とした不安にかられます。
一応目的は明確化されたものの、それだけを見て仕事をすることに限界を感じてしまいます。
すると今度は漠然とした不安に襲われてまた仕事が進まなくなってしまうのです。
そんな時はその仕事のさらに先にあるものに目を向けてみることが大事だと思います。
(「そんな時」にならなくても常にそうあれることが私の理想ですが。)
目の前のことばかりを見て疲れてしまった眼の筋肉を和らげるように遠くを見てみる。
すると強ばっていた筋肉がほぐれるように楽になります。
いい意味で、仕事がどうでもよくなります。
仕事をすることが私の目的ではなく、仕事の先にある何か、例えば「車を買いたい!」っていう希望だったり、「もう少し大きなチームで仕事をしてみたい!」という野望だったり、そういうものを実現させるためのプロセスのほんの一部でしかないのです。
そのほんの一部のプロセスにも私という資本を費やし、時間を費やしています。
必要なプロセスであることが確かだとしても、そこでもんもんとすることはあまり賢い活動ではないと思うのです。

ちなみにこの考え方を教えてくれたのは松田公太さんの本でした。
もんもんとする私を見て知り合いの方が紹介してくれた本です。


目標はある、だけど何をしたらいいんだろう

先にある目標に向かって進もうとしても一体何をすればいいのかわからない、そんな状況に陥りました。
考えても考えても具体的な行動が思いつきません。
やりたい!というエネルギーはあるのにそれを行動に移せないことがまたストレスになってしまいます。

やりたいことがわからないとき、それはアウトプットをするためのインプット量が足りていないのだと思います。
一生懸命考えてもどうにもならないのは、自分の中にある知識や経験からでは出力できない次元のことをアウトプットしようとしているのだと思うのです。
具体的には新しい知識であったり、アウトプットの手法であったり様々だと思いますがいずれにせよ今いる自分のキャパには存在しない要素を取り込むことで「何か」を形にできると思います。

人に会って話を聞いてもらいアドバイスをいただく、先人の知恵や経験に学ぶ(本を読む)などいろんなやり方があると思います。
私はよく「技術力がないから解決できないんだ」と技術書を読んでいましたが、それは単に目の前のタスクを完了させるために必要なものであり、長期的な課題に取り組むために必要な要素ではないと思います。
実際、そんな状況で技術書を読んでも集中できないし、身にならないのが事実です 苦笑



仕事を発端に何も解決できない自分としばらく時間を共にしましたが、それも無駄ではなかったと思います。
こうして直面した課題に対しどう向き合うかを考えるきっかけになりました。
そしてきっと今度は今よりもう少し直面する課題が大きくなっているだろうと、そう思っています。

2011年4月21日木曜日

VBAエキスパート、合格はしたけれど。

このところの私はもっぱらVBAでのプログラミングがお仕事。
そこでその実力やいかに、と先日VBAエキスパートという試験を受けてきました。
決意表明の記事もエントリしてましたね。

ExcelVBAベーシック 資格試験


資格はオデッセイコミュニケーションズという会社が発行しています。

「VBAエキスパート公式サイト」

実際に試験が行われるのは委託されている各地の試験会場で、資格取得講座を開いている学校である場合がほとんどのようです。
私は実施日数の多さと交通の便から新宿のテストセンターで受験することにしました。
この試験会場は都内では多分一番VBAエキスパート試験の実施をしている会場だと思います。
土曜日も受験ができたのがありがたかったです。

「新宿駅西口テストセンター」

試験は選択式で、PC画面から入力して解答する方式でした。
途中、私も含め数名の方のパソコンでアプリケーションがフリーズしており、試験よりも試験を実施しているアプリがどうなってるのか気になったりもしました 笑
試験の読み込みの遅さや画面遷移の遅さ、フリーズなど気になる現象がいくつかあったのですがあれはいったいどんな構造になっているのでしょうね・・・

脱線しましたが、試験は時間を持て余してしまうくらい簡単でした。

感覚では。

というのも、試験終了後にすぐに試験結果がわかるのですが、その結果が予想を遥かに下回っていたのです。


手応えだとほぼ満点に近いだろうなという感覚でしたが実際は満点1000点中825点。
しかも分野によっては50%を切る正答率なのです。
自分が理解していることにムラがあることがよくわかりました。
独学でもそれなりに体系的に習得してきたつもりでしたが、そうではなかったようです。
内容をみてみると、高得点を出せている分野は仕事でよく使うものだったりします。
つまり使わないと覚えないってことですね、当たり前ですが。

逆に言うと覚えたいんだったら使いまくれ!ってことです。
今回の試験は正答率80%ちょい、という期待はずれな結果でしたがまた次に試験を受けるときはそれ以上の正答率を目指したいです。



もちろん、この次はExcelVBAStandard を受験します(今回受けたのはExcelVBABasic)。
Excel周りのお仕事はささっと終わらせちゃう、しかも綺麗!そんな仕事の仕方が好きです。

2011年4月7日木曜日

VBAでJavaScriptが埋め込まれたリンクをクリックする

仕事場で使用されている業務システムがInternetExplorer6クライアントで動いており、私はこのIE上に表示されるコンテンツをVBAで取得するという仕組みを作っています。



tableタグやinputタグ内のコンテンツは難なく取得できたのですが、リンク先の画面からデータを取得するというところで行き詰まってしまいました。

だってリンクがクリックできないんだもん 笑
(URLを直接指定するのではなくリンクからでないと遷移できない画面なのです)

inputタグのsubmitボタンは簡単にクリックできるのですが、aタグに埋め込まれたリンクがクリックできませんでした。

そこでいつものあのサイトにたどり着くだろうなと思いつつググったわけです。
やはり行き着いたのはこのサイトでした。

「AB型の変わり者 三流プログラマー Ken3のHP」

私がVBAでIEを操作できるようになったのはこのサイトのおかげです。

もともと知人の方がVBAでWebページを操作するという仕事をしていらっしゃるという話を聞いたことがあり、VBAでWebページが操作できることは知っていました。

それを身につけるに至ったのは、仕事場の業務システムリリースにあたって大量のデータをクリーニングのためにチェックしていた際、この作業はVBAで処理できるんじゃないか、と思い立ったからでした。

そこから私のVBAとIEの物語が始まりました。

IEで動く業務システムを支配下に置く(?)ことに快感を覚え、またこのプログラムによっていろんな業務処理が効率化できそうだということで、VBAのツール作成依頼があちこちから湧いてきました。

今回のツール作成もその一つです。

さて、以下プログラムの紹介です。

VBAからIEブラウザ上のJavaScriptのリンクをクリックします。

-----------------------------------------------------------------------------------

1.リンク先アドレスの確認
まずはリンク先のURLがプログラム上でどう読み込まれるのかを把握します。
対象のWebページのHTMLソースを参照すればリンク先のアドレスを知ることはできますが、プログラム上で処理する場合のアドレスと異なっている場合があります。
確実に操作するためには先にリンク先のアドレスを調べた方がよさそうです。


Option Explicit

'-----変数-----

'IEオブジェクト
Dim objIE As Object

'処理対象のリンクカウンタ
Dim i As Integer
'--------------


'----------------------------------------
'アドレスの確認
'----------------------------------------
'リンク先アドレスを文字列で取得し、イミディエイトウィンドウに表示する

Sub CheckAddress()

'InternetExplorerオブジェクトを生成するサブルーチン呼び出し
Call CreateIE

'生成したIEオブジェクト上で処理対象のURLを指定し、遷移
objIE.navigate "http://oirnao.blogspot.com/"

'ページ読込待機のサブルーチン呼び出し
Call WaitIE

'IEオブジェクト内の全リンクをチェックし、イミディエイトウィンドウにリンク先アドレスを表示
For i = 0 To objIE.document.Links.Length - 1
      
        'イミディエイトウィンドウに表示
        Debug.Print objIE.document.Links(i).href
      
    Next i
  
    '生成したIEオブジェクトを閉じる
    objIE.Quit

End Sub
'----------------------------------------
'End Of アドレスの確認
'----------------------------------------


処理結果をイミディエイトウィンドウで確認するとクリックしたいアドレスが表示されているはずです。



HTMLソースを参照すると大文字で入力されている内容が実は小文字だったりします。
HTMLソースだと"JavaScript"~となっているところが"javascript"~というように。
この大文字小文字の違いで意図したように処理されないという事象が発生するので先にアドレスを確認します。

2.指定したリンクのクリック
1.リンク先アドレスの確認で取得したリンク先アドレスをプログラムに埋め込みます。
ここでは仮にリンク「javascript:openwinA('5');」をクリックするものとします。


'----------------------------------------
'リンクのクリック
'----------------------------------------
'指定したリンクをクリックする
Sub ClickLink

'InternetExplorerオブジェクトを生成するサブルーチン呼び出し
Call CreateIE

'生成したIEオブジェクト上で処理対象のURLを指定し、遷移
objIE.navigate "http://oirnao.blogspot.com/"

'ページ読込待機のサブルーチン呼び出し
Call WaitIE

'IEオブジェクト内のリンクをチェックし、クリックしたいリンクを探す
For i = 0 To objIE.document.Links.Length - 1
      
        '取得したリンク先アドレスを文字列単位で比較
        If objIE.document.Links(i).href = "javascript:openwinA('5');" Then
        
          'クリック対象だったらクリックする
            objIE.document.Links(i).Click
          
            'ループを抜ける
            Exit For
          
        End If

    Next i

End Sub
'----------------------------------------
'End Of リンクのクリック
'----------------------------------------


0.補足
上記で使用しているサブルーチンです。


'----------------------------------------
'IEオブジェクト生成
'----------------------------------------
'Internet Explorerのオブジェクトを生成する
Sub CreateIE()
  
    'IEオブジェクトを生成
    Set objIE = CreateObject("InternetExplorer.Application")
  
    'IEオブジェクトを可視化する
    objIE.Visible = True
  
    'IEオブジェクト画面の表示位置(左上の座標)とサイズ(高さ・幅)を調整
        '左上 上位置
        '左上 左位置
    objIE.Top = 0
  
    objIE.Left = 0
  
End Sub
'----------------------------------------
'End Of IEオブジェクト生成
'----------------------------------------


'----------------------------------------
'ページ読込待機
'----------------------------------------
Sub WaitIE()
'指定したページの読み込みが完了するまで待機する
    Do Until objIE.Busy = False
        DoEvents
      
    Loop

End Sub
'----------------------------------------
'End Of ページ読込待機
'----------------------------------------


-----------------------------------------------------------------------------------

以上、私がリンクをクリックするまでに行った処理です。
クリックができて画面遷移した瞬間に、嬉しすぎて仕事場でにやついたのは秘密です。
できることが増えるって楽しいですね。

2011年4月4日月曜日

初めてのソースコードレビュー

私は「プログラマ」というポジションで仕事をしたことがなく、ソースコードレビューというのも受けたことがありません。
そもそもプログラミングするのかっていう話もありますが、一応業務で使っている仕組みをVBAで組むくらいのことはしています。
そんな話を愚痴まじりにTwitterでつぶやいていたところ、VBAでツールを作ってくれないかというお話をいただきました。
こんななんとかのたまごもいいところな私に、です。
ありがたいお話ですね。

要件を聞いてみたところ、私にも作れそうだったので引き受けさせてもらいました。

こんな形で成果物を要求されるというのもそういえば初めての話です。
業務担当者に向けてツールを作っている私が成果物として求められているのはその仕組みからアウトプットされたものであって、仕組みそのものではなかったりします。

”自分以外の誰かに向けてモノを作る”
ということに、最初の最初から疑問がわいてきました。
変数名はどうしようとか 笑
コメントはどれくらい入れたらいいんだろうとか、そのコメントも誰にでも理解できる内容になっているのだろうかとか。
プロシージャはどの機能単位にしたらいいのかというのも疑問でした。
どこまで細分化するのか、結構悩みました。

テスト段階までは1プロシージャ15~20行くらいで4つのプロシージャでしたが、動作確認の後全部まとめて1つのプロシージャにしました。
小さなプログラムだったのでここまで分割する必要はないのかな?という疑問符付きの状態で納品しました。


さて、今日納品物のレビュー結果が返ってきました。
指摘されたのは「仕様変更に対応できない」という点でした。
なぜか。
ひとつのプログラムに全部の機能を記述しているから。
仕様変更できるけれど、その度に全部のソースを解析する必要があり、無駄な時間を使ってしまう。

・・・おおぉ、、私は何をしているんだろう。
頭ではわかっていたことが実際には全くできていませんでした。
プログラミングの本を読めば必ず書いてあるようなことが、プログラミングの本を読んできた私にできていなかったのです。
と同時に疑問に思っていたことがすっきり返ってきました。
どんな小さなツールであっても、プログラミングをする上で考えてあげなくちゃいけないことは同じ。
可読性だったり保守性だったり、ソフトウェアとして持っておくべき品質は規模に関わらず同じなのですね。


教科書に書いてあることと自分がやったこと、現場で求められているもの、その3つが同じフィールドに並んだ瞬間でした。
自分だけで完結していては見えなかったものが見え、また自分がやるべきことが明確に現れてきました。
自分のたまごレベルもよくわかりますね。


勉強だけしていても実際にはわかったつもりのことが多いのかもしれません。
こうして実践して指摘をいただいて、何が失敗だったかを理解すること、そこからまた次の成果を出すこと、この過程こそが本当の勉強なのかもしれないですね。
机上で教科書を読むのなんて、予習くらいにしかならないのかもしれません。

2011年3月30日水曜日

ツールバーの活用~Excel~

仕事で最もよく使うソフトであるMicrosoftOfficeやエディタ系のソフトなどは必ずツールバーのカスタマイズを行って使っています。
自分に必要なツールバーを作っておくことで仕事を効率的に行うためです。

私の場合、規定で設定されているツールバーにある機能は使わないものだったり、ショートカットキーで操作する内容のものが多いので、カスタマイズすることによって得られる効果は大きいです。

今回はExcelで使用しているツールバーについて紹介します。
ちなみにここで紹介しているExcelのバージョンはExcel2003です。

----------------------------------------------------------------------------------

●「標準」ツールバー
成果物として作成するExcelファイルは印刷して出力できるような形にすることが多いので、ページ設定に関連するツールバーを配置しています。



メニューバーのファイルにある機能と重複する部分なのでメニューバーのすぐ下に配置して使っています。
ファイル作成の最初の段階で基本的な設定を行い、最終段階でシート上のデータに合わせた最終調整を行います。
図形描画のツールバーを表示・非表示にするアイコンも配置しています。
これは作業スペースを広くするためで、図形を使用しないドキュメントでは図形描画ツールバーを非表示にしています。
(仕事場で使用しているパソコンは画面サイズが小さいのでこういう小さな機能も役立ちます 笑)

●「書式設定」ツールバー
セルの操作に関する機能を集めいています。



ショートカットキーの [Ctrl + 1] で開いて使う書式設定画面からの設定でよく使うものを主に配置しています。
書式設定画面はよく開きますが、書式設定画面自体タブで複数のページに分かれており、選択項目も多くて都度開いて設定するのは手間なので、使用頻度が高いものはツールバーに配置します。
ウィンドウ枠の固定や行・列のグループ化を行うアイコンも配置していますが、これはシートの編集を効率的に行うためです。
列や行の選択はショートカットキーの [Ctrl + Space] と [Shift + Space] を使って行い、ツールバーから必要な機能を選択します。
(このショートカットキーはMS_IMEの場合かな入力モードにしていると無効です。ATOKではかな入力モードでも有効です。)

●「コントロールツールボックス」ツールバー
私はマクロが使えるシートを作成することが多いので、コントロールツールボックスはいつでも使えるようにツールバーを表示させています。



これについては規定のまま使用しています。

●「チェック/コメント」ツールバー
ドキュメントの作成途中にメモとしてコメントを挿入することがあり、その編集作業を簡単に行うために配置しています。



コメントの操作はショートカットメニューからの操作で行うこともありますが、それほど使用頻度が高くはないのでメニューに割り当てられたキーを覚えていません。
なのでツールバーを使っていつでも簡単にコメントが挿入・削除できるようにしています。

●「図形描画」ツールバー
図形の作成時に使うツールバーです。
前述の表示・非表示切替でこのツールバーは必要な時にだけ表示させています。



Excelでの図形操作はあまり好きではありませんが、仕事をしていれば使わずにいることもできないので、こうしてツールバーを活用することで少しでも使いやすくなればと工夫しています。
ちなみに図形描画には主にVisioを使ってます。内容によってはCacooも。
----------------------------------------------------------------------------------

ツールバーのカスタマイズはユーザ独自のツールバーを作成することでもっと効率性を上げられると思います。
よく使う一連の機能をマクロにしてみたり、ちょっとこだわりのアイコンを使ってみたり。
(気分的な作業効率の向上も大切だと思っています。)
今回はExcelに標準的に使われているツールバーのカスタマイズについて紹介しましたが、これなら3分から5分もあれば自分好みのツールバーが作れると思います。
とりあえずやってみる、効果を感じてみる、という意味でもお勧めです。
実際に使っていくうちに使わないものは削除すればいいですし、よく使う機能があれば追加すればいいですね。

私ももう少し使い込んでオリジナルツールバーに磨きをかけていきたいです。

2011年3月24日木曜日

Internet Explorer を起動するVBA

Internet Explorerを起動するマクロは以前作成していました。
※参考:http://oirnao.blogspot.com/2011/01/vbaieie.html
今回はこのマクロをもっと使い勝手の良いものにしようと思い、少しだけ改良してみました。


引数指定されたページをIE上で表示する、という簡単なものです。

-----以下ソース-----
'--------------------------------------------------------------------------------------
'InternetExplorerを起動し、引数に指定されたURLを表示する
'--------------------------------------------------------------------------------------
Sub BootIE(URL As String)
    Dim objIE As Object
  
    'IEObjectをセット
    Set objIE = CreateObject("InternetExplorer.application")

    'セットしたObjectをActivate
    objIE.Visible = True

    'Objectの表示位置調整
    objIE.Top = 0
    objIE.Left = 0
   
   '指定されたURLのページ表示
    objIE.navigate URL
  
    '指定したページの読み込みが完了するまで待機
    Do Until objIE.busy = False
        DoEvents
    Loop
  
End Sub
'--------------------------------------------------------------------------------------
'End
'--------------------------------------------------------------------------------------

-----ソースここまで-----

私の知識とともにこういった小さなプログラム達が成長していくことが楽しみだったりします。
まだ少ししかネタはありませんが、VBAはよく使う道具なのでライブラリ化していくつもりです。
きれいなプログラムが書けるようになりたいな。

2011年3月23日水曜日

レビューの進め方

仕事場では業務マニュアルを作ったり、プログラムの改修をしたりすることが多くあります。
その作業工程で発生する「レビュー」について考えてみました。

業務マニュアルの作成にしても、プログラムの改修にしても、担当者との相談はありますが実作業は私一人で行っています。
するとある程度のレベルまでは自分の成果物に対して自分でレビューをする、というふうになります。
その状態に私は少し疑問を持っていて、もっとユーザにもレビューに積極的になって欲しいと思っていました。
では私はユーザに何をレビューしてもらいたいのだろう、と考えてみました。

  • 業務の解析結果
  • プログラムの解析結果
  • 解決策の模索、実装方法
  • 最終成果物(プログラム、マニュアル、仕様に関するドキュメントなど)

これらは私が実際に作業をしていて作成・レビューの段階で行き詰まることが多い事項なのですが、あれ待てよと。
これらに対して頭を抱えるのは、まだまだ未熟な技術者である私には当然のことじゃないかと。
むしろこうして頭を抱えている間にこそ成長のきっかけが見いだせるはず。

…なんとなく抱いていたレビューに対する疑問がクリアになってきました。
レビューするのに必要な知識が足りないこともそうですが、レビューという作業の進め方そのものにもまだ改善の余地がありそうです。
単にいいものを作りたいという気持ちだけでレビューするのではなく、レビューという行為そのものにもレビューが必要なのです。


私は今のレベルの仕事をこの先ずっと続けていくつもりはありません。
もっと自分なりに高いところへ進みたいと思っています。
このブログのテーマでもありますが、今向き合っている仕事を通して成長していかなければなりません。
今向き合っている仕事で成長ができないと思うなら、向き合い方や向き合う対象を変えなければなりません。


辛いけど、頭を抱えた分だけ成長していける、そう信じています。

2011年3月8日火曜日

やりたいことの整理

仕事をもらう範囲が広がり、同時に勉強したいことも広がって、"やりたいこと"が無限大の広がりを見せ始めました。
そうなると私の頭の中は「あれもやりたい、これもやりたい、これをすべきだ」というような意欲に満たされっぱなしで、行動が置いてけぼり。
それではいけないので「頭の中にある全てのこと」をアウトプットすべく、マインドマップを書きました。

最初はとにかく書き出す。
階層は気にせずに箇条書きに近いような感覚で書き出し、その後でグループ化をして階層をつけていきました。

「やりたいこと」というテーマで一通り書き出してみたのですが、そこで「どうしてそれがやりたいのか」を考えてみました。
図の旗がついているトピックは目標、目的を書いたものです。
(表現方法についてはもっと見やすい書き方があるかもしれませんが、それもまた勉強しつつ…)
すでに着手しているものや期日が決まっているものについては優先度を数字でつけました。

「どうしてそれがやりたいのか」を考えてみると意外と漠然とした意志である事項も見えてきました。
目的もなく頑張る、だなんてあまりよい方法ではないですよね。
上の図は思考途中のものですが、まだ落とし込みが足りない感じです。
具体的なタスク(=すぐに実行できる)に落とし込むことが必要です。

ただ、「やりたいな」レベルのものが多いことも確かです。
なのでとりあえずそのやりたい想いの受け皿を準備してみてはどうかなと思いました。
今のところその役割を果たしているのはEverNoteですが、その機能を果たせていない感があるので使い方の見直しもしくはそれに変わる手段を考える必要がありそうです。


…こうして考えてみると、ちょっとやそっとでは形にできないものが多いです。
しかし考えることをやめず、具体的なタスクになり目的が達成できるまでの道のりを作っていきたいと思います。

今週の宿題かな。

2011年2月25日金曜日

仕事場の机の上

私の作業机はよくある事務机で、一体型のデスクトップパソコンと電話が置いてあります。
作業中はさらにいろんな書類やノート、筆記具が広がります。

パソコンの左側には小さなスタンド付きのカレンダーが置いてありますが、中身はカレンダーではなくショートカットキーのメモです。
業務でよく使うコマンドのうち、記憶していないものが列挙してあります。
こんなリストです。


E 列の非表示 Ctrl+0
E 列の表示 Ctrl+Shift+0
E 行の非表示 Ctrl+9
E 行の表示 Ctrl+Shift+9
OS ショートカット作成 Ctrl+Shift+Drag
E 左のセルコピペ Ctrl+R
E アクティブセル表示 Ctrl+Backspace
E 複数セルに同一値入力 Ctrl+Enter
E 列選択 Ctrl+Space
E 行選択 Shift+Space
E コメント挿入 Shift+F2
E ジャンプ F5
W レベル上げ Alt+Shift+←
W レベル下げ Alt+Shift+→
W 本文に Ctrl+Shift+N
W 印刷プレビュー Ctrl+F2
VBE ブレークポイント設定 F9
VBE 入力候補表示 Ctrl+Space
cmd ディレクトリ移動 cd
cmd ドライブ切替 cd /d
cmd FileList作成 dir /b > filelist.txt
cmd 指定拡張子のFileList作成 dir /b *.xls > filelist.txt

完全に身につくとリストから消えて、また必要なショートカットキーがあれば追記されます。
ショートカットキーを覚えると、仕事のスピードが変わってくるし、ショートカットキーでさくさく仕事をする自分が好きです 笑


デスクトップの背景画像は、ネットで拾ってきたGTDの画像に少しだけ手を加えたものを使っています。




画面の右側にある時間の表記が私が追加したものです。
この画像の横、つまりパソコン画面の右淵にそのタイムラインが対応します。
1日のスケジュール(タスク)を付箋に書き出し、タイムラインに沿って配置します。
途中で打ち合わせが入ったりという変更にも付箋1枚で対応できて便利です。
1日何をすべきなのかという小さなスケジュール管理ですが、これがさくっとできないことには大きなスケジュール管理もできないと思っていて、毎日がその練習です。


GTDやライフハックについては様々な情報がありますが、自分への最適化あってこそだと感じます。


2011年2月22日火曜日

ExcelVBAベーシック 資格試験

仕事でよくVBAを使ったちいさな仕組みを作るのですが、勉強のついでに資格試験に挑戦することにしました。
VBAエキスパートと呼ばれる資格で、VBAの中にさらにExcelとAccessの分野があります。
今回私が受けるのは「ExcelVBAベーシック」というものです。

独学でいろんなことを勉強していると、たまに"自分には一体何ができるのだろう"という疑問にぶつかります。
確かにこうして仕事をしているし、契約の延長話をいただいたりして評価は得ている、だけれども…
要するに自信をつけたいんですよね。
資格を持っていればすなわち仕事ができるかというとそうではないと思いますが、資格を持っていることで私の勉強に対する姿勢を示せたり、最低限できることを説明することができると思っています。
今のところ私が持っている資格は職歴と同じく貧相なものですが、それでもいくらかの自信を私に与えてくれます。

また、資格の取得へ向けた勉強をすることで今までアンテナを張っていなかった分野に目がいくようになります。
それが全く興味のない分野であることは少なく、むしろこんな分野があったのかという出会いであることが多いです。
そういう新しい知識との出会いの場という意味でも資格取得は自分にとってのプラス要素だなと思います。

3月19日土曜日、試験本番までもう少し勉強しようと思います。


----------------------------------------------------------------
メモ:VBAエキスパート試験申し込み手順

1.主催者のサイトから試験の情報を得る
http://vbae.odyssey-com.co.jp/index.html

2.ふむふむ、と納得したら申し込む…がその前に、IDの登録が必要
http://www.odyssey-com.co.jp/id/

3.登録が完了したら申し込む会場を探す(試験開催校によって日程が色々ある)
http://vbae.odyssey-com.co.jp/exam/location.html

4.会場と日時が決まったら申し込む

5.指定口座に受験料を振り込む
(受験料は12,600円です。…私には結構な負担w)

6.いざ出陣!

メモ:試験概要

・資格名称:Excel VBA ベーシック
・内容:
Excel VBAの基本文法
Visual Basic Editorを使った基礎的なマクロの読解・記述
・問題数:40問
・試験時間:50分
・合格基準:650~800/1000
----------------------------------------------------------------

2011年2月17日木曜日

VBEショートカットキー

VBEの操作で使えそうなショートカットキーを列挙しておきます。
日常的に使っているコピーやペーストについては触れません。
VBAについて勉強をしている中で、これは!と思ったものです。



コードウィンドウ
Ctrl + →右の単語へ移動
Ctrl + ←左の単語へ移動
Ctrl + Homeモジュールの先頭へ移動
Ctrl + Endモジュールの末尾へ移動
Ctrl + Shift + 方向キー単語単位、マクロ単位で文字列を選択
Ctrl + Delete単語の最後までを削除
Ctrl + BackSpace単語の先頭までを削除
Ctrl + Y現在行を削除
Shift + Tabインデントを戻す
Ctrl + ↓次のプロシージャ
Ctrl + ↑前のプロシージャ
F3次を検索
Shift + F3前を検索
Ctrl + Jプロパティ・メソッド一覧の表示
Ctrl + Shift + J定数の一覧を表示
Ctrl + Iクイックヒントの表示
Ctrl + Shift + Iパラメータヒントの表示
Ctrl + Space入力候補の表示
Ctrl + F2オブジェクトボックスに移動
F6コードウィンドウの分割時にペインを切り替える
メニュー
Alt + F11Excelへの切り替え
Alt + Q終了
Ctrl + Mファイルのインポート
Ctrl + Eファイルのエクスポート
F7コードウィンドウの表示
Shift + F7オブジェクトウィンドウの表示
Shift + F2定義の表示
Ctrl + Shift + F2元の位置へ移動
F2オブジェクトブラウザの表示
Ctrl + Gイミディエイトウィンドウの表示
Ctrl + L呼び出し履歴の表示
Ctrl + Rプロジェクトエクスプローラの表示
F4プロパティウィンドウの表示
F8ステップイン
Shift + F8ステップオーバー
Ctrl + Shift + F8ステップアウト
Ctrl + F8カーソル行の前まで実行
Ctrl + Wウォッチ式の編集
Shift + F9クイックウォッチ
F9ブレークポイントの設定/解除
Ctrl + Shift + F9すべてのブレークポイントの解除
Ctrl + F9次のステートメントの設定
F5Sub/ユーザーフォームの実行
Ctrl + Break中断
全てのウィンドウ共通
Ctrl + Tabウィンドウの切り替え
Alt + F5エラー処理ルーチンを実行する/呼び出し側のプロシージャにエラーを返す
Alt + F8エラー処理ルーチンをシングルステップで実行する/呼び出し側のプロシージャにエラーを返す
Alt + F6最後の2つのアクティブウィンドウの切り替え
Alt + F4アクティブウィンドウを閉じる/VBEの終了
Shift + F10ショートカットメニューの表示
ユーザーフォームウィンドウ
Ctrl + J最前面へ移動
Ctrl + K最背面へ移動

ふぅ。
結構たくさんあるってことがわかりました。
今のところ、用途がよくわからないショートカットキーもあります 苦笑。
しかしショートカットが割り当てられているということは、それなりの使用頻度だったり重要度だったりすると思うのです。
もっとVBAのこと、VBEのことを勉強してこれらのショートカットキーを有効活用したいものです。

IT業界で仕事を始めた当初から、私はショートカットキーを使うのが好きでした。
そしてそれによって仕事のスピードを上げていましたし、ミスもマウスを使うより断然少ないです。
GUIを駆使したアプリが増えてきましたが、業務で使うようなアプリはキー入力からの操作にもずっと対応していて欲しいです。

2011年2月16日水曜日

日経産業新聞を読む

出向先の現場には自由に読める新聞が毎朝置いてあります。
読めるのは日本経済新聞、朝日新聞、日経産業新聞、産経新聞です。

私は新聞ではなくニュースサイトやTwitterのニュース配信系アカウントをフォローすることで情報を得ていたのですが、新聞から発信される情報(図表での解説やレイアウトから生まれる情報など)もやはり欲しいと思い、仕事場にある新聞を読むことを習慣化する計画を立てました。
新聞代の節約、なんていうことも考慮しつつ 笑

よくわからないことをインプットしようとしても眠くなってしまうので今のところ日経新聞は通勤電車の中で人が読んでいるのをちらっと読むくらいです。
産経新聞は内容的に欲しい情報が少ないのでスルーしています。
で、仕事場に置いてあったので存在を知った日経産業新聞がこのところのお気に入りです。

産業新聞というくらいなのでいろんな業界の新規事業だったり研究開発、工場の稼動状況などが掲載してあります。
これがおもしろくてたまりません。
とにかく刺激的です。
今日は手ぶらで読みに行きましたが、明日からはノートとペンとiPhoneを持って行こうと思った次第。
記事を読んでいるといろんな思考が頭をかけていくのではき出したくなります。

業界のトレンドは経済状況を反映していると思うので、産業新聞を読むことは経済新聞を読むことにもなっている気がします。
経済的な数字をみても私にはピンときませんが、例えば海外事業展開の記事でその企業がどこにどれだけの規模で何を展開するのかを読めば、その地域がどれくらいの労働人口で経済規模なのか、どこにお金が流れていくのかがぼんやりとでもつかめます。
もっと経済のことを知れば具体的な数字や事象を伴ってこの事業展開の背景にあるものが把握できるのかもしれませんが、まぁそれは追々ということにしておきます。


何をどこからいつ得るのか、それをうまくやっていくのもIT屋さんには必要なスキルだと思います。

2011年2月10日木曜日

思わぬところに(アジャイル開発に関する書籍)

Remember The Milkの勉強リストの中に
「チームで物事を進める方法、自分がどう行動すべきかの参考書」
というのが入っているのですが、これは単独で仕事をすることばかりだった私がチームメンバーの一員としてうまく仕事をして行くにはどういう考え方をしたらいいのだろう、という疑問を解決することが目的で追加されたタスクでした。

それとは別に、「アジャイル開発に関する本を読む」というタスクがあって、アジャイル開発に興味を持った段階で書店で下調べをしており、チェックしていた書籍を先日購入しました。

斜め読みからスタートするのですが、半分あたりまで読んだ今、冒頭のタスクがピーンと頭の中に降ってきたのです。
チームでつまりプロジェクト単位で仕事を進めていくということ、その考え方や手法が書いてあるのはこの本だ!!と刺激的な出会いに興奮しました。
どこで何がつながっているかというのはわからないものですが、それがわかったときの覚めるような感覚はくせになりますね。

さてさて、続きを読むこととします。

2011年2月7日月曜日

要求仕様書とは何か、を探る

要求仕様書ってそもそもどんなドキュメントなの?
仕事場での受け入れテストをきっかけに、要求仕様書について学び始めました。

…仕事場でいろんなシステムに関するドキュメントに目を通していて、ドキュメントのそもそもの内容が知りたいと思いました。
当時現場で見ていたドキュメントは
・ユースケースシナリオ
・業務機能定義書
・ジョブフロー図
・画面定義書
・イベント定義書
・項目定義書
といったタイトルがつけられたものでした。
ユーザー部門による受け入れテストの最中で、私もそのチームメンバーの一人としてこれらのドキュメントに目を通すこととなりました。

さて、いざテストシナリオを起こすぞというときになって、これらの仕様書を見てもはっきりとテスト結果が予測できない事項が数多くありました。
ドキュメントとしてそんな内容でいいのか悪いのか、駄目だとしたらどうあるべきなのか、そう思ったのがきっかけです。

私は書籍から勉強することが多く、その補助としていろんなウェブサイトを閲覧したり、また別の本を買ってみたりしています。
今回もいつもと同じように本屋さんへ行き、要件定義関連の書籍をざーっと見ました。
その中で読んでみたいという内容だったのが「基礎から学ぶ!!ソフトウェア要求仕様書」という本でした。
※参考



読むポイントは"要求仕様書ってどんなドキュメントなの?"という疑問を解決するもしくは解決するためのヒントを得ること(長い時間をかけて読んでいたらこの目的を忘れて何をしたかったのか考えてしまいました 汗)。
この本から全てを得られるとは思っていませんが、何も学ばないわけにはいきません。

斜め読みから始まってもう3回ほど読みましたが、内容がだんだん冗長な感じがしてきました。
つまり、要求仕様書において押さえるべきポイントは要求仕様の書き起こしから内容をつめて完成させ、保守するに至るまで一貫して変わらないんじゃないか…
というところまで読んでます。
じゃあそのポイントは何か、というのを自分なりにまとめあげたいなと思っています。
きっとこの考え方は要求仕様書に限らずほかのドキュメント作成においても応用できる考え方だと思うのです。

まとめた内容はまたそのうちポストできればなと思います。

こうやって1冊の本からいろんなことを学び考える、この過程が好きです。
そしていつのひか自分が要求仕様書レベルのドキュメントを作成したりレビューしたりできる日が来るのが楽しみです。

2011年2月3日木曜日

電話番号データから局番区切りで文字列取得

人生初、VBAでユーザー定義関数を作りました。
内容はとても簡単なもの。
Excel関数レベルです。

別にユーザー定義関数にしなくてもプログラム的には問題なかったのですが、それだと書くのが面倒なのと、ソースがごちゃっとしてしまうのとでこうして関数を作りました。

関数が果たす要件は
・電話番号データから市外局番、市内局番、加入者番号をそれぞれ取得する
というもので、インプットされる値は
・半角数字と半角ハイフンで入力された電話番号
という前提をおいています。

プログラムを書く前に、A4用紙にざざっと構造を書きました。
直接開発環境に向かうと私の頭はとっちらかってしまうので、こうして手書きで構造を見える形にすることが多いです。

以下ソースです。
-----------------------------------------------------------------
'--------------------
Function GetTelNum1(TelNum1 As String) As String
'引数に与えられた電話番号(99-9999-9999)から市外局番を取得する
        GetTelNum1 = Left(TelNum1, InStr(1, TelNum1, "-", vbTextCompare) - 1)
      
End Function
'----------< end of Function >----------


'--------------------
Function GetTelNum2(TelNum2 As String) As String
'引数に与えられた電話番号(99-9999-9999)から市内局番を取得する
        GetTelNum2 = Mid(TelNum2, InStr(1, TelNum2, "-", vbTextCompare) + 1, _
            InStrRev(TelNum2, "-", , vbTextCompare) - InStr(1, TelNum2, "-", vbTextCompare) - 1)
      
End Function
'----------< end of Function >----------


'--------------------
Function GetTelNum3(TelNum3 As String) As String
'引数に与えられた電話番号(99-9999-9999)から加入者番号を取得する
        GetTelNum3 = Right(TelNum3, Len(TelNum3) - InStrRev(TelNum3, "-", , vbTextCompare))
      
End Function
'----------< end of Function >----------

-----------------------------------------------------------------

Excel関数でも似たような文字列の取得をよくやります。
この場合、Excel関数だったら
市外局番 = Left(A1,Search("-",A1,1)-1)
市内局番 = Mid(A1,Search("-",A1,1)+1,Search("-",A1,Search("-",A1,1)+1)-Search("-",A1,1)-1)
加入者番号 = Right(A1,Len(A1)-Search("-",A1,Search("-",A1,1)))
となりますかね。

もっと簡単な取得アルゴリズムがあるのかもしれませんが、私が今の知識で思いついたのは上記の内容でした。

ユーザー定義関数って、ちょっと一手間必要な処理に大活躍しそうですね。
今回は簡単な内容でしたが、できあがったものを使うのはとても楽しかったです。

これからもっといろんな関数を作ってみたいなと思いました。

2011年1月30日日曜日

VBAをつかったツールのインターフェース

仕事で使うツールの開発。
使う言語は最近話題の(私の中だけでねw)VBA。
うちのシステムにあるDBに特定の条件で検索しに行って、結果を拾ってくるっていう仕組みなんだけど、いいインターフェースが思いつきません。
入力データはたぶん100件~1000件くらいで、ユーザはパソコンが使えます、っていうレベルのアルバイトさん。
その人達にストレスなく、性格にデータを入れてもらって、検索をしてもらえるか、そしてその結果を性格に読み取ってもらうにはどうしたらいいか、色々と満たしたい要求があるのです。

しかもそのツールを汎用的なものにしたい。
今回の案件に限らず、ずっと使えるような仕組みにしたいのです。

うーん…。
Excelさんの画面を眺めながらまた考えてみることにします。

2011年1月24日月曜日

IE6の起動時画面サイズ設定

InternetExplorer ServicePack2(IE6 SP2)において、IE起動時の画面サイズを設定する方法。

職場ではIE6を使用していますが、起動時の画面サイズが設定されるされるタイミングがどうもわからず、おかしなサイズのまま設定された画面を毎回最大化して使っていました。
しかしそのままではIEに負けてしまった感があるので(笑)画面サイズの設定について調べてみたところ、解決方法がみつかりました。
このエントリーではIE6の起動時画面サイズの設定について、その詳細をまとめます。

------------------------------------------------------------
1.IE6のウィンドウを1つだけ開く
何の画面でも良いのでリンクがあるアドレスをIEで開きます。
※他に開いているIEの画面があると設定の変更が保存されません。
開いた画面から何かリンクをクリックしてページを移動します。
※お気に入りに登録しているリンクでページ移動すると設定が保存されないため、画面中のリンクをクリックします。


2.設定をリセットする
IE6の画面と他のアプリケーションの画面を1つ以上画面に表示させた状態で、タスクバーを右クリックし、「上下に並べて表示」または「左右に並べて表示」をクリックします。
すると開いている画面が指定したレイアウトにサイズ変更されます。


3.設定したい画面サイズに合わせる
並んで表示されたIE6の画面の四隅いずれかにマウスポインタを当てて、サイズの調整を行います。
この時点で表示したい画面サイズにします。
最大化されたサイズにしたい場合は最大化するのではなく、最大化した場合と同じサイズまでウィンドウサイズを広げます。

4.画面サイズの設定を保存する
設定したい画面サイズが定まったら、Ctrlキーを押しながらIE6の画面を閉じます。

以上で画面サイズの設定が更新され、次回起動時には設定した画面サイズで画面が立ち上がります。
※設定手順は私が収集した情報と検証を元に記載していますが、うまくいかない場合があるかもしれません。
-----------------------------------------------------------------


IEももうバージョン9になろうかという時代ですが、仕事場では業務アプリケーションの都合があったりして未だにIE6を使っています。
JavaScriptの実行速度の遅さや、もはや見捨てられてしまったWebサイトの激しいレイアウト崩れなど、色々使い勝手が悪いのですが、そう簡単にバージョンアップというわけにもいかないでしょうね。
Javaのアプリがこのブラウザで動いていますが、IEのバージョン上げるとどんな影響がでるんだろう。
…ここはまだまだ勉強が足りないところです。