« 2009年11月 | トップページ | 2010年1月 »

2009年12月の6件の記事

2009年12月29日 (火)

郵便番号から住所を探すマクロ

12月28日の深夜ですが、今、年賀状を作成中です。

今年は、今まで手書きだった住所を印字しようと思って、
今更ですが住所を入力しています。

年賀状ソフトを購入せずにフリーウェアでまかなおうとしています。

いくつかのフリーウェアには、郵便番号を入力すると
自動で住所が表示される機能があるようですね。
はじめての住所録

私が今日探し当てたフリーウェアは「住所録と宛名印刷
というソフトです。

エクセルのマクロ(VBA)で作られているため、どんな
感じの使用感か興味もあって使っています。

このソフトには、郵便番号から住所を自動で入力する
機能がないので、自分で作ってみました。

エクセルのWEBクエリから自動的に取得する方法を
試したのですが、うまくいきませんでした。

「インターネットサーバーまたはプロキシサーバーが見つかりませんでした」

というエラーメッセージが出てしまい、指定したURLを
開くことができませんでした。

かつて正常に動いていたマクロも、今日動かしたら上記の
エラーメッセージが表示されてしまいました。

理由をご存じの方がいらっしゃったら、是非教えてください。

というわけで、気をとりなおして、ワードからウェブを開く
いつもの方法で住所を表示させることにしました。

多少、住所録作りが早くなります。

▼使い方

プログラムを動かすと、インプットボックスが表示されますので、
その中に、7桁の半角数字(ハイフンなし)で郵便番号を入力します。

OKボタンをクリックすると、その郵便番号に対応した住所が
表示されます。

▼プログラム

Sub 郵便番号から住所を表示()

      Dim ZipCode As Variant
      Dim URL As String
      Dim Message As String
      Dim Title As String

10    Message = "半角数字でハイフンを除いて入力してください。" & vbCr & vbCr & _
                "(例)〒123-4567 → 1234567 と入力"
20    Title = "郵便番号の入力"

30    ZipCode = InputBox(Message, Title)

40    If ZipCode <> vbNullString Then
50        URL = "http://www.benri.com/zipcode/zipcode.cgi?Keyword=" & ZipCode
60        ActiveDocument.FollowHyperlink address:=URL
70    End If

End Sub

▼プログラム解説

ウェブ上のいろんなサイトで郵便番号から住所を検索できます。

今回使ったのは、便利コム!! :「7桁郵便番号検索」というサービスです。

50行で指定しております。

Infoseekのサービスを用いた場合には、

50        URL = "http://yubin.infoseek.rakuten.co.jp/search/postalcode/?keyword=" & ZipCode

となります。

お好きな表示でお使いください。

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

2009年12月27日 (日)

エクスプローラでフォルダを開く

VBAを使って、エクスプローラを開く方法です。

所定のリンクを設定しておけば、そのフォルダを
開くことができます。

いろんなフォルダにあるファイルを使う方には、
案外便利かも。

以下の例では、スタートアップフォルダを開くように
設定しました。

10行のリンクを変更すれば、好きなフォルダを開けます。

20行のとおり、エクスプローラがCドライブにある場合の
コードです。

保存場所がCドライブ以外の場合には、パソコンの仕様に
あわせて変更する必要がありますね。

20行の定数(vbNormalFocus)は、表示するエクスプローラの
ウィンドウの状態を指定するものです。

ヘルプには、以下のように書かれています。

vbHide フォーカスを持ち、非表示にされるウィンドウ。定数 vbHide は、Macintosh では使用できません。
vbNormalFocus フォーカスを持ち、元のサイズと位置に復元されるウィンドウ
vbMinimizedFocus フォーカスを持ち、最小化表示されるウィンドウ
vbMaximizedFocus フォーカスを持ち、最大化表示されるウィンドウ
vbNormalNoFocus 最後にウィンドウを閉じたときのサイズと位置に復元されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。
vbMinimizedNoFocus 最小化表示されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。

▼プログラム

Sub エクスプローラを開く()

      Dim Link As String

10    Link = Options.DefaultFilePath(wdStartupPath)
20    Shell "C:\Windows\explorer.exe " & Link, vbNormalFocus

End Sub

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

2009年12月26日 (土)

「SEの読書術」 あなたにあったプログラミングの学習法が見つかる!

今日から冬休みが始まりました。
プログラミング三昧の日々が楽しみです。

そういえば、昨年の冬も、プログラミングばっかり
していましたね。

今年の冬も、いいアイディアがでて、より便利な
プログラムができるといいなと思います。

ちなみに、メルマガでは書きましたが、13年間
書きためてきた住所録のデータを先日消失しました。

結果、年賀状を送ることができない友人や恩師が
いらっしゃいます。

この場をお借りして、早めに謝っておきます。
年賀状を出せなくてすみません。

良いお年を。

前置きが長くなりましたが、今日は、最近読んだ
本の紹介です。

「SEの読書術」です。

最近は、「一流とされるプログラマーがどのような思考で
日々学習しているのか、もしくはプログラムを作っている
のか?」に興味があって、時々この分野の本を読みます。

その中で出会った本です。

10名のSEへのインタビューを通して、それぞれの
読書の方法やおすすめ書籍が書かれています。

見開きで2つくらいの見出し(キーワード)が書かれてて、
そのキーワードをとばし読みするだけでもちょっとした
ヒントを得られると思います。

これ、プログラマーを目指す人だけでなくて、翻訳者の
方々にもお勧めです。

プログラミングと翻訳作業って似たところがあると思うんです。

一流の人でも、新人でも、ひとまず商品が作れる、という点において。

そして、一流と新人との差を的確に説明して、その差を埋める
方法を説明できる人がなかなか現場にいない、という点において。

結局、「精神論」であったり、「長く続けることが成長の秘訣」と
いう結論に達しやすい業界じゃないでしょうか。

「センスが大切」、とか。

あ、これ、どの分野の仕事でも同じことなのかもしれないですね。

私はまだ特許技術者としても特許翻訳者としても経験が浅いので、
そのような考え方が間違っているとは言い切りません。

しかし、長く続けることだけが成長の秘訣ではない、とは
いえると思っています。

なんとなく、自分の成長に鈍化を感じたり、よりよいSEや翻訳者
としてお客さんに貢献したい、会社の業績に貢献したい、という
方にとっては、いろんなヒントがつまっていると思います。

10名のインタビューから、SEのあり方、SEとしての学習方法、
SEとしての成果の出し方など、いろんな考え方があることが
わかります。

私は、登場する柴田芳樹さんの他の著書も読んだこともあって、
柴田さんの考え方に非常に共感しました。

自分にあった考え方の師匠に出会えるかもしれませんよ。

そうしたら、日々の仕事がもっと楽しくなるかもしれないし、
確信を持って日々の学習ができるようになるかもしれませんね。

キーワード
・美術への関心
・技術書以外の書籍を読むことの大切さ
・自分流の学び方を確立していること(洋書 or 和書、入門書 or 専門書など)
・繰り返して読む、時間をかけて読む
・本の選び方
・継続することの大切さ
・新しいプログラミング言語の学習の仕方

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

2009年12月19日 (土)

【改良】Esp@cenetの特定ページへのリンク自動作成

1年以上前の2008年7月23日 (水)に公開したマクロの更新です。

テンプレートはこちらへ。

去年の11月ごろ、Espacenetの番号検索サイトの更新が行われたために
リンクがつながらなくなっていました。

具体的には、3つのリンク(書誌事項、Inpadocファミリー、PDFデータ)のうち、
書誌事項へのリンク以外が無効になっていました。

今回の更新によって、無効になっていた2つのリンクが部分的に改善されました。

Espacenetを有効活用されている方々にお使いいただきたいと思います。

▼改善点
①PDFデータの表示ページへのリンクの復旧
前回は、PDFデータのダウンロード用のパスワード入力画面を
表示しましたが、今回は、PDFデータの表示ページへのリンクにしました。

②Inpadocファミリーのリンクの一部復旧
米国特許の場合には、ファミリーのリンクが使えます。
欧州特許の場合は、リンクがつながりません。
ご確認ください。

③米国特許のコンマ入りの数値に対応
1,234,567と入力しても、US1234567と認識してリンクを作成します。
USPTOのデータベースでコピーした特許番号(コンマ入り数値)を
そのまま使えるようにしました。

④特許番号の後ろにある半角スペースを自動削除

⑤リンク作成スピード向上
rangeオブジェクトの活用
前回のプログラムの無駄なロジックを変更

▼使い方
1.インストールします。方法は、こちらをご覧ください。
  インスールが完了するとツールバーにボタンが表示されます。

Espacenet

2.半角で特許番号を入力します。(国識別記号は大文字・小文字どちらでも可)

Espacenet2

3.ボタンをクリックします。

Espacenet3

▼キーワード
myRange.Hyperlinks.Add Anchor:=myRange, Address:=link3, TextToDisplay:="PDFデータ"

上記では、
myRangeは、ActiveDocument.Rangeとして定義されています。
link3の変数にURLが格納されています。

リンクを上記のように作成することができます。

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

2009年12月12日 (土)

文頭の文字を大文字化

今日は、文頭の文字を大文字にするマクロです。
簡単な仕組みですが、けっこう重宝します。

▼以前紹介した似た機能のプログラム
以前から同じ効果がほしくて、いろいろとマクロを作成してきました。

先頭文字の大文字・小文字(選択文字列・ペースト文字列)

これには、

「選択されている文字列の最初の1文字を大文字・小文字にする」
「ペースト時に、文字列の最初の1文字を大文字・小文字にする」

の2つの機能がありました。

わかりにくかったかもしれませんが、英文を作成する場合、
文頭の1文字を大文字にする必要があります。

①When I called him last week, he was surprised.
②He was surprised when I called him last week.

上記の①の文章を②のとおり通り書き換える場合、
多くの方が、コピーとペーストを使って、文章の順序を
入れ替えると思います。

その場合、ペーストしたあとに文頭にくる文字(H)を
大文字にする必要がありますね。

また、文頭にもともとあった文字(W)を小文字に
書き直す必要があります。

この作業を自動化しようとして前回のプログラムを作りました。

▼今回のプログラム

今回のプログラムは、大文字にする作業を別の方法で実施したく
思って作成しました。

カーソル位置を移動させずに、カーソルが置かれている文章の
先頭文字を大文字にします。

このプログラムをキーボードのショートカットで実行
できるように登録すれば、便利だと思います。

マウスを用いたり、またはキーボードの矢印を使って
先頭文字を選択する必要がないので、スピードが
あがります。

▼工夫
最近のプログラムで多用していますが、Rangeオブジェクトで
操作しています。

こうすることで、現在のカーソル位置を動かすことなく、
プログラムを実行することができます。

▼プログラムSub 文頭を大文字化()

      Dim myRange As Range

      'myRangeを設定
10    Set myRange = Selection.Range

      'カーソルが置かれている文章を選択
20    myRange.Expand Unit:=wdSentence

      'カーソルを選択された文章の先頭に移動
30    myRange.Collapse direction:=wdCollapseStart

      '文頭の1文字を選択(後ろのカーソル位置を一文字ずらす)
40    myRange.End = myRange.End + 1

      '選択された文字を大文字に変換
50    myRange.Font.AllCaps = True

      'myRangeの設定を解除
60    Set myRange = Nothing

End Sub

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

2009年12月 5日 (土)

ユーザーフォームのテキストボックス内で改行文字列を取り出す(その4)最終回

ようやく、最終回です。ユーザーフォームのテンプレートを用意しました。

Get_data

「get_data.dot」をダウンロード

こちらの記事のコメントでkonnoさんから教えていただいた「Replace関数」を用いました。

おかげさまで、Split関数を用いないためエラー処理が簡易になり、
結果として短いプログラムになりました。

英文を書くときの「ワンセンテンス・ワンミーニング」のルールを意識して、
1つの行に、ひとつの機能を書いてみました。

プログラムの作成経緯は、下記をご覧ください。

ユーザーフォームのテキストボックス内で改行文字列を取り出す(その1)
ユーザーフォームのテキストボックス内で改行文字列を取り出す(その2)
ユーザーフォームのテキストボックス内で改行文字列を取り出す(その3)
●ユーザーフォームのテキストボックス内で改行文字列を取り出す(その4)

▼使い方
1.インストールします。こちらをご覧ください。
2.ツールバーに表示された[ユーザーフォーム表示]ボタンをクリックします。
3.表示されたユーザーフォームに文字をいれたり保存したりして
  機能を試してみてください。

▼留意点
前回までのプログラムと違い、「みんなのワードマクロ_get_data.ini」という
ファイル名のini.ファイルにデータを保存することにしました。

よって、前回のプログラムで保存した文字列を呼び出すことはできません。

前回のプログラムで用いた「ファイル名.ini」というini.ファイルが不要になります。

ini.ファイルはWindowsフォルダに入っていますので、気になる方は、お手数ですが
ご自身で削除ください。

削除しなくても、基本的なパソコンの使用において悪影響はありません。
ごみファイルとして、たまっているというかんじです。

▼プログラムの解説

①(保存用)
プログラムを短く書くことができます。

      'テキストボックスの文字列の改行記号(vbCrLf)を★●★に置換する
20    myTextData = Replace(TextBox1.Value, vbCrLf, "★●★")

      '保存用文字列を.iniファイルに保存
30    System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1) = myTextData

とありますが、

'テキストボックスの文字列の改行記号(vbCrLf)を★●★に置換して、.iniファイルに保存
20    System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1) = Replace(TextBox1.Value, vbCrLf, "★●★")

こう書けば、1行になります。

②(データ取得用)
80行の「MsgBox Err.Description」は、エラーの内容を表示してくれるので
便利です。

エラーが発生すると通常は、エラー番号(Err)が表示されますが(例えば、13など)、
これでは何が起こったのかよくわかりません。

なので、エラーの内容を示すErr.Descriptionは便利だと思います。

今回のプログラムでは、特にエラーは想定しておりませんが、
新しく覚えた技なので、自分用のメモとして書いてみました。

③(ユーザーフォームの初期化)
ユーザーフォームを使うときには、この書き方をまねしています。

20行~30行
ユーザーフォームの表示位置の取得

90行~120行
テキストボックスの設定(改行表示) こちらで説明したものです。

130行
カーソルのフォーカスを移動

160行
はじめてこのマクロを起動したときのエラー処理です。

最初は、「みんなのワードマクロ_get_data.ini」のファイルがないため、
20行でこの実在しない.iniファイルから値を取得しようとするので
エラーが発生します。

その場合には、エラー番号13となるため、このエラー番号31が出たら
JNの場所に制御を移動させるような記述になっています。

▼プログラム①(保存用)

Sub StoreTextData()

      '保存用のプログラム

      Dim myTextData As String '保存用文字列

10    On Error GoTo StoreData_Error

      'テキストボックスの文字列の改行記号(vbCrLf)を★●★に置換する
20    myTextData = Replace(TextBox1.Value, vbCrLf, "★●★")

      '保存用文字列を.iniファイルに保存
30    System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1) = myTextData
               
40       On Error GoTo 0
50       Exit Sub

StoreData_Error:
         
60        MsgBox Err.Description

End Sub

▼プログラム②(データ取得用)

Private Sub CommandButton2_Click()
       
      '「取得」ボタン

      Dim myIniData As String  '.iniファイルから取得した文字列
      Dim myTextData As String 'テキストボックスに入力する文字列

10    On Error GoTo Errorhandler

      '「みんなのワードマクロ_get_data.ini」から保存済みの文字列を取得(→myIniData)
20    myIniData = System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1)
               
      'myIniDataの★●★を改行記号(vbCrLf)に置換(→myTextData)
30    myTextData = Replace(myIniData, "★●★", vbCrLf)

      'TextBox1に、置換後の文字列(myTextData)を入力
40    TextBox1.Value = myTextData

      'フォーカスをテキストボックスに移動
50    TextBox1.SetFocus

60       On Error GoTo 0
70       Exit Sub

Errorhandler:
         
80        MsgBox Err.Description
         
End Sub

▼プログラム③(ユーザーフォームの初期化)

Private Sub UserForm_Initialize()

      Dim ufLEFT As Single
      Dim ufTOP As Single

10    On Error GoTo UserForm_Initialize_Error
         
20    ufLEFT = System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
                   "form_position", "left")

30    ufTOP = System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "form_position", "top")

40    With UserForm1
50        .StartUpPosition = 0
60        .Left = ufLEFT
70        .Top = ufTOP
80    End With

JN:

      'テキストボックスの設定(改行表示)
90    With TextBox1
100       .MultiLine = True
110       .EnterKeyBehavior = True
120   End With

      'カーソル(フォーカス)をテキストボックスへ移動
130   TextBox1.SetFocus

140   On Error GoTo 0

150     Exit Sub

UserForm_Initialize_Error:
       
          '20行で値を取得できなかった場合のエラー処理

160       If Err = 13 Then
170           GoTo JN
180       Else
190           MsgBox Err.Description
200       End If

End Sub

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

« 2009年11月 | トップページ | 2010年1月 »