グッドデザイン賞を受賞したウォーターサーバー >>

お世話になります。
Accessにて顧客管理システムを作成しています。掲題について、連結サブフォームでの入力項目の郵便番号には入力支援として住所の自動入力は設定しています。
ただ、その郵便番号入力後 住所を入力者が変えた時、郵便番号と異なる場合のチェックを保存処理のボタンを押したタイミングでDBに予め用意したフラグフィールドに付けたいです。
このチェック方法をVbaのコードで示して頂けると助かります。どうかよろしくお願いいたします。

※住所から郵便番号を自動入力で変えるということは考えてません。郵便番号と住所、どちらが正しい情報なのか区別するため、ただ一致しないという判別をつけるだけであとで入力者本人に確認する運用にします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

【訂正】[住所X_控え]は不要!



添付図通りに[住所1_控え]、[住所2_控え]を用意し、もって比較し[住所不一致]を更新するコードを書いてみました。そして、実際に試した場合、一旦、別のレコードに移動した場合に[住所1_控え]、[住所2_控え]を再現する必要があることに気付きました。そうしないと、新たな[住所1]、[住所2]との正しい比較が出来ないからです。

Private Sub Form_Current()
  If Me.NewRecord Then
    Me.住所1_控え = ""
    Me.住所2_控え = ""
  Else
    Me.住所1_控え = ZipConv(Me.郵便番号, zcKen)
    Me.住所2_控え = ZipConv(Me.郵便番号, zcCty1) & ZipConv(Me.郵便番号, zcCty2)
  End If
End Sub

そこで、某サイトのZipConv()を利用して[住所1_控え]、[住所2_控え]を再現。でも、そんなことをする位ならば・・・

Public Sub 住所不一致_Update()
  Dim isNotAgree As Boolean
  
  If Len(Me.郵便番号 & "") Then
    isNotAgree = CBool(Me.住所1 <> ZipConv(Me.郵便番号, zcKen))
    isNotAgree = isNotAgree + CBool(Me.住所2 <> ZipConv(Me.郵便番号, zcCty1) & ZipConv(Me.郵便番号, zcCty2))
    Me.住所不一致 = isNotAgree
  End If
End Sub

と、ZipConv()をもって比較すれば済む話。そういうことで、コメントアウトしている行は不要。つまり、[住所1_控え]、[住所2_控え]は不要。そういうことになるようです。

Option Compare Database
Option Explicit

Private Sub Form_Current()
  'If Me.NewRecord Then
  '  Me.住所1_控え = ""
  '  Me.住所2_控え = ""
  'Else
  '  Me.住所1_控え = ZipConv(Me.郵便番号, zcKen)
  '  Me.住所2_控え = ZipConv(Me.郵便番号, zcCty1) & ZipConv(Me.郵便番号, zcCty2)
  'End If
End Sub

Private Sub 住所1_AfterUpdate()
  住所不一致_Update
End Sub

Private Sub 住所2_AfterUpdate()
  住所不一致_Update
End Sub

Private Sub 郵便番号_AfterUpdate()
  Me.住所不一致 = False
End Sub

Public Sub 住所不一致_Update()
  'Me.住所不一致 = CBool((Me.住所1 <> Me.住所1_控え) + (Me.住所2 <> Me.住所2_控え))
  
  Dim isNotAgree As Boolean
  
  If Len(Me.郵便番号 & "") Then
    isNotAgree = CBool(Me.住所1 <> ZipConv(Me.郵便番号, zcKen))
    isNotAgree = isNotAgree + CBool(Me.住所2 <> ZipConv(Me.郵便番号, zcCty1) & ZipConv(Me.郵便番号, zcCty2))
    Me.住所不一致 = isNotAgree
  End If
End Sub

さてさて、問題は、[住所1]と[住所2]とを変更すべき事態の発生頻度です。事実上はゼロではないでしょうか?いずれにしろ、私の当初アイデアには致命的な問題点があったので撤回します。
「Access-郵便番号と住所の整合チェッ」の回答画像3
    • good
    • 0
この回答へのお礼

試したところ動きました。意図した処理も難なくできました。
本当にありがとうございます。
実際の処理説明を記載いただきました、回答3にベストアンサーを付けさせていただきます。

お礼日時:2014/10/13 01:52

なお、テーブルに列[住所不一致]列がなくても、クエリにて回答3と同じ方法で不一致レコードは抜き出せます。

それが、最適解かも知れませんね。

この回答への補足

試したところ動きました。意図した処理も難なくできました。
本当にありがとうございます。
実際の処理説明を記載いただきました、回答3にベストアンサーを付けさせていただきます。

補足日時:2014/10/13 01:50
    • good
    • 0
この回答へのお礼

案、ありがとうございます。親身に考えてくださっているのが伝わり感動しています。

最適解のクエリにしても、コーディングにしても以下のサイトにあるような
ZipConvをまず標準モジュールに設定することが前提ですね?
APIの呼び出しに明るくないので、ACCESS2010-2013での動作確認からになってしまいますが
試してみます。

http://www.f3.dion.ne.jp/~element/msaccess/AcTip …

お礼日時:2014/10/12 23:58

× 3、入力用の非表示のテキストボックスにも住所を代入する。


〇 3、入力用の表示中のテキストボックスにも住所を代入する。
    • good
    • 0

まず、アイデアの確認が必要です。



1、郵便番号を入力する。
2、非表示のテキストボックスに住所を代入する。
3、入力用の非表示のテキストボックスにも住所を代入する。
4、で、非表示と入力用との違いをチェックする。
5、ただし、住所1、住所2、住所3、ビル等とし変更は不要とする。

こういう風にするのか?

>保存処理のボタンを押したタイミングで・・・

非連結フォームの場合、保存処理のボタンは必要ないかと・・・。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q住所から郵便番号を付与するには?

はじめましてBOLTSです。
現在ACCESS2000を使用しているんですが、業務上、住所データを管理しています。クライアントによっては住所のみが
入っていて郵便番号が入ってないものがあります。
以前はAISOFTの「GoGo Seven」を使って郵便番号を付与していたんですが、最近そのデータも古くなってきて変換効率が落ちてきました。
AISOFTでは今後「GoGo Seven」の開発を行わないらしくバージョンアップは期待できないので困っております。
これに似たようなソフトをどなたかご存知ですか?有償無償は問いませんが、業務で使うものなのである程度の信頼性のあるものを捜しています。

またそういうソフト以外に他に郵便番号を付加できる方法があれば教えてください。
お願いします。

Aベストアンサー

>郵便番号が入ってない住所データにフィールドを指定してあげるだけで一括で付与できたりします。

ほほぉ、それをAccess上でできるわけですね。なるほどぉ、勉強になりました。ありがとうございます。
(って、これは回答だったっけ。)

重要な点は pmmaohmさんの回答で解決したみたいなので、Access派からひとつ・・・

住所->郵便番号の変換は、
>「~が丘」とか「~ヶ丘」
や、空白有/無、英大文字/小文字、数字/漢数字などの表現の違いを吸収するため表現を統一したフィールドを作成し、いったん、空白なし、英数字大文字、「ヶ丘」などにあわせてから、変換するという2段階でできます。

QAccess 住所入力支援が機能しません

現在、データ入力作業をしていて、この住所入力支援機能を設定しているのですが、
設定時にチェックするときは自動で住所が出てくるのに、
いざテーブルやフォームで入れようとすると出てきません。
テーブル、フォームいずれでも、プロパティから設定をしているのですが。。。
氏名→フリガナはうまく出来ているのに、何がいけないのか分かりません。

大変申し訳ありませんが、教えていただければと思います。

Accessは2003で、最近データベースとして使い始めたばかりです。

Aベストアンサー

>「所属先1〒」のフィールドの定型入力が000\-0000;;_
「住所1」のフィールドの住所入力支援に「所属先1〒」
となってはいるのですが・・・。

設定されてますか・・。ちなみに[住所1]のフィールドの住所入力支援は[所属先1〒;;;]です。;が3つですよね。
使っているAccessがランタイム版とかではないですよね。ランタイムでは住所入力支援が使えないので・・。
すいません。分からないですね。不明です。
mdbを最適化/修復してもダメですか?他のmdbでも使えないのでしょうか?
Accessの全てのmdbで使用できないのであればAccessの再インストールが必要かもしれません??
下記は住所入力支援のプロパティのURLです。ウィザードで設定しているのなら合っていると思いますが念のため書いておきます。

参考URL:http://www.microsoft.com/JAPAN/developer/library/vbaac10/acpropostaladdress.htm

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QエクセルVBA 郵便番号の書式判定について

お世話になります。

現在VBAの勉強としてエクセルでマクロを書いているのですが、セル内に郵便番号や日付を入れたときの書式判定で悩んでいます。

例えば、セルの範囲A2:A10に「000-0000」の形で郵便番号が表示されるように、表示形式を設定したとします。
その際に、表示されている値が 「数値3桁」+「-」+「数値4桁」といった形で表示されていることを判定したい場合、どのように記述する方法があるでしょうか?

ちなみに、私は今順番を関係なく、セルの値を取得した後で前3桁と記号と後ろ4桁に分解し、
それぞれが数値か、それとも「-」かで判定を行っています。
ほかにも方法がありましたら、参考までに知恵をお貸しください。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

#6 のご回答にありますとおり、セルの表示形式を反映させた、つまりセルに
表示されたそのままのデータを取得する Text プロパティーがあります。

あとは、この程度のチェックなら Like 演算子でもよさそう。

  Dim sText As String
  sText = Range("A1").Text
  If sText Like "###-####" Then
    MsgBox "Good Format"
  End If

こんな感じ。# は任意の1文字の数字を表します。

Q【VBA】郵便番号を入れたら住所が出てくる仕組み

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_050.html

このサイトを参考に見たのですが
かなり難しそうなのですが

これは簡単にできるものでしょうか?

Aベストアンサー

IMEでよかったらですが、関数を使った一案です。
IMEのツール=>辞書の追加で 郵便番号辞書の機能を追加

  A      B    C
 郵便番号   住所1 住所2
=PHONETIC(B2)

B2セルに =PHONETIC(B2)セルに入れて下までコピーしておきます。

B列に 全角で郵便番号を入れると、希望の住所に変換できます。
A列には、郵便番号が表示されます。
C列には、残りの住所を入力します。
住所入力がかなり楽になるのは間違いないです。


但し、IMEの郵便番号辞書は、常に最新に更新されるわけではないので
注意は必要です。

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング