Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10392 / 13646 ツリー ←次へ | 前へ→

【22055】住所検索関数の作成 okb 05/2/7(月) 23:03 質問[未読]
【22060】Re:住所検索関数の作成 りすりす 05/2/8(火) 1:45 回答[未読]
【22062】Re:住所検索関数の作成 ichinose 05/2/8(火) 8:32 発言[未読]
【22087】改めて質問します okb 05/2/8(火) 16:06 質問[未読]
【22113】Re:改めて質問します りすりす 05/2/9(水) 2:26 回答[未読]
【22120】Re:改めて質問します okb 05/2/9(水) 11:31 お礼[未読]

【22055】住所検索関数の作成
質問  okb  - 05/2/7(月) 23:03 -

引用なし
パスワード
   下記サンプルで、セルD10に入力した郵便番号で、マクロを実行すればD12に住所が、表示されますが、これを任意のセルに自動表示できるように、ワーシート
関数を作成するのは無理なんしょうか?
いろいろ試してみたのですが、うまくいきません。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 セルD12に、入力規則で日本語入力タブ→IMEの設定を「ひらがな」に変更。

>Sub 住所検索()
>  Range("D12").Activate
  SendKeys Range("D10") & Space(1)
>End Sub

【22060】Re:住所検索関数の作成
回答  りすりす  - 05/2/8(火) 1:45 -

引用なし
パスワード
   ▼okb さん:
>下記サンプルで、セルD10に入力した郵便番号で、マクロを実行すればD12に住所が、表示されますが、これを任意のセルに自動表示できるように、ワーシート
>関数を作成するのは無理なんしょうか?
>いろいろ試してみたのですが、うまくいきません。
>
>ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
> セルD12に、入力規則で日本語入力タブ→IMEの設定を「ひらがな」に変更。
>
>>Sub 住所検索()
>>  Range("D12").Activate
>  SendKeys Range("D10") & Space(1)
>>End Sub


Public Declare Sub keybd_event Lib "user32.dll" _
  (ByVal bVirtualKey As Byte, ByVal bScanCode As Byte, _
   ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Public Declare Function MapVirtualKey Lib "user32" _
  Alias "MapVirtualKeyA" (ByVal wCode As Long, _
  ByVal wMapType As Long) As Long

Const VK_DBE_HIRAGANA = &HF2
Const KEYEVENTF_EXTENDEDKEY = &H1
Const VK_KANJI = &H19
Const KEYEVENTF_KEYUP = &H2

Sub Macro1()
' 漢字自動変換マクロ
 Selection.Cells.Activate
 If (IMEStatus = vbIMEModeOff) Then
  Call keybd_event(VK_KANJI, 0, 0, 0)
  Call keybd_event(VK_KANJI, 0, KEYEVENTF_KEYUP, 0)
  '  Call keybd_event(VK_KANJI, MapVirtualKey(VK_KANJI, 0), 0, 0)
  ' IMEを待ってあげる
  DoEvents
 End If
 Selection.Cells.Activate
 Call SendKeys(Selection.Cells & Space(1), True)
 Call SendKeys("{ENTER}", True)
End Sub

【22062】Re:住所検索関数の作成
発言  ichinose  - 05/2/8(火) 8:32 -

引用なし
パスワード
   りすりす さん、okb さん、おはようございます。

郵便番号の検索なら、

http://www.post.japanpost.jp/zipcode/dl/kogaki.html

からデータベースをダウンロードしてCsvファイルをmdbファイルに
インポートした後、
このデータベースに対して検索をするような処理にするのは
いかがですか?

IMEと比べると、若干処理は遅いけど、
同じ郵便番号で違う住所なんて場合も対処ができるかと思います。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=10787;id=excel

データベースの中まで定義しなくてはならないので
コードの投稿は今はできませんが、
ちょっと試してみたけど、ワークシート関数でも処理はできますよ!!

【22087】改めて質問します
質問  okb  - 05/2/8(火) 16:06 -

引用なし
パスワード
   下記箇所、私の知識では、理解できないのですが、関数として利用したいので、
FUNCTION 〜 END FUNCTION をイメージしていたのですが、使い方はどうすれば
いいのでしょうか?
icinoseさんの方法は、他のPCに移すのが面倒なので積極的には使いにくいですね。
>Public Declare Sub keybd_event Lib "user32.dll" _
>  (ByVal bVirtualKey As Byte, ByVal bScanCode As Byte, _
>   ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
>
>Public Declare Function MapVirtualKey Lib "user32" _
>  Alias "MapVirtualKeyA" (ByVal wCode As Long, _
>  ByVal wMapType As Long) As Long
>
>Const VK_DBE_HIRAGANA = &HF2
>Const KEYEVENTF_EXTENDEDKEY = &H1
>Const VK_KANJI = &H19
>Const KEYEVENTF_KEYUP = &H2

質問を改めて書きますと、欲しい関数は次のようなイメージです。
1.任意のセルAに半角で郵便番号を入力
2.任意のセルB(入力規則で日本語入力ON済み)にワークシート関数を定義して
  次の手順で住所を表示
  a)セルAの値をIMEの変換キーを押す前の全角に変換
  b)変換キーを一度だけ押す
  c)住所が表示されて、Enterキーを押す

【22113】Re:改めて質問します
回答  りすりす  - 05/2/9(水) 2:26 -

引用なし
パスワード
   ▼okb さん:

>質問を改めて書きますと、欲しい関数は次のようなイメージです。
>1.任意のセルAに半角で郵便番号を入力
>2.任意のセルB(入力規則で日本語入力ON済み)にワークシート関数を定義して
>  次の手順で住所を表示
>  a)セルAの値をIMEの変換キーを押す前の全角に変換
>  b)変換キーを一度だけ押す
>  c)住所が表示されて、Enterキーを押す

セル内に キーボードイベントおくと
再計算されるたびに呼び出されたり
それ以前に式入れた時点で吹っ飛びますよ。

他から検索データを拾ってきたくないってことなので
ワークシートのイベントで処理する方が安全でしょう

ThisWorkbook に下記を追加

Public Sub 住所検索2(c1, c2 As String)
' 使い方 call 住所検索2("A1","B1")
 Range(c2).Activate
 Call SendKeys(Range(c1).Cells.Value & Space(1), True)
 Call SendKeys("{ENTER}", True)
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 If (Sh.Name = "Sheet1") And (Target.Column = 1) _
   And (IsEmpty(Target.Value) = False) Then
  Call 住所検索2(Target.Address, _
     Cells(Target.Row, Target.Column + 1).Address)
 End If
End Sub

【22120】Re:改めて質問します
お礼  okb  - 05/2/9(水) 11:31 -

引用なし
パスワード
   過去ログ、りすりすさんの投稿を参考に下記で思うように動作しました。

1.標準モジュールへ
Sub 住所変換(c1, c2 As String)
  'セルc1に郵便番号を"-"つきの半角で入力しておき、セルc2の入力規則、日本語入力で"ひらがな"を選択
  ' 使い方 call 住所変換("A1","B1")
  Range(c2).Activate
  Application.SendKeys Range(c1) & Space(1)    '& "{ENTER}"
End Sub

2.シートへ
Private Sub Worksheet_Change(ByVal Target As Range)
' 指定のセルの値をチェックして何かを実行させる。
'
 If Target.Count = 1 Then
   If Target = Range("A1") And Target.Value <> "" Then
     Call 住所変換("A1", "B1") '入力ミスの回避は、Escキーで対応
   End If
 End If
End Sub

使い方が、まずかったのか下記ではうまくいきませんでした。
>ThisWorkbook に下記を追加
>
>Public Sub 住所検索2(c1, c2 As String)
>' 使い方 call 住所検索2("A1","B1")
> Range(c2).Activate
> Call SendKeys(Range(c1).Cells.Value & Space(1), True)
> Call SendKeys("{ENTER}", True)
>End Sub
>
>Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
> If (Sh.Name = "Sheet1") And (Target.Column = 1) _
>   And (IsEmpty(Target.Value) = False) Then
>  Call 住所検索2(Target.Address, _
>     Cells(Target.Row, Target.Column + 1).Address)
> End If
>End Sub

10392 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free