Excel VBA質問箱 IV

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

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


16876 / 76732 ←次へ | 前へ→

【65319】テキストボックスが7つあり、それに入力して検索するとデータを抽出するには?
質問  ろんろん  - 10/5/11(火) 15:45 -

引用なし
パスワード
   はじめまして。テキストボックスから検索値を入力して、
抽出するようにしたいのですが、オブジェクトが必要ですとでて
フォームを表示することすら出来ません。
本に載っているデータを変えただけなのですが、うまくいきません。
大変長文で申し訳ないのですが、お教え頂けませんでしょうか?
よろしくお願いいたします。(2つのフォームが順番に出るようになっています。)
frm Main↓
Dim HyoujiSheetName As String  ' 表示するワークシートの名前
                ' "住所録"または"抽出結果"
Dim TourokuKensuu As Long    ' 住所録の登録件数


'
' [抽出条件を設定]ボタンがクリックされた場合の処理
'
Private Sub cmdSettei_Click()
' 作成した抽出条件設定用のフォームを表示
frmJyouken.Show vbModeless
End Sub


' スクロールバーのつまみの位置が変更された場合の処理
'
' ただし、つまみがドラッグされている場合はScrollイベントが発生し、
' ドラッグが終了した時点でChangeイベントが発生する
'
Private Sub srlMove_Change()

  ' スクロールバーが保持している表示データ番号(Valueプロパティ)の
  ' データをフォームに表示
  Hyouji HyoujiSheetName, srlMove.Value

  ' 何件目を表示しているかを更新
  lblHyoujiKensuu.Caption = srlMove.Value & "件目を表示中"
  
End Sub


'
' スクロールバーのつまみがドラッグされた場合の処理
'
' ドラッグを終了するとChangeイベントが発生する
'
Private Sub srlMove_Scroll()

  ' このマクロでは、Changeの場合と同じ処理を行っている
  ' 複雑な計算が含まれる場合や画像を表示する場合などは、
  ' Scrollイベントでは行わず、Changeイベントのみで
  ' 行うようにするとよい
  Hyouji HyoujiSheetName, srlMove.Value
  lblHyoujiKensuu.Caption = srlMove.Value & "件目を表示中"

End Sub


'
'[条件を満たすデータを抽出] ボタンがクリックされた場合の処理
'
Private Sub tglCyuusyutsu_Click()

  Dim Kensuu As Long
  
  ' [条件を満たすデータを抽出]ボタンが押し込まれた場合の処理
  '(抽出表示モードが設定された)
  ' ValueプロパティがTrueの場合は押し込まれた状態、
  ' Falseの場合は出っ張った状態
  If tglCyuusyutsu.Value = True Then
  
  ' 抽出プロシージャを呼び出し、抽出件数を変数に代入
  Kensuu = Cyuusyutsu()
  
  ' 抽出件数によって処理を変える
  
    If Kensuu = 0 Then
      
      ' 抽出されたデータがなかったので、メッセージを表示
      MsgBox "抽出条件を満たすデータは見つかりませんでした。"
      
      ' 抽出モードを強制的に解除
      tglCyuusyutsu.Value = False
      
      Exit Sub
      
    Else
    
      ' 抽出されたデータが1件以上ある場合、
      ' シート[抽出結果]を表示するワークシートにする
      ' シート[住所録]も[抽出結果]も同じように項目が配置された
      ' ワークシートなので、フォームとマクロは共通のままで
      ' 表示対象のワークシートを切り替える
      HyoujiSheetName = "抽出結果"
      
      ' シート[住所録]と[抽出結果]では、データの件数が異なるので
      ' 表示切り替え用のスクロールバーの値を設定し直す
      ScrollBarSet Kensuu
      
      ' シート[抽出結果]の1件目を表示する
      ' 件数から実際に表示する行番号への変換はHyoujiプロシージャ内で行う
      Hyouji HyoujiSheetName, 1
      
      ' シート[抽出結果]を表示する(確認用)
      Worksheets("抽出結果").Select
      Exit Sub
      
    End If
    
  End If
  
  '
  ' [条件を満たすデータを抽出]ボタンが出っ張った場合の処理
  '(抽出表示モードが解除された)
  '
  
  ' 表示対象をシート[住所録]に変更
  HyoujiSheetName = "住所録"
  
  ' 表示切り替え用のスクロールバーの値を設定
  ScrollBarSet TourokuKensuu
  
  ' シート[住所録]の1件目を表示
  Hyouji HyoujiSheetName, 1
  
  ' シート[住所録]を表示する(確認用)
  Worksheets("住所録").Select
  
End Sub


'
' ユーザーフォームの表示直前に行われる処理
'
Private Sub UserForm_Initialize()

  ' シート[住所録]に書き込まれているデータの件数をチェック
  
  
  HyoujiSheetName = "住所録"
  Hyouji HyoujiSheetName, 1
  ScrollBarSet TourokuKensuu
  cmdSettei.SetFocus
  
  ' 抽出条件を指定するフォームにあるコンボボックスに選択肢と
  ' あらかじめ選ばれている選択肢を指定
  ' frmJyoukenのUserForm_Initializeで行わないのは、
  ' 以前の検索状態を保持するため
  '
  frmJyouken.cmbTosyoJyouken.RowSource = "抽出条件!I3:I5"
  frmJyouken.cmbTosyoJyouken.ListIndex = 0
  
  frmJyouken.cmbTitleJyouken.RowSource = "抽出条件!I3:I5"
  frmJyouken.cmbTitleJyouken.ListIndex = 0
  
  frmJyouken.cmbTyosyaJyouken.RowSource = "抽出条件!I3:I5"
  frmJyouken.cmbTyosyaJyouken.ListIndex = 0
  
  frmJyouken.cmbSyuppansyaJyouken.RowSource = "抽出条件!I3:I5"
  frmJyouken.cmbSyuppansyaJyouken.ListIndex = 0
  
  frmJyouken.cmbBunyaJyouken.RowSource = "抽出条件!I3:I5"
  frmJyouken.cmbBunyaJyouken.ListIndex = 0
  
  frmJyouken.cmbBunruiJyouken.RowSource = "抽出条件!I3:I5"
  frmJyouken.cmbBunruiJyouken.ListIndex = 0
  
  frmJyouken.cmbTanabanJyouken.RowSource = "抽出条件!I3:I5"
  frmJyouken.cmbTanabanJyouken.ListIndex = 0
  
End Sub


'
' マクロの終了処理
'
'
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

  ' frmJyoukenは隠したままで閉じていないため、Endステートメントで
  ' 表示されているすべてのユーザーフォームを閉じる
  ' Unload frmJyouken と記述してもよい
  
  End
  
End Sub


'
' 引数で指定されたワークシートに何件のデータが登録されているかを
' 返すFunctionプロシージャ
'
'  引 数:SheetName(String型)    データ数を調べたいワークシートの名前
'  戻り値:MaxTourokuKensuu(Long型) データの件数
'
Function MaxTourokuKensuu(SheetName As String) As Long

  Dim Gyou As Long
  
  Gyou = Worksheets(SheetName).Cells(1, 1).End(xlDown).Row
  
  If Gyou = 65536 Then
    MaxTourokuKensuu = 0
  Else
    MaxTourokuKensuu = Gyou - 1
  End If
  
End Function


'
' 引数で指定されたワークシートにあるデータ番号(TourokuNo)のデータを
' 読み込み、ユーザーフォームに表示する
'
'  引 数:SheetName(String型)  ワークシートの名前
'      TourokuNo(Long型)   表示するデータ番号
'                  ※行番号ではないことに注意
'
Sub Hyouji(SheetName As String, TourokuNo As Long)

  ' 変数を介さずコントロールに直接セルの値を代入
  ' TourokuNo + 1は、データ番号から行番号に変換している
  txtTosyo.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 1).Text
  ' 各コントロールにセルから読み込んだ値を代入
  txtTitle.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 2).Text
  txtTyosya.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 3).Text
  txtSyuppansya.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 4).Text
  txtBunya.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 5).Text
  txtBunrui.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 6).Text
  txtTnanaban.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 7).Text
  
End Sub


'
' 条件を満たすデータをシート[抽出結果]にコピーし、抽出件数を返すFunctionプロシージャ
'
'  引 数:なし
'      ただしシート[抽出条件]のセルA1〜D2を参照する
'  戻り値:Cyuusyutsu(Long型) 抽出したデータの件数
'
Function Cyuusyutsu() As Long

  ' シート[抽出結果]をクリアする
  Worksheets("抽出結果").Range("A1:G65536").Clear

  ' Worksheets("〜").Range(Cells(y1,x1),Cells(y2,x2)).〜という記述は
  ' できないので、Worksheetsを選択する。以降、Worksheetsの選択が不要となり
  ' Range(Cells(y1,x1),Cells(y2,x2)).〜と記述できる
  Worksheets("住所録").Select
  
  ' AdvancedFilterは、指定した範囲内から抽出条件を満たすものを
  ' 指定範囲に抽出する
  Range(Cells(1, 1), Cells(TourokuKensuu + 1, 7)).AdvancedFilter _
    xlFilterCopy, _
    Worksheets("抽出条件").Range("A1:G2"), _
    Worksheets("抽出結果").Range("A1:G65536")
  
  '抽出したデータの件数を戻り値にする
  Cyuusyutsu = MaxTourokuKensuu("抽出結果")

End Function


' 表示切り替え用のスクロールバーにデータの最小件数(1)、最大件数
' などを設定する
'
'  引 数:MaxKensuu(Long型) データの最大件数
'
Sub ScrollBarSet(MaxKensuu As Long)

  ' スクロールバーの最大値はデータの最大件数に連動する
  srlMove.Max = MaxKensuu
  
  ' 最小値は常に1
  srlMove.Min = 1
  
  ' Valueプロパティはつまみの位置によって変わる
  ' 現在の表示データはこの値を使用する
  srlMove.Value = 1
  
  ' ProportionalThumb = Trueとすると、データの件数によってつまみの
  ' 大きさが変化する。Falseにすると、つまみの大きさは固定となる
  srlMove.ProportionalThumb = True
  
  ' 左右の三角ボタンなどをクリックすると、Valueプロパティの値を
  ' いくつずつ増減するかを指定する
  srlMove.SmallChange = 1
  srlMove.LargeChange = CLng((srlMove.Max - srlMove.Min) / 10) + 1
  
  ' ラベルに最大件数と現在の表示データの位置を表示
  lblMaxKensuu.Caption = MaxKensuu & "件"
  lblHyoujiKensuu.Caption = srlMove.Value & "件目を表示中"
  
End Sub

0 hits

【65319】テキストボックスが7つあり、それに入力して検索するとデータを抽出するに... ろんろん 10/5/11(火) 15:45 質問
【65320】Re:テキストボックスが7つあり、それに入力... ろんろん 10/5/11(火) 15:49 質問
【65322】Re:テキストボックスが7つあり、それに入力... Jaka 10/5/11(火) 17:17 発言
【65329】Re:テキストボックスが7つあり、それに入力... ろんろん 10/5/12(水) 11:49 質問
【65330】Re:テキストボックスが7つあり、それに入力... Jaka 10/5/12(水) 15:16 発言
【65339】Re:テキストボックスが7つあり、それに入力... ろんろん 10/5/13(木) 10:41 お礼
【65331】Re:テキストボックスが7つあり、それに入力... teian 10/5/12(水) 16:03 発言
【65340】Re:テキストボックスが7つあり、それに入力... ろんろん 10/5/13(木) 10:45 お礼
【65401】Re:テキストボックスが8つになったのですが ろんろん 10/5/18(火) 15:28 質問
【65404】Re:テキストボックスが8つになったのですが Jaka 10/5/18(火) 17:03 発言
【65406】Re:テキストボックスが8つになったのですが ろんろん 10/5/18(火) 17:12 お礼

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