Excel VBA質問箱 IV

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

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


2893 / 13644 ツリー ←次へ | 前へ→

【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 お礼[未読]

【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

【65320】Re:テキストボックスが7つあり、それに入...
質問  ろんろん  - 10/5/11(火) 15:49 -

引用なし
パスワード
   長いので2つに分けさせて頂きます。
本当に申し訳ございません。

frm Jyouken↓

'
'[キャンセル]ボタンがクリックされたときの処理
'
Private Sub cmdCancel_Click()

  ' 条件などを変更せずにユーザーフォームを隠す
  frmJyouken.Hide
  
End Sub


'
'[決定]ボタンがクリックされた場合の処理
'
Private Sub cmdKettei_Click()

  Dim Message As String
  Dim Seibetsu As String
  Dim MetaAddStr As String
  
  ' frmMainのラベルに表示する抽出条件のメッセージを作る
  Message = "抽出条件:"
  
  ' シート[抽出条件]の条件を記入するセルをクリア(空)にする
  Worksheets("抽出条件").Range("A2:G2").Clear
  
  ' 図書番号を抽出条件にした場合
  If chkTosyo.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtTosyo.Text)
    
    ' シート[抽出条件]のセルA2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "A2", MetaAddStr, cmbTosyoJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "図書番号に" & Chr(34) & txtTosyo & Chr(34) & "という" & cmbTosyoJyouken.Text
    
  End If
  
  ' タイトルを抽出条件にした場合
  If chkTitle.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtTitle.Text)
    
    ' シート[抽出条件]のセルB2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "B2", MetaAddStr, cmbTitleJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "タイトルに" & Chr(34) & txtTitle & Chr(34) & "という" & cmbTitleJyouken.Text
    
  End If
  
  ' 著者を抽出条件にした場合
  If chkTyosya.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtTyosya.Text)
    
    ' シート[抽出条件]のセルC2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "C2", MetaAddStr, cmbTyosyaJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "著者に" & Chr(34) & txtTyosya & Chr(34) & "という" & cmbTyosyaJyouken.Text
    
  End If
  
  ' 出版社を抽出条件にした場合
  If chkSyuppansya.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtSyuppansya.Text)
    
    ' シート[抽出条件]のセルD2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "D2", MetaAddStr, cmbSyuppansyaJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "出版社に" & Chr(34) & txtSyuppansya & Chr(34) & "という" & cmbSyuppansyaJyouken.Text
    
  End If
  
  ' 分野を抽出条件にした場合
  If chkBunya.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtBunya.Text)
    
    ' シート[抽出条件]のセルE2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "E2", MetaAddStr, cmbBunyaJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "分野に" & Chr(34) & txtBunya & Chr(34) & "という" & cmbBunyaJyouken.Text
    
  End If
  
  ' 分類を抽出条件にした場合
  If chkBunrui.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtBunrui.Text)
    
    ' シート[抽出条件]のセルF2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "F2", MetaAddStr, cmbBunruiJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "分類に" & Chr(34) & txtBunrui & Chr(34) & "という" & cmbBunruiJyouken.Text
    
  End If
  
  ' 棚番を抽出条件にした場合
  If chkTanaban.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtTanaban.Text)
    
    ' シート[抽出条件]のセルG2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "G2", MetaAddStr, cmbTanabanJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "棚番に" & Chr(34) & txtTanaban & Chr(34) & "という" & cmbTanabanJyouken.Text
    
  End If
  ' メッセージができあがった時点で、frmMainのlblJyoukenに表示する
  frmMain.lblJyouken.Caption = Message
  
  ' 抽出条件が変更された場合、抽出表示モードを解除
  frmMain.tglCyuusyutsu.Value = False
  
  ' frmMainの[条件を満たすデータを抽出]ボタンにフォーカスを合わせる
  frmMain.tglCyuusyutsu.SetFocus
  
  ' 抽出条件を設定するユーザーフォームを隠す
  ' 隠しているだけなので、次回表示されたときは前回の設定値が保持されている
  frmJyouken.Hide
  
  ' シート[抽出条件]を表示する(確認用)
  Worksheets("抽出条件").Select
  
End Sub


Private Sub Label4_Click()

End Sub

' ユーザーフォームの閉じるボタンがクリックされたときの処理
'
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

  ' 閉じるボタンの操作で発生したイベントかどうかを調べる
  If CloseMode = vbFormControlMenu Then
    MsgBox ("[決定]か[キャンセル]ボタンをクリックしてください。")
    
    ' 引数Cancelに0以外(ここではTrue)を指定しプロシージャを
    ' 終了すると、ユーザーフォームを閉じる処理を無効化できる
    Cancel = True
    
  End If
  
End Sub


'
' 引数で指定された条件に従い、文字列の抽出条件式をシート[抽出条件]に書き込む
'
'  引 数:CellName(String型)  書き込むセル(A1形式であること)
'      StringValue(String型) 条件となる文字列
'      IndexNo(Integer型)   文字列の条件(シート[抽出条件]のIndexNoを参照)
'
Sub WriteJyoukenSheetString(CellName As String, StringValue As String, IndexNo As Integer)

  Dim SetStr As String
  
  ' 文字列系の条件の選択肢に応じて、抽出条件として指定する
  ' 文字列を作成する
  Select Case IndexNo
    Case 0       ' 文字列を含む
      SetStr = "*" & StringValue & "*"
      
    Case 1       ' 文字列から始まる
      SetStr = StringValue & "*"
      
    Case 2       ' 文字列と完全一致
      SetStr = StringValue
      
    Case Else
      MsgBox "コンボボックスで選ばれたListIndexの値が不正です。"
      Stop
      
  End Select
  
  ' ワークシートに条件式を書き込む
  Worksheets("抽出条件").Range(CellName).Value = SetStr
  
End Sub


' 検索用の文字として不適当なアスタリスク(*)と疑問符(?)が含まれる場合、
' メタキャラクタのチルダ(~)を付加するFunctionプロシージャ
'
'  引 数:SrcStr(String型)     検索用文字列
'  戻り値:MetaCharCheck(String型)  メタキャラクタを付加した検索文字列
'
Function MetaCharCheck(SrcStr As String) As String

  Dim i As Long
  Dim Moji As String
  Dim OutStr As String

  ' 空の文字列が指定された場合は何もせず空の文字列を返す
  If SrcStr = "" Then
    MetaCharCheck = ""
    Exit Function
  End If
  
  ' SrcStrの文字列中にアスタリスク(*)や疑問符(?)が含まれているか
  For i = 1 To Len(SrcStr)
    ' SrcStrを左から1文字ずつ取り出す
    Moji = Mid(SrcStr, i, 1)
    
    ' 取り出した文字がアスタリスク(*)または疑問符(?)ではないか
    If InStr("*?", Moji) <> 0 Then
      
      ' アスタリスク(*)や疑問符(?)の場合はメタキャラクタの
      ' チルダ(~)を付加する
      Moji = "~" & Moji
    
    End If
  
    ' 取り出した文字を1文字ずつ連結していく
    ' メタキャラクタを付加した場合は2文字追加となる
    OutStr = OutStr + Moji
  
  Next i
  
  ' 連結した文字列を戻り値とする
  MetaCharCheck = OutStr

End Function


↓標準モジュール

Sub シートからデータを抽出して表示()

  frmMain.Show vbModeless

End Sub

【65322】Re:テキストボックスが7つあり、それに入...
発言  Jaka  - 10/5/11(火) 17:17 -

引用なし
パスワード
   ほとんどコード内容を見てません。
手っ取り速く言うと、コードに書かれている、ボタンその他の
オブジェクト名と、実際にあるオブジェクト名が違うと言うところでしょうか。

>' ユーザーフォームの表示直前に行われる処理
>'
>Private Sub UserForm_Initialize()
>
>  ' シート[住所録]に書き込まれているデータの件数をチェック
>  
>  
>  HyoujiSheetName = "住所録" ← この行にブレークポイントを置いてから
                   フォームを起動し、F8でステップ実行して
                   みてください。
>  Hyouji HyoujiSheetName, 1
>  ScrollBarSet TourokuKensuu
>  cmdSettei.SetFocus
>  
>  ' 抽出条件を指定するフォームにあるコンボボックスに選択肢と
>  ' あらかじめ選ばれている選択肢を指定
>  ' frmJyoukenのUserForm_Initializeで行わないのは、
>  ' 以前の検索状態を保持するため
>  '
以下略

【65329】Re:テキストボックスが7つあり、それに入...
質問  ろんろん  - 10/5/12(水) 11:49 -

引用なし
パスワード
   Jaka様、お答え頂きありがとうございました。
試してみたのですが、結果オブジェクト名の名前が間違っていました。
txtTnanaban.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 7).Text
  ↑Tanaban

オブジェクト名のエラーは出なくなったのですが、
実行時エラー 1004 このコマンドには2行以上必要です。
選択したセルの範囲が1行だけの場合はこのコマンドを実行できません。
?フィルタオプションを使用している場合、2行以上のデータで構成されるセル範囲を選択し、「フィルタオプションの設定コマンドを再度クリックします。
?ピボットテーブルレポートまたはピボットグラフレポートを作成している場合は、セル参照を入力するか、または2行以上のデータで構成されるセル範囲を選択します。と出て、黄色くなったのが以下の部分です。

  Range(Cells(1, 1), Cells(TourokuKensuu + 1, 7)).AdvancedFilter _
    xlFilterCopy, _
    Worksheets("抽出条件").Range("A1:G2"), _
    Worksheets("抽出結果").Range("A1:G65536")

どうすれば動くようになるでしょうか?お手数ですが、よろしくお願いいたします。

【65330】Re:テキストボックスが7つあり、それに入...
発言  Jaka  - 10/5/12(水) 15:16 -

引用なし
パスワード
   私の方では、修飾語?を略すとコンパイルエラーで何も出来ませんでした。

Action:=
CriteriaRange:=
CopyToRange:=

また、
Worksheets("抽出結果").Range("A1:G65536") は、
Worksheets("抽出結果").Range("A1") で、良いのでは。

【65331】Re:テキストボックスが7つあり、それに入...
発言  teian  - 10/5/12(水) 16:03 -

引用なし
パスワード
   ▼ろんろん さん:
>実行時エラー 1004 このコマンドには2行以上必要です。
>選択したセルの範囲が1行だけの場合はこのコマンドを実行できません。
>?フィルタオプションを使用している場合、2行以上のデータで構成されるセル範囲を選択し、「フィルタオプションの設定コマンドを再度クリックします。
>?ピボットテーブルレポートまたはピボットグラフレポートを作成している場合は、セル参照を入力するか、または2行以上のデータで構成されるセル範囲を選択します。と出て、黄色くなったのが以下の部分です。
>
>  Range(Cells(1, 1), Cells(TourokuKensuu + 1, 7)).AdvancedFilter _
>    xlFilterCopy, _
>    Worksheets("抽出条件").Range("A1:G2"), _
>    Worksheets("抽出結果").Range("A1:G65536")
>
>どうすれば動くようになるでしょうか?お手数ですが、よろしくお願いいたします。

全体は見る気になれませんが、
まず、TourokuKensuuの値がいくつになっているか確認してはどうですか?
0になっていれば、Excelのそういう注意も分からなくはないです。
ヘッダー行のみの範囲をフィルター掛けるってことはないでしょうから。

【65339】Re:テキストボックスが7つあり、それに入...
お礼  ろんろん  - 10/5/13(木) 10:41 -

引用なし
パスワード
   Jakaさん、再度ご回答ありがとうございます。

やってみたのですが、Actionは入りませんでした。
実行してみても同じエラーが起きてしまいました。

ですので、本のコードと見比べてみましたら、良かれと思って
削除したコードを入れたら動きました。
どうやらtourokukensuuが0になってたのが原因みたいです。

何度もお答え頂き、本当にありがとうございました。

下記がそのコードです。
' シート[住所録]に書き込まれているデータの件数をチェック
  TourokuKensuu = MaxTourokuKensuu("住所録")
  
  ' あらかじめ住所録のデータが入力されていなければマクロが動かないことを通知する
  If TourokuKensuu = 0 Then
    MsgBox "最低1件の住所が登録されていなければ、このマクロは実行できません。"
    End
  End If
  

【65340】Re:テキストボックスが7つあり、それに入...
お礼  ろんろん  - 10/5/13(木) 10:45 -

引用なし
パスワード
   teianさん、お答え頂きありがとうございます。

おっしゃったとおり、tourokukensuuが0になってたのが原因みたいです。

ですので、本のコードと見比べてみたところ、
良かれと思って削除した部分を追加したら動きました。

本当にお答え頂き、ありがとうございました。

下記がそのコードです。

' シート[住所録]に書き込まれているデータの件数をチェック
  TourokuKensuu = MaxTourokuKensuu("住所録")
  
  ' あらかじめ住所録のデータが入力されていなければマクロが動かないことを通知する
  If TourokuKensuu = 0 Then
    MsgBox "最低1件の住所が登録されていなければ、このマクロは実行できません。"
    End
  End If
  

【65401】Re:テキストボックスが8つになったのです...
質問  ろんろん  - 10/5/18(火) 15:28 -

引用なし
パスワード
   度々失礼いたします。

図書番号を抜かないといけないものがあったため、プログラムが作動しなくなったので
一番左に通し番号を追加したところ、他と同じように設定したに関わらず、
検索条件は3つあります。文字列を含む、文字列から始まる、文字列と完全一致。
この内、文字列と完全一致と番号欄に関わらず、文字を入れたときだけ
検索で同じ文字と数字を入れた時にヒットします。

一体どうなっているのでしょうか?

ちなみに追加したコードは以下です。

jyoukenfrm
' 通し番号を抽出条件にした場合
  If chkTooshi.Value = True Then
  
    ' 検索文字として不適当な文字を変換する
    MetaAddStr = MetaCharCheck(txtTooshi.Text)
    
    ' シート[抽出条件]のセルA2に、選択肢の番号に従って
    ' 抽出条件を書き込む
    WriteJyoukenSheetString "A2", MetaAddStr, cmbTooshiJyouken.ListIndex
    
    ' frmMainに表示する抽出条件のメッセージを作成
    Message = Message & vbCrLf & "通し番号に" & Chr(34) & txtTooshi & Chr(34) & "という" & cmbTooshiJyouken.Text
    
  End If

Mainfrm
' 抽出条件を指定するフォームにあるコンボボックスに選択肢と
  ' あらかじめ選ばれている選択肢を指定
  ' frmJyoukenのUserForm_Initializeで行わないのは、
  ' 以前の検索状態を保持するため
  '
  frmJyouken.cmbTooshiJyouken.RowSource = "抽出条件!K3:K5"
  frmJyouken.cmbTooshiJyouken.ListIndex = 0

同じくMainfrm
txtTooshi.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 1).Text
↑後の分は一つずつずれてます。(2,3,・・・)というように

何度もお騒がせして大変申し訳ございませんが、
お答え頂けるとうれしいです。

【65404】Re:テキストボックスが8つになったのです...
発言  Jaka  - 10/5/18(火) 17:03 -

引用なし
パスワード
   F8キーでステップ実行するなりして、変数に何が入っているのか、
1つ1つ何をやっているのか、動作を確認された方がいいと思います。

【65406】Re:テキストボックスが8つになったのです...
お礼  ろんろん  - 10/5/18(火) 17:12 -

引用なし
パスワード
   Jakaさん、どうもありがとうございます。

ステップインでやってみようと思います。
ありがとうございました。

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