「一気に最後まで読んだ」本、教えて下さい!

Excel2007でのVBAのご質問なのですが、InputBox関数で転記元テーブル表から、
例えば任意の整理番号を入力する事で、その整理番号の得意先名や
担当者名、部署名等のデータを検索して転記するようにしたいのですが
どうしたら良いのでしょうか?宜しくお願い致します。

A 回答 (2件)

No.1です。



コードをざっと拝見しました。
>'ワイルドカードを使って「~を含む」という検索文字列を作成

いわゆる「あいまい検索」を行いたい訳ですね?
整理番号での「あいまい検索」はやめた方が良いと思います。
「あいまい検索」=複数データがある
というコトですので、その後ご自身で該当データを選択する必要があると思います。
氏名等でのあいまい検索は有効だと思いますが、「整理番号」による「あいまい検索」は意味がないように思えます。
仮に検索し、データが複数表示されたとしても、整理番号の違いで担当者等の違いが判断できるでしょうか?

そして数値による「あいまい検索」を行った場合、仮に「1」であいまい検索すると
1を含むデータが無数存在すると思います。
10番台であれば10~19とか、他にも3桁になれば100や101・120等々限りがありません。

そこで一案として
(1)インプットボックスには必ず必要桁数を入力してもらい、そのデータがあるか?ないか?
の二者択一にして、あれば転記、なければメッセージボックス!
とした方が良いと思います。

(2)どうしても「整理番号」による「あいまい検索」を行いたい場合
転記先Sheetの整理番号を入力する列に入力規則の「リスト」設定を行います。
そこに1文字でも入力 → Enter で全く使用していないSheetにリスト表示させるデータをVBAで表示させ
その中から該当データを選択 → 残りの列はVLOOKUP関数やINDEX関数で該当データを表示!
といった方が現実的のような気がします。

Excel2007をお使いだというコトですので、
Excel2010以降だと
入力規則のリストの欄に数式で直接別Sheetが参照できますので、余計な空白はリスト表示せずに済みます。

ただ無い袖は振れないので、おそらく直接別Sheetを参照できなかったと思います。
別Sheetのリスト表示させたい範囲を名前定義する必要があります。
この場合、考えられるデータ数より多目の範囲指定をしなければならないので、
転記先Sheetのリスト表示は空白が多くなり、スクロールする必要があるはずです。

※ せっかくコードをお考えのようですが、個人的には他人様がお考えになったコードには
あまり手を加えたくないので、この程度でごめんなさい。

※ 実際のデータのレイアウト、そしてそのデータをどのようにしたいのか?が判れば
お役に立てるかもしれません。m(_ _)m
    • good
    • 0
この回答へのお礼

こんにちは。tom04様、再びの回答有難うございます。

貴重なご意見有難うございますm(__)m

仰るとおり1を含むデータで別データが出たり、そもそもデータが入らなかったりという
感じでした。顧客データの内容が頻繁に変わりますので、転記して印刷する入力表という
手間を無くすために必要だったもので……

別の手段が有効の様ですのでもう少し別のアプローチを考えてみます。

お礼日時:2014/03/22 09:56

こんばんは!



表の具体的なレイアウトが判らないので、流れとしては
>例えば任意の整理番号を入力する事で・・・
「整理番号」というコトは重複データはないという前提だと

「インプットボックス」に入力 → FINDメソッド → データがあれば表示、なければメッセージボックス
というった感じになると思います

※ 重複データがある場合はオートフィルタの操作が簡単だと思います。

最初に書いたように具体的な表の配置が判らないので、
この程度でごめんなさいね。m(_ _)m

この回答への補足

tom04様回答 ありがとうございます。ご返事遅れまして申し訳ございませんm(__)m
補足させて頂きますと、マクロだと
Sub 問い合わせを行いながら転記_1()
'変数の宣言
Dim myTable As Range, myField As Range, tmpRange As Range
'検索文字の入力
Dim myStr As String, myRow As Integer
myStr = InputBox("「整理番号」から検索したい文字列を入力してください")
'ワイルドカードを使って「~を含む」という検索文字列を作成
myStr = "*" & myStr & "*"
'レコード位置判定用の変数を初期化
myRow = 1

Set myTable = Range("転記元テーブル表") 'テーブルをセット
Set myField = myTable.Columns(2).Cells '検索対象のフィールドをセット
For Each tmpRange In myField
'キーワードに該当するレコードがある場合、そのレコードを選択
If tmpRange.Value Like myStr Then
Application.Goto myTable.Rows(myRow)
'転記の確認の問い合わせを行い、よければレコードを転記する
If MsgBox("このレコードを転記しますか", vbYesNo) = vbYes Then
'ひとつのレコードを転記して処理を終了する
myTable.Rows(myRow).Copy Range("B5").End(xlUp).Offset(1)
Exit Sub
End If
End If
'レコード位置判定用の変数を更新
myRow = myRow + 1
Next
MsgBox "該当するレコードが見つかりません"
End Sub
といった形で、何故か担当者名でメッセージボックスからの応答があるという結果に。氏名ではなく番号で
データを転記したいのですが勝手が分からない有り様で(・・;

補足日時:2014/03/19 14:02
    • good
    • 0

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


おすすめ情報