« 2008年9月 | トップページ | 2008年11月 »

2008年10月の7件の記事

2008年10月25日 (土)

テキスト貼り付け(右クリックとボタン)

メニューの編集>形式を選択して貼り付け>テキスト を選択した場合の処理を自動化します。ボタンと右クリックの両方が使えます。「textpaste.dot」をダウンロード

●使い方
ボタンは「T」とかかれたものです。右クリックすると、画像のように「テキスト貼付」のメニューが現れます。

●用途
ネットで探した文章をワードファイルにテキスト形式で貼り付ける(文字情報である色、フォント、下線、ボールドなどを消して、文字だけを貼り付けることが出来ます。)

●工夫
テーブル(表)と通常のテキストとのどちらにカーソルがある場合でも、右クリックしてメニューが表示されるようになっています。

| | コメント (0) | トラックバック (0)

Absolute Beginner's Guide to VBA

マクロ関連の書籍の紹介です。

日本語で書かれたワードマクロに関する書籍は、私が知る限り2冊だけ。あとは、水野麻子さんの「自分で作るWordマクロ」です。資料の詳細はこちら

マクロの例文がほしくて、洋書を探しました。米国アマゾンで調べて、書評を読みながら、自分にあった本をあたりをつけて、日本アマゾンで購入しています。

今日は、その中でも比較的読みやすい1冊を紹介します。

●Absolute Beginner's Guide to VBA

この本は、マイクロソフトオフィスで使われてるVBA(Visual Basic for Application)の全般の解説書であり、ワードマクロに特化した内容ではありません。しかし、読んでみて、あとエクセルマクロも勉強してみてわかりましたが、VBAのプログラムは、ワード、エクセルともに同じ考え方なので、このようなVBA全体の説明書であってもワードマクロに十分に活用することが出来ます。

本書の特徴は、対象とする読者を「かつてプログラミングしたことがない人」と想定している点です。あと、語り口調が柔らかいので、英文としてすごく読みやすいです。

私は、本書を辞書代わりに使っているので、関連項目しか読んでいませんが、自分が知りたいことのヒントはかなりつまっています。索引とVBA Statements(VBAで使われる機能、プロパティ、オブジェクトなど)の一覧表が付録でついており、なかなか充実しています。これを用いて、自分が調べたい内容を特定しています。

プログラム例は、比較的短くて、実際に実務レベルで直接、役に立つものは載っていません。たとえば、「Wordで実践」は、長いプログラムと実務レベルですぐに役立つプログラム満載ですね。Absolute Beginner's Guideには、たとえば、ファイルを開くとか、書式を変えるとか基本的なものが例示されています。そのかわり、これらの短いプログラムの解説が詳細に記載されているため、私のような初心者でも比較的安心して読むことができます。

あと、うれしいのは、使われている写真がWinXPとオフィス2003という点です。私はWinXPとWord2003を使っているので、自然になじめます。最近の書籍によっては、WinVistaとオフィス2007という組み合わせも多くなってきているので、自分の環境とできるだけ同じ解説書のほうがわかりやすいと思います。

ついでに英語の勉強にもなるので、翻訳者の方にはおいしい本だと思います。読んでいくうちに、VBAで使われるstatementの略記号の意味がわかったりします。たとえば、vbCrという改行の記号がありますが、visual basic carriage return の略だとわかってからは、bvCrと間違えて書くこともなくなり、記憶に残りやすくなりました。

| | コメント (2) | トラックバック (0)

2008年10月19日 (日)

日付を英語表記にする(前回のさらにつづき)

しつこく、日付を英語に表記する方法について検討します。前回のつづきです。

前回のブログで、「ワードも、エクセルも、VBAが難しいといわれるゆえんは、コマンドを知らない場合(ヘルプや本で調べきれない場合)、遠回りをして結果にたどり着いてしまうかもしれないということです。」と書きました。

では、どうやって、知らないコマンドを調べたらいいのか?が今日のテーマです。

自分でも出来ていないところもあるので、ヒントだと思ってください。やり方はいろいろですが、基本的な考え方は、「わからなかったら、マクロの自動記録で確認する」です。

この考えは、「自分で作るWordマクロ」の根底の考え方と同じです。詳細は省きます。

本題に戻って、「日付」の入力方法を探します。探し方は、「①を見る」と「②ワードのヘルプ機能を使う」などありますが、今回は、「②ワードのヘルプ機能を使う」方法で説明します。

ワードのヘルプ機能を使うには、ワード起動中にキーボードの「F1」キーを押すか、メニューのヘルプ(H)のMicrosoft Office Word ヘルプを選択します。そうすると、画面の右側にキーワード検索できる窓が現れます。

ここで気になる項目をクリックすると、その詳細があわられます。たとえば、「日付/時刻表示形式スイッチ」や、「現在の日付と時刻を入力する」などが気になります。

クリックして内容が確認できますから、絞り込む前に、いくつか読んでみて下さい。

自分が探した順番で行くと、「現在の日付と時刻を入力する」を参考にして、ワードの基本機能である、[挿入] メニューの [日付と時刻] という項目にたどり着きました。

Dateinsert1

(1)日付と時刻:

右側のタブで「言語の選択」を「英語(米国)」にすると、次のような画面になります。

Dateinsert2

(2)日付と時刻:

ここまでくると、あとは、マクロの自動記録をするだけです。記録方法は、「自分で作るWordマクロ(1)」のP.5もしくは、「Wordで実践」のP274 をご参照ください。

記録するとわかりますが、下記のようなコードがでてきます。

●10/19/2008の場合

    Selection.InsertDateTime DateTimeFormat:="M/d/yyyy", InsertAsField:=False, _
         DateLanguage:=wdEnglishUS, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False

●October 19, 2008の場合

    Selection.InsertDateTime DateTimeFormat:="MMMM d, yyyy", InsertAsField:= _
        False, DateLanguage:=wdEnglishUS, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False

マクロの記録を実行して、上記の(2)日付と時刻の英語(米国)表記の全てを順番に入力していくと、表記の対応と、マクロに自動記録されるコードの違いがわかります。

英語を勉強している方なら、このマクロの記録内容(DateLanguage:=wdEnglishUSやCalendarType:=wdCalendarWestern)が、「日付と時刻」ウィンドのそれぞれの設定項目、チェックマーク項目に対応していることに気がつくと思います。

端折って、英語の入力形式の話にもどすと、結局、こんなことがわかりました。

DateTimeFormat:="MMMM d, yyyy" October 19, 2008

DateTimeFormat:="dddd, MMMM dd, yyyy" Sunday, October 19, 2008

DateTimeFormat:="M/d/yyyy" 10/19/2008

DateTimeFormat:="M/d/yy" 10/19/08

DateTimeFormat:="yyyy-MM-dd" 2008-10-19

DateTimeFormat:="d-MMM-yy" 19-Oct-08

ここまでくると、「M、MM、MMM、MMMMはそれぞれ何を意味しているのでしょうか?」というクイズみたいなものです。クイズの答えは、先ほど紹介した「日付/時刻表示形式スイッチ」に記載されています。書籍では、「Excel VBAできる大辞典」に載っています。

僕は、こういうことの繰り返しをしながら、ちょっと時間がかかっていますが、コマンドを覚えています。

勘がさえていると、Visual Basic Editorのヘルプ(F1キーで起動)でほしいコマンドやプログラム文が見つかるのですが、今回の英語日付入力への変換についてはけっこう時間がかかってしまいました。

| | コメント (1) | トラックバック (0)

2008年10月12日 (日)

日付を英語表記にする(前回のつづき)

先日、「日付を英語表記にする」という記事を書きました。その中で、半角数字で記入した日付を、英語の日付に直す方法を無理やり編み出して記載しました。

今日は、そのプログラムの修正です。

英語の表示形式は、書きプログラム中に"mmmm d, yyyy"と記載したように、前回の力わざと比べると簡単に変換することができます。

前回に調べたときには、「できる大辞典 Excel VBA」を参考にして考えました。この本の索引で、「日付」の項目に、いくつかページがのっており、P305, P808, P884を参考にしました。

具体的には、
月の名前の英語表記 Format("2003/4/1, "mmmm") → April
日付一桁表記      Format("2003/4/1, "d") → 1
西暦年を4桁表記       Format("2003/4/1, "yyyy") → 2003
という具合です。

これを使ったので、前回のプログラムは多少長いけれど結果が出せたわけ。

今回は、全てを一括して Format("2003/4/1, "mmmm d, yyyy") → April 1, 2003
と表記することを覚えました。

ワードも、エクセルも、VBAが難しいといわれるゆえんは、コマンドを知らない場合(ヘルプや本で調べきれない場合)、遠回りをして結果にたどり着いてしまうかもしれないということです。

今回のような小さな遠回りであればどうでもいいのですが、もう少し上級のコマンドであると、そのコマンドを知らないがために、やたら多くの条件設定を自分ですることになったりすると思います。

たとえば、split関数はすごく便利でたまに使いますが、この関数があることを知らなかったら、相当複雑なプログラムを組むことになってしまうなと怖くなります。(split関数については、「ワードで実践」のP101を参照ください。)

今回の表現については、後日インターネットで参考のために英語表現への変換マクロを調べていたら、別のコマンドで"mmmm d, yyyy"の表現を使っているものに出会ったので、それを参考にしてみたらうまくいったというわけ。

本だけの調べで満足していましたが、案外、インターネットにいろんな有益な情報が転がっていますね。

●プログラム
前回のものと多少違います。今回のプログラムでは、カーソル位置に日付をテキスト入力します。

英文のレターで、現地代理人のレター送付日、特許庁の指令発行日など日付を書くことが多い方、ちょっと便利かも。

Sub 英語日付()

Dim dateEnglish As String
Dim dateShort As String

dateShort = InputBox("日付を2008/10/5の形式で入力してください。", title:="英語表記への変換")

If dateShort <> "" Then
    dateEnglish = Format(dateShort, "mmmm d, yyyy")
    Selection.TypeText Text:=dateEnglish
Else
    End
End If

End Sub

| | コメント (0) | トラックバック (0)

2008年10月10日 (金)

誰かのためにマクロプログラムを作ること

最近、マクロ作りを依頼されることが多くなってきました。

誰かのためにマクロを作ることは、思った以上に難しい点があって、いい勉強になりました。

何が難しいのかというと、自分が作ったマクロを自分で使う場合には、マクロを使う上での「暗黙の了解」を自分では理解しています。

たとえば、「このマクロを実行するとき、カーソルが文字列を選択していてはいけない」とか「このマクロは日本語を検索するためのものなので、英文ファイルを閉じて、必ず日本語ファイルを開いていなければならない」とか。

これが他の人が使うことを想定すると、案外フェールセーフを意識しなければならなくなるので大変になります。

特に、所定の記載を変換したり削除するマクロの場合は、大変神経を使います。

あまりにも他の人の誤動作を意識しすぎると、無駄な条件設定が増えてきて複雑になりすぎます。このあたりのバランスが必要だと思います。

実際に、他の人に使ってもらうことを意識して、このブログにマクロを掲載しはじめてからは、自分のマクロの作るときの視点が洗練されてきているようにも思えるので、いいことだと思います。

上記のようなちょっとマゾ的な喜び以外に、具体的にすごくうれしいことがあります。

それは、
  ①いいマクロを作れば喜んでもらえる
  ②他の人の発想に触れることが出来る
  ③自分の発想の限界を超えられる
につきます。

①については、そのまんまです。自分のちょっとした知識が他の人に役立つことを直接実感できるという意味で、マクロ作りはやめられませんね。

大人になると、あんまりほめてもらえる機会もないし、こういうところで喜んでもらったりするのは自分の心の栄養になります。(別に栄養不足というわけではありませんが)

②については、他の人の仕事上の思考プロセスに触れることが出来るのでうれしいです。こんなことは普段めぐり合えない機会ですね。

たとえば、翻訳作業はかなり属人的なスキルを使うと思います。その翻訳を支援するマクロを作るということは、その思考や作業をマクロという見える形にするということです。

よって、誰かがマクロ作りを依頼してきた場合、その人の考え方をそのまま吸収できるというわけです。逆に、正確に依頼者の思考を理解しないと、希望通りのものができませんね。

で、ここでいただいた思考パターンも出来上がったマクロも僕が使えるわけですから、なかなか都合のいい「学びの仕組み」ができあがってるわけです。

③ですが、②にちょっと近いです。依頼する方々は、案外気楽にすごい要求(悪い意味ではなくて、僕の実力を超えている要求という意味)をしてきたりしますから、自分の発想の限界を軽くこえることができます。

たとえば、「『2008/10/4』としてテンキーで入力するけど、『2008年10月4日』と所定の表に記入にしてほしい」とか、「ネットから自動で情報がとれたらいいんだけど。。。。」とか、自分でも考えたことがない贅沢(?)な要求をいくつもいただいております。

こういう機能は、自分では発想しないです。そもそもできるかどうかわからないので、自分で発想のブレーキをしてしまっているような状態だと思っています。

依頼を受けるまでは、エクセルがネットに接続できるなんて夢にも思っていませんでした。

だから、上記のような(初心者の僕にとっては)無茶な課題を設定してくれる仲間のおかげで、自分の成長の幅が大きくなっていると思います。

こうやっていただいた要求から学んだことは、自分のマクロの作成に必ず生かせますから、無駄はありません。

あと、秘密ですが、そういう無茶な課題を出してくれる仲間には、60点くらいの出来のマクロを仮納品して、バグ探しを意図的に手伝ってもらったりしています。

| | コメント (0) | トラックバック (0)

2008年10月 5日 (日)

日付を英語表記にする

簡易に入力した日付(2008/10/5の形式)を英語の表記(October 5, 2008)に変換する処理です。

Dateenglish Dateenglish1 他にもやり方があるのかもしれませんが。。。

FormatDateTime(checkdue, vbLongDate)の関数を使って変換する方法は、以前紹介しました。vbLongDateを指定すると、「地域と言語のオプションのカスタマイズ」の「日付タブ」で「長い形式」に指定された表示形式になります。

しかし、「地域と言語のオプションのカスタマイズ」のデフォルトでは日本語表記になっているので、「2008年10月5日」という表記になってしまい、英語表記になりません。

英語表記にするには、「地域と言語のオプションのカスタマイズ」で、英語表記を設定しなおす必要があり、手間がかかります。

下記のマクロでは、ちょっと力技になりますが、英語の表現に変換してくれます。

●プログラム●

Sub 日付の英語表記()

Dim dateEnglish As String
Dim dateShort As String

dateShort = InputBox("今日の日付を入力して下さい。 " & vbCr & _
                "(2008/10/5の形式で入力)", title:="英語表記への変換")

If dateShort <> "" Then
    dateEnglish = Format(dateShort, "mmmm") & " " & _
                    Format(dateShort, "d") & ", " & _
                    Format(dateShort, "yyyy")
   
    msgbox "今日は" & vbCr & dateEnglish & vbCr & "です。"
   
Else
    End
End If

| | コメント (0) | トラックバック (0)

エクセルマクロからワードマクロを学ぶ

最近、エクセルマクロ作りをしています。

仕事の同僚から作成を依頼されたため、見よう見まねで作ってみたのが1ヶ月前。

今では、ネットから情報を取得して一覧表にまとめたり、所定フォルダ中のテキストファイルの特定項目を集計して、エクセル上の表にまとめたりすることもできるようになりました。

ワードマクロを学んできたので、エクセルマクロはある意味簡単でした。

どう簡単か?というと、まずワードマクロで学んだ知識がベースになるし、そもそも参考書が山のようにあって、インターネット上にもいろんな方が情報を提供してくれているのです。

たとえば、書籍。アマゾンで「エクセル マクロ」のキーワードで検索すると100冊以上検索できます。

インターネット上のサイトでは、質問掲示板が多数あって、その回答も用意されています。僕がほしいような初歩的な質問は、すでに誰かがしているので、案外答えのヒントが探せたりします。

今回、エクセルマクロを学ぶ上で意識したのは以下の2点です。

①情報を入手するのにお金を惜しまない。
②わからない場合は自分で考えずに、調べる。

①については、大手書店をいくつかまわって、自分が必要としているマクロ本を複数冊買いました。お金で時間が買えるという意味では、関連書籍の購入は最善策だと思います。

買った種類は、(1)辞書がわりになる解説書と(2)プログラム事例集と(3)コードサンプル集です。これは、ワードマクロを習ったときに必要だと思ったので、意図的に3種類そろえました。

(1)は、エクセルマクロの基本やコマンドが細かくかかれていて自分が読みやすいと思うものを選びました。これは、(2)や(3)のプログラムを読解するときに使います。

(2)は、自分がつくりたいと思うプログラムに近いものが載っているものを選びました。プログラムの目的(たとえば、「ネット上の●●情報を取得してグラフ化する」など)とプログラムの作用がわかりやすく書かれているものが自分にはあっている気がします。

(3)は、1つの作業のサンプルプログラム書かれているものを選びました。自分の目的に合わせて、サンプルを応用するためです。たとえば、「フォルダ中のファイル名を求める」とか、「最前列のワークシートを取得する」とか、大きな作業を達成するための1ステップづつのサンプルプログラムです。

エクセルのマクロの本は、読みやすさや内容の充実度合いが、ワードマクロの本と段違いですね。すごくわかりやすいし、紹介されているプログラムも実践的ですぐに使えるものが多いです。これは驚きでした。

②ですが、つねに、自分の記憶に頼らずに必ず、購入した本、VBAのヘルプ機能、またはインターネットで調べることを意識しました。

これも時間短縮のために実行していたのですが、効率的に学び、結果をすぐに出すといういい訓練です。

うれしいのは、エクセルで使われるコマンドやプログラムの考え方を、そのままワードで使える場合があるということです。エクセルマクロの解説書はわかりやすいので、こちらで学んだものをワードマクロに応用すると広がりますね。

参考までに、(1)~(3)までの購入した4冊を紹介します。

(1)辞書がわりになる解説書

これはおすすめです。コマンドの説明と対応したプログラムが記載されています。プログラムの解説も、行単位でプログラムとその働きが対応して書かれており、読みやすいです。言語の勉強にはやっぱり対訳本が必要ですね。いちいち辞書を調べなくても原文を読める、みたいな。記載されている簡易なプログラム文の全てに対訳が載っているという点で優れていると思います。

プログラムのダウンロードサービスはないようです。

(2)プログラム事例集

プログラムのダウンロードサービスつき。ネットから情報を取得する方法が非常に詳しく書かれており、大変参考になりました。このプログラムを入手できただけで、この本を購入した価値があると思えるほどです。

写真や文章の掲載方法が優れており、読みやすいです。使われている写真がExcel2007である点が残念。私はExcel2000を使っているので、対応していない機能や表示があります。

プログラムを作るコツなどが書かれているので、プログラマーの思考が学べるのでそういう意味でもためになります。

プログラムのダウンロードサービスが機能しません。出版社が倒産したため、サイトに不具合があるみたいです。

記載されているプログラムや解説は非常にいいです。解説文がごちゃごちゃと書かれているように思えますが、それも情報量が多いので許せます。

また、実用性の高いプログラムが多いと思います。用途がイメージできる文、書かれているプログラムの読解意欲も刺激されます。そういう点からも優れた本だと思います。

(3)コードサンプル集

これは強力なツールです。サンプルのプログラムがCDで同封されています。プログラムも探しやすくなっています。

「監修者の言葉」にあるのですが、「渡辺氏のつむぐコードの美しさにも触れておきたい。無駄がない、わかりやすい、メンテナンス効率に優れている。この3要素を満たしたコードは「芸術」と呼んでもいいだろう。」にひかれて購入。

実際にプログラマの思考を学ぶにはもってこいだと思います。「何かが入力されている最終セルを取得する(単一行対象)」ためのコードがP14から3種類載っています。つまり、複数のアプローチが学べるというものです。

そして、それぞれのプログラムの意味を理解したときに少し感動があります。上記を実行するためにいくつかステップを踏むのですが、「プログラマーはこういう考え方をするのか?」という視点が養えます。それが楽しいですね。

やっぱり、いい英語をたくさん読むのも大切。いいプログラムをたくさん読むのも大切。そう思います。

| | コメント (0) | トラックバック (0)

« 2008年9月 | トップページ | 2008年11月 »