Excel VBA質問箱 IV

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

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


2 / 13233 ツリー ←次へ | 前へ→

【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 回答[未読][NEW]
【80439】Re:検索フォームの動作について マナ 19/2/16(土) 9:24 発言[未読][NEW]
【80448】Re:検索フォームの動作について tarutaru 19/2/16(土) 17:20 回答[未読][NEW]
【80449】Re:検索フォームの動作について マナ 19/2/16(土) 19:35 発言[未読][NEW]

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

引用なし
パスワード
   VBA初心者です。
入力フォームと検索フォームを作成し、データ処理を行おうと思っています。
問題は、検索フォームの方なのですが、フォームにはComboBox、TextBox等を配置し
入力が終わった後、CommandButtonをクリックすると、ListBoxに結果が表示され、
別のCommandButtonをクリックすると"Sheet3"にその結果が転記されるようにしたいのですが、 以下の問題が発生し、解決できず困っています。

1.検索フォームのListBoxには各入力Boxの結果が反映されているのだが、"Sheet3"にそのまま反映されない。 ※AutoFilter Fieldを2列目に指定しているため、Range("B3:T3")計19項目(うち検索フォームは10項目)の検索ができていない。

2.AListBoxに表示されているListをダブルクリックしてもデバックが発生し該当行が変化しない。

3."Sheet3"に反映させるには、一度ListBoxのListを選択し、CommandButtonを押さないといけない。
ネットで色々と調べてはいるのですが、思っているような答えが見つからずにいます。
どなたかお詳しい方がいらっしゃればご教示お願い致します。
よろしくお願いいたします。

Option Explicit
‘-------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
 Dim LastRow As Long  
 Dim myData, myData2(), myno  
 Dim i As Long, j As Long, cn As Long  
 Dim key1 As String, key2 As String, key3 As String, key4 As String, key5 As String, key6 As String, _
    key7 As String, key8 As String, key9 As String, key10 As String
 Dim ListNo As Long

  ListNo = ComboBox1.ListIndex  
  If ListNo < 0 Then      
   key1 = "*"
  Else
   key1 = ComboBox1.List(ListNo)
  End If
  
    Dim ListNo1 As Long
     ListNo1 = ComboBox3.ListIndex
     If ListNo1 < 0 Then
      key2 = "*"
     Else
      key2 = ComboBox3.List(ListNo1)
     End If
   
 If TextBox1.Value = "" Then key3 = "*" Else key3 = "*" & TextBox1.Value & "*" 

 Dim ListNo2 As Long
  ListNo2 = ComboBox4.ListIndex
  If ListNo2 < 0 Then
   key4 = "*"
  Else
   key4 = ComboBox4.List(ListNo2)
  End If
 
    Dim ListNo3 As Long
     ListNo3 = ComboBox2.ListIndex
     If ListNo3 < 0 Then
      key5 = "*"
     Else
      key5 = ComboBox2.List(ListNo3)
     End If
 
       Dim ListNo4 As Long
        ListNo4 = ComboBox7.ListIndex
        If ListNo4 < 0 Then
         key6 = "*"
        Else
         key6 = ComboBox7.List(ListNo4)
        End If

    Dim ListNo5 As Long
     ListNo5 = ComboBox8.ListIndex
     If ListNo5 < 0 Then
      key7 = "*"
     Else
      key7 = ComboBox8.List(ListNo5)
     End If

  If TextBox2.Value = "" Then key8 = "*" Else key8 = "*" & TextBox2.Value & "*"

  If TextBox3.Value = "" Then key9 = "*" Else key9 = "*" & TextBox3.Value & "*"

  If TextBox5.Value = "" Then key10 = "*" Else key10 = "*" & TextBox5.Value & "*"
  
With Worksheets("2019.4")
   LastRow = .Cells(Rows.Count, 2).End(xlUp).Row  
  myData = .Range(.Cells(3, 1), .Cells(LastRow, 20)).Value 
 End With

ReDim myData2(1 To LastRow, 1 To 10)
For i = LBound(myData) To UBound(myData)  
 If myData(i, 2) Like key1 And myData(i, 3) Like key2 And myData(i, 5) Like key3 And myData(i, 9) _
 Like key4 And myData(i, 20) Like key5 And myData(i, 16) Like key6 And myData(i, 17) Like key7 _
And myData(i, 10) Like key8 And myData(i, 11) Like key9 And myData(i, 8) Like key10 Then
  cn = cn + 1                                   
  myData2(cn, 1) = myData(i, 2)
  myData2(cn, 2) = myData(i, 3)
  myData2(cn, 3) = myData(i, 5)
  myData2(cn, 4) = myData(i, 9)
  myData2(cn, 5) = myData(i, 20)
  myData2(cn, 6) = myData(i, 16)
  myData2(cn, 7) = myData(i, 17)
  myData2(cn, 8) = myData(i, 10)
  myData2(cn, 9) = myData(i, 11)
  myData2(cn, 10) = myData(i, 8)
 End If
Next i

 With ListBox1
  .ColumnCount = 10  
  .ColumnWidths = "45;40;65;20;20;60;60;60;60;20"
  .List = myData2  
 End With
TextBox7.Value = Worksheets("2019.4").Cells(Rows.Count, 2).End(xlUp).Row - 2
End Sub
‘------------------------------------------------------------------------------------------------------
Private Sub CommandButton2_Click()
ComboBox1 = ""
ComboBox2 = ""
ComboBox3 = ""
ComboBox4 = ""
ComboBox5 = ""
ComboBox6 = ""
ComboBox7 = ""
ComboBox8 = ""
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox5 = ""
TextBox6 = ""
ListBox1.Clear

Worksheets("2019.4").Activate  
End Sub
‘-----------------------------------------------------------------------------------------------------
Private Sub CommandButton3_Click()
Dim myFld, myCri
Dim myRow4 As String
Dim Sh2 As Worksheet, Sh3 As Worksheet

 Set Sh2 = Worksheets("2019.4")
 Set Sh3 = Worksheets("Sheet3")
 
  myFld = 2
 
  myCri = UserForm2.ListBox1.Value
 
   With Sh2
  .Range("A1").AutoFilter Field:=myFld, Criteria1:=myCri 
   myRow4 = .Range("A" & Rows.Count).End(xlUp).Row
  
     Sh3.Range("A:T").ClearContents
   
    .Range("A1:T" & myRow4).Copy Sh3.Range("A1")
   
   TextBox6.Value = Worksheets("sheet3").Cells(Rows.Count, 2).End(xlUp).Row - 2     
   .Range("A1").AutoFilter
  End With
 
 Sh3.Activate  
 Range("A1").Select

End Sub
‘--------------------------------------------------------------------------------------------------
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
With Worksheets("2019.4")
  .Range(.Cells(ListBox1.List(ListBox1.ListIndex, 0) + 2, 2), .Cells(ListBox1.List(ListBox1.ListIndex, 0) + 2, 20)).Select
End With
End Sub
‘----------------------------------------------------------------------------------------------------
Private Sub userform2_initialize()

Dim LastRow As Long
Dim myData, mayData2(), myno
Dim i As Long, j As Long, cn As Long

 With Worksheets("2019.4")
   LastRow = .Cells(Rows.Count, 2).End(xlUp).Row 
  myData = .Range(.Cells(3, 1), .Cells(LastRow, 20)).Value 
End With

ReDim myData2(1 To LastRow, 1 To 10)
 For i = LBound(myData) To UBound(myData) 
   myData2(i, 1) = myData(i, 2)
   myData2(i, 2) = myData(i, 3)
   myData2(i, 3) = myData(i, 5)
   myData2(i, 4) = myData(i, 9)
   myData2(i, 5) = myData(i, 20)
   myData2(i, 6) = myData(i, 16)
   myData2(i, 7) = myData(i, 17)
   myData2(i, 8) = myData(i, 10)
   myData2(i, 9) = myData(i, 11)
   myData2(i, 10) = myData(i, 8)
   
  Next i
 
 With ListBox1  
  .ColumnCount = 10  
  .ColumnWidths = "45;40;65;20;20;60;60;60;60;20"
  .List = myData2  
 End With

Dim lastRow2 As Long
Dim myData3

End Sub

【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:検索フォームの動作について
回答[NEW]  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:検索フォームの動作について
発言[NEW]  マナ  - 19/2/16(土) 9:24 -

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

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

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

 

【80448】Re:検索フォームの動作について
回答[NEW]  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:検索フォームの動作について
発言[NEW]  マナ  - 19/2/16(土) 19:35 -

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

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

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

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