1つだけ過去を変えられるとしたら?

7/26に下記の質問をしまして、Wendy02さんからURLを教えてもらい、一時は解決したのですが、
すみません、特定のセル1ケ所に入力し、それを特定のセル同じく1ケ所に表示するにはどのようにするとよいのでしょうか?
VBAを作ってみましたが、上手く動きません。。。(>_<)
どこかが間違っているのだと思うのですが・・・・・・
よろしくお願いします。

⇒エクセルで、例えばA1に123456と入力したら、B1に
それに対応する住所が表示されるようにしたい。。

Excel アドイン: 郵便番号変換ウィザードがあるのは知っていますが、
これを利用しないで、IMEの郵便番号変換機能を利用して、関数で、あるいはVBAで表示できるようにしたいのですが、可能でしょうか??
(IMEのプロパティの辞書/学習は「郵便番号辞書」にチェックはついています。為念)

★回答⇒Wendy02さんから↓↓↓
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=3191662


<作ってみたVBA>

Private Sub Worksheet_Change(ByVal Target As Range)
'IMEは、MS-IME に限る

Application.ScreenUpdating = False
With Range("B7") '入力規則
.Delete
.IMEMode = xlIMEModeHiragana 'IME立ち上げ
End With
Application.EnableEvents = False
Range("D7").Select
SendKeys Target.Value '番号を入れる
SendKeys "{ }" 'スペース変換
SendKeys "{ENTER}"
SendKeys "{LEFT}"
SendKeys "{DOWN}"
settei:
Application.ScreenUpdating = True
End Sub​

A 回答 (3件)

こんにちは。

Wendy02です。

まず、郵便番号変換ユーティリティの周辺の事情を、他の方にも読める形で書いておきます。

>Excel アドイン: 郵便番号変換ウィザードがあるのは知っていますが、
>これを利用しないで、IMEの郵便番号変換機能を利用して、関数で、あるいはVBAで表示できるようにしたいのですが、可能でしょうか??

アドイン自体よりも、この郵便変換ウィザードの郵便変換エンジン(MSYubin7.DLL)は生きているのですが、再利用されることをメーカー側が嫌って、4~5年前に、アドイン・プログラムにプロテクトをしてしまいました。ですから、それ以前の製品は、関数で変換が可能です。何名かの雑誌などでも名の知れた人たちが、MSにクレームをつけましたが、結局、変わりませんでした。

他人に渡したらライセンス違反になりますが、もし、古いパソコンなどに残っていたら、そのエンジンは使えるのではないかと思います。ただ、API関数から、関数を作りますから、かなり詳しい人でないと、設定は難しいです。

この製作会社は、「アドバンスソフトウェア株式会社」というところで、製品版としては関数変換は使えます。ただし、3万円以上もするものです。

製品名
Yubin7
http://www.adv.co.jp/products/product_Yubin7.htm

他にも、Vector で、いくつか出ていたと思いますが、私個人としては、Office で個人で出しているものは、以前試したときは、PCのスペックが低かったので、とても、Yubin7 の変換スピードに追いつくものはありませんでした。データベースで再編成した辞書を利用して、VBAから、ADOやDAOで使うというのが、最も、実行可能な関数だと思います。今は分かりませんが、ADO等で使用可能な郵便番号辞書を、郵便番号辞書を出している人がいたような気がします。

他にも、Access 2000 のACWZZIP.MDE を再利用する方法などもありましたが、これも、上位バージョンではユーザーの再利用は適わなくなってしまいました。

私を含めた大勢の人たちが、このユーティリティについては考えてきたわけですが、どうも、メーカー側では、ユーザーの利便性より利益を優先させてしまったわけです。もしかしたら、Moug のダウンロード・ユーティリティで出ているのかもしれませんが、私は分かりません。

Office のアドインのオリジナルメーカー数社をみていると、不都合さを解消した製品を出してはいても、MS-Office の値段に匹敵するものしかないという、不条理としかいえない製品を、エンド・ユーザーに提供するだけになってしまっています。

私自身も、現在のところ、開発力が伴わないので、Office VBA周辺でしかいじることが出来ないから、こんな結果になっています。こんなものしか提供できない、何か、とても悔しい気持ちです。

本来は、アドバンス社は、中身自体を変えているわけではありませんから、単に、昔のようにユーザーに解放してくれるだけでよいのですが。

マクロについてですが、ご期待に沿えるものとはいえませんが、以下のように直してみまそた。

入力側は、A1, 変換側は、CONST SEL... B1
となっています。

シートモジュール
-------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)
'設定場所
Const SEL As String = "B1"

'MS-IMEの辞書は、郵便番号辞書にチェック
 If Target.Address <> "$A$1" Then Exit Sub 'A1でなかったら、取りやめ
 If Target.Rows.Count > 1 Then Exit Sub
 If Len(Target.Value) <> 8 Then Exit Sub
 If InStr(Target.Value, "-") = 0 Then Exit Sub
   Application.ScreenUpdating = False
 With Range(SEL).Validation '入力規則
   .Delete
   .Add Type:=xlValidateInputOnly
   .IMEMode = xlIMEModeHiragana 'IME立ち上げ
  End With
    Application.EnableEvents = False
    Range(SEL).Select
    Application.EnableEvents = True
    SendKeys Target.Value '番号を入れる
    SendKeys "{ }" '変換
    SendKeys "{ENTER}"
settei:
 Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

お盆で帰省していましてご返事が遅くなりました事をお詫び申し上げます。<m(__)m>
Wendy02,たびたびのご回答大変ありがとうございます。
A1セルに入力⇒B1に応答されました。。。。
もしB5に入力⇒D5に応答なら、VBAのそれぞれのセルの部分を編集すればよろしいのですよネ~

私はまだVBAをかじったばかりで、まだ満足のいく形になっていませんですが、仕事上色々要望がありまして、その都度困った事が時々発生しております。
今回のはセルが固定している場合でして、前回ご回答いただいておりながら編集してみますと思うように動かなくて困っていました。。
大変助かりました。ありがとうございます。
シッカリ役立たせていただきます。

 

お礼日時:2007/08/14 20:24

何度も回答者を煩わせているのは


(1)質問者のニーズが、現状システムからは特殊
(2)結果をだす、処理単位の明確な意識と
   質問文章にその説明が無いこと
にあると思います。
(2)は
X.オフラインバッチ的な処理
Y.瞬時反応的な処理
どちらを選ぶ場合なのか。
前質問まではXの路線だったが、今回は、実はY路線だったといっている。
それに
Z.新たに作る
U.既存の操作をキー・シュミレートする
V.出来合いのソフトやルーチンを入手する
のu.のタイプが加わっている。
Uはあくまで例外的な処理で、IME漢字変換も、関連APIを勉強すれば、処理できそう(私は詳しくない)なので、できればそちらに向かうべきでは。Uは袋小路の凌ぎです。
そして、その都度回答者のお世話にならないといけなくなっている
ーー
A
(1)は郵便番号を入れるセル(列は一定)にとりあえず全部入れて
、一度に住所を割り出し全セルにセットする。
こういうのをオフラインバッチ処理という。
B
1つのセルに郵便番号数字を入れて、変換キーを押して、住所漢字変換
の機能があるのでそれを使う。
これは個別操作による普通の処理。プログラムでの自動処理や関数(次記)のように前もって入れておいて、結果が返るものではない。
C
関数によって実現。
エクセルではそういう関数は無い以上、自分で作るしかない。
しかし通便番号ファイルの構造の知識と、そこから検索するプログラムを作る知識がないといけない。また一般的には使われるかどうか判らない、10数万件の郵便番号ー住所辞書を読み込んでおいて、データベース検索システムに待機させるのは、リソース的に不経済である。
(今回の質問のニーズでは、関数では)さらに入力したとき即時実行されるというイベントの処理が必要。
質問の実現には、役立たないが、上記のことはあらゆる課題を考える上でいつも明確に意識し、ある程度は妥協(グレードダウン)した途で我慢すべきなのだと思う。
    • good
    • 0

もとのオリジナルのコードに一旦戻って、



Target.Column <> 1

Target.Address <> "$B$7"
に変更し、

2箇所の
Target.Offset(0, 1)

Range("D7")
に変更し、

最後に
SendKeys "{LEFT}"
SendKeys "{DOWN}"
を取り除く。


これで試してみてください。
B7に入力し、D7に出力する場合です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!