Excel VBA質問箱 IV

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

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


58 / 13292 ツリー ←次へ | 前へ→

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

【80425】Re:検索フォームの動作について マナ 19/2/13(水) 19:15 発言[未読]
【80426】Re:検索フォームの動作について tarutaru 19/2/13(水) 22:09 質問[未読]
【80427】Re:検索フォームの動作について tarutaru 19/2/14(木) 3:30 質問[未読]
【80432】Re:検索フォームの動作について マナ 19/2/14(木) 19:22 発言[未読]
【80434】Re:検索フォームの動作について tarutaru 19/2/15(金) 14:18 回答[未読]
【80439】Re:検索フォームの動作について マナ 19/2/16(土) 9:24 発言[未読]
【80448】Re:検索フォームの動作について tarutaru 19/2/16(土) 17:20 回答[未読]
【80449】Re:検索フォームの動作について マナ 19/2/16(土) 19:35 発言[未読]
【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 お礼[未読]

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

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

回答側で、簡単に再現できるようにすると良いと思います。

例えば、

>フォームにはComboBox、TextBox等を配置し

これではだめです。
必要な部品をすべて列挙すべきです。

また、コードを実行するための
サンプルデータも必須です。

マルチポストしてもあまり意味はないと思います。

【80426】Re:検索フォームの動作について
質問  tarutaru  - 19/2/13(水) 22:09 -

引用なし
パスワード
   マナ様、早速のご返信ありがとうございます。またご指導ありがとうございました。以後気を付けたいと思います。
また、説明不足で大変申し訳ありません。
早速ですが、「検索フォーム」に設置しているListBox1に表示する各Boxの中身は、
Range(“B”) ComboBox1(役職) = “部 長”,”課 長”,”係 長”,”社 員”
Range(“C”) ComboBox3(所属) = “営 業”,”内 勤”,”配 送”
Range(“E”) TextBox1(氏名)
Range(“I”) ComboBox4(血液型) = “A”,”B”,”O”,”AB”,
Range(“T”) ComboBox2(配偶者) = “有”,無”
Range(“P”) ComboBox7(所業構成) =
Range(“Q”) ComboBox8(就業形態) = 
Range(“J”) TextBox2(入社年月日) 2000/1/1
Range(“K”) TextBox3(退職年月日) 2001/1/1
TextBox6 = 該当数(数字)
TextBox7 = 総 数(数字) 
となります。

配置している各Boxのいずれかに入力し、CommandButton1を押すと、該当するデータが抽出され、ListBox1に表示される(例えば、ComboBox1で”社 員”を選択すると、全ての社員のデータが、さらにそこからComboBox3で”内 勤”を選択すると、“社 員”の中から“内 勤”に該当する社員のデータが抽出される。)ようにしてあります。
そこから、ListBox1に抽出されているデータを1クリック(アクティブに)して、CommandButton2を押すと
“Sheet3”にAutoFilterを使用したListBox1の内容を転記したいと思っています。
ところが、ListBox1には問題なく抽出データが表示されるのですが、”Sheet3”に、ListBox1と同じ表示ができません。
また、ListBox1に抽出されているデータをダブルクリックすると、”Sheet3”の該当するCell(行)が選択表示できようにしたいのですが上手くできません。

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

【80427】Re:検索フォームの動作について
質問  tarutaru  - 19/2/14(木) 3:30 -

引用なし
パスワード
   ▼tarutaru さん:
>マナ様、早速のご返信ありがとうございます。またご指導ありがとうございました。以後気を付けたいと思います。
>また、説明不足で大変申し訳ありません。
>早速ですが、「検索フォーム」に設置しているListBox1に表示する各Boxの中身は、
>Range(“B”) ComboBox1(役職) = “部 長”,”課 長”,”係 長”,”社 員”
>Range(“C”) ComboBox3(所属) = “営 業”,”内 勤”,”配 送”
>Range(“E”) TextBox1(氏名)
>Range(“I”) ComboBox4(血液型) = “A”,”B”,”O”,”AB”,
>Range(“T”) ComboBox2(配偶者) = “有”,無”
>Range(“P”) ComboBox7(所業構成) =
>Range(“Q”) ComboBox8(就業形態) = 
>Range(“J”) TextBox2(入社年月日) 2000/1/1
>Range(“K”) TextBox3(退職年月日) 2001/1/1
>TextBox6 = 該当数(数字)
>TextBox7 = 総 数(数字) 
>となります。
>
>配置している各Boxのいずれかに入力し、CommandButton1を押すと、該当するデータが抽出され、ListBox1に表示される(例えば、ComboBox1で”社 員”を選択すると、全ての社員のデータが、さらにそこからComboBox3で”内 勤”を選択すると、“社 員”の中から“内 勤”に該当する社員のデータが抽出される。)ようにしてあります。
>そこから、ListBox1に抽出されているデータを1クリック(アクティブに)して、CommandButton2を押すと
>“Sheet3”にAutoFilterを使用したListBox1の内容を転記したいと思っています。
>ところが、ListBox1には問題なく抽出データが表示されるのですが、”Sheet3”に、ListBox1と同じ表示ができません。
>また、ListBox1に抽出されているデータをダブルクリックすると、”Sheet3”の該当するCell(行)が選択表示できようにしたいのですが上手くできません。
>
>よろしくお願いいたします。


すみません。
2箇所未記入のところがありました。

Range(“P”) ComboBox7(所業構成) = ”文字列1”,”文字列2”,”文字列3”,”文字列4”
Range(“Q”) ComboBox8(就業形態) = “文字列1”,”文字列2”,”文字列3”,”文字列4”

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

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

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

シート構成と各シートのレイアウトも教えてください。
こちらで、マクロを動かして確認したいのです。

【80434】Re:検索フォームの動作について
回答  tarutaru  - 19/2/15(金) 14:18 -

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

お忙しい中、ありがとうございます。
シートの構成等は下記のとおりです。

シートは、2シート用意しており、”2019.4”,”Sheet3”(Sheet2は作成中削除しました)、レイアウトにつきましては、A列は3行目から連番を、Range(“B2:T2”)まで順に「役職・所属・(数字)・氏名・(住所)・(生年月日)・(年齢)・血液型・入社年月日・退社年月日・(在職月)・(在職年月)・(連絡先1)・(連絡先2)・職業構成・就業形態・(会社名)・(会社連絡先)・配偶者」の項目【()内の項目は入力フォームにはボックスとして配置しておりません】を入れており、3行目以降がデータとなります。

また、”2019.4”のRange(“B1”)に「入力」、Range(“C1”)に「検索」のCommandButtonを配置し、「検索」を押すと「検索フォーム」が表示され、”Sheet3”のRange(“B1”)に配置した「一覧表」のCommandButton、押すと、“2019.4”がActivateになるよう設定しています。

次に、「検索フォーム」ですが、フォーム上部に上記各入力ボックスを配置、フォーム下部(フォームの下半分)にListBox1、さらにフォーム上部には、「決定」Comb1、「抽出」Comb3、「RESET」Comb2ボタンを配置しており、「決定」ボタンで絞込後、ListBox1に表示されたリストを選択し、「抽出」ボタンを押すと”Sheet3”に抽出したデータ(List表示されているそのままのデータ)が転記され、その前のリスト選択時のリストだけ、色が変わるようにしたいのですが、上手くいきません。

「RESET」ボタンは押すと、各入力ボックスの内容が空白となり、”2019.4”が「検索フォーム」を残したまま表示されるようにしています。
更にTextBoxを2つ配置しており、TextBox6に「該当数」、TextBox7に「総数」が数字表示されるようにしています。

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

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

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

「検索フォーム」は下記の構成で間違いありませんか

・Textbox:9個+2個
・Listbox:1個
・Combobox:2個
・Commandbutton:2個

 

【80448】Re:検索フォームの動作について
回答  tarutaru  - 19/2/16(土) 17:20 -

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

説明不足で申し訳ありません。
内訳は下記のとおりとなります。

ComboBox1(役職) = “部 長”,”課 長”,”係 長”,”社 員”
ComboBox3(所属) = “営 業”,”内 勤”,”配 送”
TextBox1(氏名)
ComboBox4(血液型) = “A”,”B”,”O”,”AB”,
ComboBox2(配偶者) = “有”,無”
ComboBox7(所業構成) =”文字列1”,”文字列2”,”文字列3”,”文字列4”
ComboBox8(就業形態) =”文字列1”,”文字列2”,”文字列3”,”文字列4”
TextBox2入社年月日 2000/1/1
TextBox3退社年月日 2001/1/1
TextBox5年齢(数字)※入力しても反映されていません。
TextBox6該当数(数字)
TextBox7総 数(数字)
CommandButton1(決定ボタン)
CommandButton2(抽出ボタン)
CommandButton3(RESETボタン)
ListBox1

・TextBox:6個
・ListBox:1個
・ComboBox:6個
・CommandButton:3個


Sheet(“2019.4”)の項目は、
A列は3行目から連番
(B2)役職
(C2)所属
(D2)“数字”
(E2)氏名
(F2)住所
(G2)生年月日
(H2)年齢
(I2)血液型
(J2)入社年月日
(K2)退社年月日
(L2)在職月(総数)
(M2)在職年月
(N2)連絡先1
(O2)連絡先2
(P2)職業構成
(Q2)就業形態
(R2)会社名
(S2)会社連絡先
(T2)配偶者(有無)

※Sheet(“2019.4”)上の1行目に、「入力」「検索」の2つのボタンを配置しており、それぞれのフォームが開くようにしています。Sheet3にも1行目に「一覧表」の
ボタンを配置しており、Sheet(“2019.4”)が表示されるようにしてあります。

お手数を掛けますが、よろしくお願いいたします。

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

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

やっと検索フォームが準備できました。

決定、抽出、RESETボタンの役割を
すでに説明いただいたいると思いますが、
もう一度教えてください。
で、期待通りにならない場合は、どうなるかも。

【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を少しずつ勉強していきたいと思います。

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

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