Excel VBA質問箱 IV

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

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


2113 / 13645 ツリー ←次へ | 前へ→

【69874】検索 ユーザーフォーム 入力 まもなくパパ 11/9/10(土) 21:05 質問[未読]
【69875】Re:検索 ユーザーフォーム 入力 ichinose 11/9/10(土) 23:57 発言[未読]
【69876】Re:検索 ユーザーフォーム 入力 まもなくパパ 11/9/11(日) 9:33 回答[未読]
【69877】Re:検索 ユーザーフォーム 入力 ichinose 11/9/11(日) 22:32 発言[未読]
【69878】Re:検索 ユーザーフォーム 入力 まもなくパパ 11/9/12(月) 14:29 お礼[未読]

【69874】検索 ユーザーフォーム 入力
質問  まもなくパパ E-MAIL  - 11/9/10(土) 21:05 -

引用なし
パスワード
   初めまして!!

最近、VBAを使った業務の改善を始めた者です。
書店で専門の書籍を購入しましたが、自身が意図している内容とは異なる内容
で全く応用が効かない為、かなり悩んでおります。

自身が行いたい内容としましては
予め、1枚のシート上に、A列からJ列まで入力しているセル範囲(行は800です。これ以上は増加しません。)を
ユーザーフォームを用いて検索・代入(というのでしょうか?)を行いたいと思っております。
(ユーザーフォームの表示動作までは書籍を見て作成出来ました。。。)

詳細としましては、
A列にある数値をテキストボックスに入力して検索、A〜H列までの文字を
ユーザーフォーム上に表示させ、I列(数値)をテキストボックスで入力→セルに反映させたいです。
また、J列は予め設定した5項目の内容(文字)から選択して決定→セルに反映させたいのです。

I・J列は常に内容が変動する為、常に最新版に更新が可能になるようにと考えております。

また、可能であれば、A列の数値を入力するテキストボックスの内容をクリアできるようなコマンドボタン・ユーザーフォームを閉じるボタン(コマンドボタンが『検索』『クリア』『閉じる』)があると助かります。


このような内容のプログラムは素人には難解でどこから手をつけてよいかわかりません。。。
誠に申し訳御座いませんが、ご教授の程、何卒、宜しくお願い致します。

【69875】Re:検索 ユーザーフォーム 入力
発言  ichinose  - 11/9/10(土) 23:57 -

引用なし
パスワード
   こんばんは。

>このような内容のプログラムは素人には難解でどこから手をつけてよいかわかりません。。。
どのくらいVBAのご経験があるのかわかりませんが、
ユーザーフォームでは、殆どイベントプロシジャーにコードを記述することに
なりますから、ユーザーフォーム及び、今回使用するコントロール(テキストボックスやコマンドボタン等)にどんなイベントがあるのかざっと参考書なりHELPで学んでください。

それから、データの検索方法について学んでください。
記述された内容から、A列のデータが検索対象ですね!!

A列のデータ内容によって検索アルゴリズムが違います。

A列には、同じ内容のデータが複数は存在しない場合


  A
1 項目1
2 1
3 2
4 3
5 4
6 10
7 20



この場合は、Excelの場合、ワークシー関数のMatch関数を使うと便利です。

A列には、同じ内容のデータが複数存在する場合もあるときは、
他の検索方法を使います。
Excelの機能であるオートフィルタ等が考えられます。
これをコード化することを考えてください。
マクロの記録を参考にするとよいでしょうね!!

この辺りの検索方法を予め考えておくことです。


その後で改めて、きちんとした仕様書を記述することです。
この仕様書は、それはそれは、詳細なものですよ!!

プログラムの処理概要から始まり

入力データ例を提示して、
ユーザーフォームの通常操作をもとにすべての操作説明
それによる結果の提示など。

この辺りまで練り上げれば、コードを何にも提示しないような質問投稿には
なってこないと思います。

もっとピンポイントの質問になってくると思います。

【69876】Re:検索 ユーザーフォーム 入力
回答  まもなくパパ E-MAIL  - 11/9/11(日) 9:33 -

引用なし
パスワード
   ichinose さん

ご返答有難う御座います。
VBAの経験は1か月前くらいから始めました。

早速、参考書を参照しながら記述してみました。
検索内容を見直しました。


ユーザーフォーム上にA列検索語入力用のテキストボックス1
【A列は半角英数字のみ、重複はありません。】、
検索開始のコマンドボタン1、
ユーザーフォーム終了用のコマンドボタン2
というフォーム表示にして
該当する行へセルを移動できるようにしてみました。


Private Sub commandbutton2_Click()
   Unload Me
End Sub
Private Sub textbox1_Change()

End Sub

Private Sub commandbutton1_Click()
Dim 検索名 As Variant
If Not textbox1.Value = Empty Then

Set 検索名 = Columns("A:A").Find(commandbutton1, LookIn:=xlValues)

If Not 検索名 Is Nothing Then
  
検索名.Activate

Else

MsgBox "検索した番号は登録されていません。"
commandbutton1.Value = Empty

End If

End Sub

上記コードにてA列の縦セル検索を行い、アクティブセルを移動出来るようになったのですが、
そのアクティブセルの位置をI列に表示させることは可能なのでしょうか?
【A列で検索→該当した行のI列にアクティブセルを移動】

参考書ではそこまでの事は記載されておりませんでした。

このような場合はどうすれば宜しいでしょうか?
宜しくお願い致します。

【69877】Re:検索 ユーザーフォーム 入力
発言  ichinose  - 11/9/11(日) 22:32 -

引用なし
パスワード
   >ユーザーフォーム上にA列検索語入力用のテキストボックス1
>【A列は半角英数字のみ、重複はありません。】、
重複がなければ、Match関数を使ったほうが検索は速いですよ!!

まッ、それはそれとして・・・・・。


>Private Sub commandbutton1_Click()
>Dim 検索名 As Variant
>If Not textbox1.Value = Empty Then
>
>Set 検索名 = Columns("A:A").Find(commandbutton1, LookIn:=xlValues)
>
>If Not 検索名 Is Nothing Then
>  
>検索名.Activate
>
>Else
>
>MsgBox "検索した番号は登録されていません。"
>commandbutton1.Value = Empty
>
>End If
>
>End Sub


>Set 検索名 = Columns("A:A").Find(commandbutton1, LookIn:=xlValues)

このコードでよくTextbox1に入力された文字列でA列の検索ができましたねえ・・。

Set 検索名 = Columns("A:A").Find(Textbox1.Value, LookIn:=xlValues)

の記述間違いですか?
だとしたら、

  If Not 検索名 Is Nothing Then
    検索名.Cells(1, 9).Select
  End If

このようにすると、検索値のセルの同行のI列の選択が可能になると思います。

尚、入力データ(A列の検索セル範囲の値)も具体的に値を
提示してください。800行全部提示してとは言いませんが、
せめて10行ぐらいは提示してください。
なるべく、投稿者と閲覧者が同期のとれる記述を心がけてください。

【69878】Re:検索 ユーザーフォーム 入力
お礼  まもなくパパ  - 11/9/12(月) 14:29 -

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

こんにちわm(_ _)m
まもなくパパです。

度重なる不手際により、ichinoseさんをはじめ、他の閲覧者様にも
ご迷惑をお掛けしております。

A列の検索セル範囲の値につきましてですが、
1文字目が必ず半角アルファベット(A〜Zの大文字です)
2文字目〜15文字までが必ず半角数字になる部品のNoになります。


A00000000000001
B12345678901234
    :
Z99999999999999

等の数字から800種類の部品Noを扱っております。

下記にてご教授頂きましたコードにてI列の選択が可能になりました。

有難う御座いました。

これから、参考書、過去の投稿を基にVBAを猛勉強して参ります。
また、不明点がありましたら、ご迷惑にならない様
投稿させて頂きたいと思いますので、その際はどうぞ宜しくお願い致します。


以上


>>ユーザーフォーム上にA列検索語入力用のテキストボックス1
>>【A列は半角英数字のみ、重複はありません。】、
>重複がなければ、Match関数を使ったほうが検索は速いですよ!!
>
>まッ、それはそれとして・・・・・。
>
>
>>Private Sub commandbutton1_Click()
>>Dim 検索名 As Variant
>>If Not textbox1.Value = Empty Then
>>
>>Set 検索名 = Columns("A:A").Find(commandbutton1, LookIn:=xlValues)
>>
>>If Not 検索名 Is Nothing Then
>>  
>>検索名.Activate
>>
>>Else
>>
>>MsgBox "検索した番号は登録されていません。"
>>commandbutton1.Value = Empty
>>
>>End If
>>
>>End Sub
>の
>
>>Set 検索名 = Columns("A:A").Find(commandbutton1, LookIn:=xlValues)
>
>このコードでよくTextbox1に入力された文字列でA列の検索ができましたねえ・・。
>
>Set 検索名 = Columns("A:A").Find(Textbox1.Value, LookIn:=xlValues)
>
>の記述間違いですか?
>だとしたら、
>
>  If Not 検索名 Is Nothing Then
>    検索名.Cells(1, 9).Select
>  End If
>
>このようにすると、検索値のセルの同行のI列の選択が可能になると思います。
>
>尚、入力データ(A列の検索セル範囲の値)も具体的に値を
>提示してください。800行全部提示してとは言いませんが、
>せめて10行ぐらいは提示してください。
>なるべく、投稿者と閲覧者が同期のとれる記述を心がけてください。

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