Excel VBA質問箱 IV

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

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


21 / 13255 ツリー ←次へ | 前へ→

【80422】検索フォームの動作について tarutaru 19/2/13(水) 13:36 質問[未読]

【80456】Re:検索フォームの動作について tarutaru 19/2/16(土) 21:38 発言[未読]
【80463】Re:検索フォームの動作について マナ 19/2/16(土) 23:22 発言[未読]
【80464】Re:検索フォームの動作について マナ 19/2/17(日) 0:03 発言[未読]
【80466】Re:検索フォームの動作について tarutaru 19/2/17(日) 7:42 発言[未読]
【80470】Re:検索フォームの動作について マナ 19/2/17(日) 10:31 発言[未読]
【80473】Re:検索フォームの動作について マナ 19/2/17(日) 11:19 発言[未読]
【80475】Re:検索フォームの動作について tarutaru 19/2/17(日) 17:33 お礼[未読]
【80477】Re:検索フォームの動作について マナ 19/2/17(日) 18:55 発言[未読]
【80480】Re:検索フォームの動作について tarutaru 19/2/17(日) 20:50 お礼[未読]
【80495】Re:検索フォームの動作について tarutaru 19/2/19(火) 22:54 お礼[未読]
【80496】Re:検索フォームの動作について マナ 19/2/20(水) 19:29 発言[未読]
【80497】Re:検索フォームの動作について tarutaru 19/2/21(木) 12:09 お礼[未読]

【80456】Re:検索フォームの動作について
発言  tarutaru  - 19/2/16(土) 21:38 -

引用なし
パスワード
   マナ様 

早速の対応ありがとうございます。

はい、各ボックスに入力を行い(もちろんその内の1つでもいいのですが)、「決定」ボタンを押すと、ListBox1に該当データが抽出されます。※各ボックスに入力すればするほど抽出の精度が上がります。
そのListBox1に表示された該当データ(List)をシングルクリックし、「抽出」ボタンを押すと、Sheet3にListBox1に表示されたデータと同じデータが表示されるようにしているのですが、Sheet3にはB2「役職」で絞り込まれたデータ全てが表示されてしまいます。そこで、以下の問題を解決していただけないでしょうか?

1.ListBox1に抽出されたデータ(List)と同じ結果をSheet3に反映したい。
2.かつ、「抽出」ボタンを押さずとも、ListBox1に抽出されているデータ(List)をダブルクリックすると、Sheet3に1.と同じ結果と、ダブルクリックしたデータ(List)がピックアップ(Cellの色が変わる)するようにしたいと思っています。
現状、ダブルクリックのステートメントに、エラーが発生し、解決できずにいます。

よろしくお願いいたします。

【80463】Re:検索フォームの動作について
発言  マナ  - 19/2/16(土) 23:22 -

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

>そのListBox1に表示された該当データ(List)をシングルクリックし、「抽出」ボタンを押すと、Sheet3にListBox1に表示されたデータと同じデータが表示されるようにしているのですが、Sheet3にはB2「役職」で絞り込まれたデータ全てが表示されてしまいます。

シングルクリックは、何のためにしているのですか?

選択したデータでなく、ListBox1の全データを転記するのであれば、
そもそも抽出ボタンでなく、決定ボタンで、
Sheet3にも同時に貼り付けではだめなのでしょうか?

【80464】Re:検索フォームの動作について
発言  マナ  - 19/2/17(日) 0:03 -

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

ListBox1の全データを転記する場合の別案です。

リストボックスには、全項目取り込んでおいて、
不要な項目は、非表示にしておけば、
Sheet3には、リストボックスからの単純な転記ですみそうです。

あるいは、フィルタオプションで転記というのも簡単そうです。

【80466】Re:検索フォームの動作について
発言  tarutaru  - 19/2/17(日) 7:42 -

引用なし
パスワード
   マナ様

はい。始めは「決定」ボタン1つで行おうと思い、「抽出」ボタンは作成していませんでした。
ところが、最初に投稿した質問欄にあるように、その構文ではListBox1に抽出されたListのどれかを一度選択しなければ、Sheet3にそのデータが反映されません。
マナ様のおっしゃるとおり、できれば簡潔にできるようにしたいのですが何分知識不足で…。
もし、よろしければ、フィルタオプションを含めた具体的なステートメントをご教示いただけますと幸いです。

他の方の質問対応でお忙しい中、お時間のある時で構いませんので、大変申し訳ありませんが、ご教示よろしくお願いいたします。

【80470】Re:検索フォームの動作について
発言  マナ  - 19/2/17(日) 10:31 -

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

1)決定ボタンで転記する方法
配列等を使用した方が効率はよいかもしれませんが
一番簡単なのは、条件を満たした行を都度コピペするというもの。
Worksheets("2019.4").Rows(i + 2).Copy Worksheets("sheet3").Cells(Rows.Count, 1).End(xlUp).Offset(1)

2)リストボックスから丸ごと転記する方法
リストボックスには、20項目すべて取り込み
表示したくない項目の列幅を0に設定
そうすると、Listプロパティで取得した配列を書き込むだけ。
With ListBox2
  Worksheets("sheet3").Cells(3, 1).Resize(.ListCount, 10).Value = .List
End With

3)フィルタオプションを使う方法
検索フォームで選んだ条件に基づき
一覧シートから抽出しSheet3に転記します。
抽出条件は、セル範囲として指定が必要なので
作業用セルを用意し、検索フォームから転記します。
まずはフィルタオプションの操作を手作業で理解することです。

【80473】Re:検索フォームの動作について
発言  マナ  - 19/2/17(日) 11:19 -

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

>With ListBox2
>  Worksheets("sheet3").Cells(3, 1).Resize(.ListCount, 10).Value = .List
>End With

間違えました。10でなく20でした。

Worksheets("sheet3").Cells(3, 1).Resize(.ListCount, 20).Value = .List

【80475】Re:検索フォームの動作について
お礼  tarutaru  - 19/2/17(日) 17:33 -

引用なし
パスワード
   マナ様

お忙しい中、懇切丁寧にご教示いただき、大変ありがとうございます。

後日、ご教示いただいたステートメントで再構成したいと思います。
結果につきましても、報告させていただきます。

マナ様のような上級者が周りにいないもので、本当に助かります。

今後ともよろしくお願いいたします。

【80477】Re:検索フォームの動作について
発言  マナ  - 19/2/17(日) 18:55 -

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

現行とかなり変わってしまうかもしれませんが
こんな感じが一番すっきりしそうに思いました。
(フィルタオプション案です)

1)条件設定:コンボボックス、テキストボックス
   ↓
2)コマンドボタン
   ↓
3)フィルタオプションでSheet3に抽出
   ↓
4)Sheet3のデータをリストボックスに表示
   ↓
5)条件変更:コンボボックス、テキストボックス
   ↓
  繰り返し

【80480】Re:検索フォームの動作について
お礼  tarutaru  - 19/2/17(日) 20:50 -

引用なし
パスワード
   マナ様

アドバイスありがとうございます。
2通り作成し、どちらがいいか試してみたいと思います。

【80495】Re:検索フォームの動作について
お礼  tarutaru  - 19/2/19(火) 22:54 -

引用なし
パスワード
   マナ様

アドバイスいただいた、「2)リストボックスから丸ごと転記する方法」で、自分の思っていたフォームの動作ができました。
大変ありがとうございました。助かりました!

ただ、入社年月日を入力すると今現在の年月日から、逆算して勤務年数(年カ月)が算出できる計算式を一覧表のセルに入れているのですが(在職者の場合退職していないので現在進行形でよい)、もし退職年月日を入力した時点で、その時点の勤務年数(年カ月)に変更(止める)させるためには、セル自体にそのような計算式があるのか?あるいはIf構文等でプロシージャを「sheet」に組むのか?かがわかりません。
申し訳ありませんが、ヒントをいただけないでしょうか?

よろしくお願いいたします。

【80496】Re:検索フォームの動作について
発言  マナ  - 19/2/20(水) 19:29 -

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

>ただ、入社年月日を入力すると今現在の年月日から、逆算して勤務年数(年カ月)が算出できる計算式を一覧表のセルに入れているのですが(在職者の場合退職していないので現在進行形でよい)、もし退職年月日を入力した時点で、その時点の勤務年数(年カ月)に変更(止める)させるためには、セル自体にそのような計算式があるのか?あるいはIf構文等でプロシージャを「sheet」に組むのか?かがわかりません。

質問が理解できていませんが、
こんな感じの数式にするだけでは?

=IF(退職年月日="",TODAY()-入社年月日,退職年月日-入社年月日)

【80497】Re:検索フォームの動作について
お礼  tarutaru  - 19/2/21(木) 12:09 -

引用なし
パスワード
   マナ様

はい。マナ様のおっしゃるとおりの事でした。
アドバイスを基に色々と試したところ、私の思っている動作が出来ました。

ありがとうございました。

VBAを少しずつ勉強していきたいと思います。

今後ともよろしくお願いいたします。

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