過去ログ

                                Page     650
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼AdvancedFilterについて  123 03/1/28(火) 16:49
   ┗Re:AdvancedFilterについて  ichinose 03/1/29(水) 17:59
      ┗Re:AdvancedFilterについて  123 03/1/30(木) 15:07
         ┗Re:AdvancedFilterについて  ichinose 03/1/30(木) 19:27
            ┗Re:AdvancedFilterについて  123 03/1/31(金) 9:58

 ───────────────────────────────────────
 ■題名 : AdvancedFilterについて
 ■名前 : 123
 ■日付 : 03/1/28(火) 16:49
 -------------------------------------------------------------------------
   みなさんこんにちは

久々に質問させていただきます。

現在、大量のデータを管理しています(個人データ)
人の異動に関するデータなので、同じ人が何回も出てきます。
そこで、AdvancedFilterを使って検索したいと思っています。
検索結果はリストボックスに表示させます。
っと ここまではできたのですが、
リストボックスに表示させた同じ人のデータの中から
ひとつを選んで(ダブルクリック)、そのデータのA列を
Activeにしたいのですが、AdvancedFilterで抽出したものを
使って上記のことは可能でしょうか。

ちなみにコードは

Private Sub B_検索_Click()

Application.ScreenUpdating = False
With Worksheets("Sheet1")
.Range("A2").Value = "*" & 検索番号.Value & "*"
.Range("B2").Value = "*" & 検索氏名.Value & "*"
End With

Worksheets("異動簿").Columns("B:C").AdvancedFilter _
  CriteriaRange:=Worksheets("Sheet1").Range("A1:B2"), _
  Action:=xlFilterCopy, _
  CopyToRange:=Worksheets("Sheet1").Columns("F:G"), _
  Unique:=False
  
Show_リスト

Application.ScreenUpdating = True

End Sub

--------------------------Module1

Sub Show_リスト()

With ThisWorkbook.Worksheets("Sheet1")

UserForm1.検索結果リスト.RowSource = "[異動簿.xls]Sheet1!F2:G" _
& CStr(.Range("G1").CurrentRegion.Rows.Count)

End With


End Sub

やっぱり、データシート上で、オートフィルターを使うほうが
いいのでしょうかねぇ
 ───────────────────────────────────────  ■題名 : Re:AdvancedFilterについて  ■名前 : ichinose  ■日付 : 03/1/29(水) 17:59  -------------------------------------------------------------------------
   ▼123 さん:
こんにちは。

>
>久々に質問させていただきます。
>
>現在、大量のデータを管理しています(個人データ)
>人の異動に関するデータなので、同じ人が何回も出てきます。
>そこで、AdvancedFilterを使って検索したいと思っています。
>検索結果はリストボックスに表示させます。
>っと ここまではできたのですが、
>リストボックスに表示させた同じ人のデータの中から
>ひとつを選んで(ダブルクリック)、そのデータのA列を
>Activeにしたいのですが、AdvancedFilterで抽出したものを
>使って上記のことは可能でしょうか。

マスターデータであるシート「異動簿」の各行にその行番号が入っていれば
この処理できますよね。元々のマスターに可能なら追加してもいいでしょうね。
以下のコードは、シート「異動簿」の例ではB列、C列が使用されていますから、D列をワークとして使いました。
'============================================================
Private Sub B_検索_Click()
Application.ScreenUpdating = False
With Worksheets("Sheet2")
.Range("A2").Value = "*" & 検索番号.Value & "*"
.Range("B2").Value = "*" & 検索氏名.Value & "*"
.Range("f:h").ClearContents
'コピーエリアをクリア
End With
With Worksheets("異動簿")
 .Range("d:d").Formula = "=row()"
 .Range("d:d") = .Range("d:d").Value
 .Range("d1").Value = "行"
' ワーク列D列に行を設定
 .Range("b:d").AdvancedFilter _
  CriteriaRange:=Worksheets("Sheet2").Range("A1:B2"), _
  Action:=xlFilterCopy, _
  CopyToRange:=Worksheets("Sheet2").Range("F1"), _
  Unique:=False
 .Range("d:d").ClearContents
 End With
Show_リスト

Application.ScreenUpdating = True

End Sub
'===============================================================
Sub Show_リスト()
Dim d_num As Long
With ThisWorkbook.Worksheets("Sheet2")
 検索結果リスト.RowSource = ""
 d_num = WorksheetFunction.CountA(.Range("f:f"))
 If d_num > 1 Then  '検索データが存在したら
   検索結果リスト.RowSource = "Sheet2!F2:G" & CStr(d_num)
   End If
End With
End Sub
'==================================================================
Private Sub 検索結果リスト_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  With 検索結果リスト
   aRow = Worksheets("sheet2").Cells(.ListIndex + 2, 8)
   Worksheets("異動簿").Activate
   Worksheets("異動簿").Cells(aRow, 2).Select
   End With
End Sub

リストボックスをダブルクリックで異動簿の当該セルを選択するようにしました。
確認してください。
 ───────────────────────────────────────  ■題名 : Re:AdvancedFilterについて  ■名前 : 123  ■日付 : 03/1/30(木) 15:07  -------------------------------------------------------------------------
   ▼ichinose さん:
こんにちは。

いつもお世話になっております。
今回もありがとうございました。

実は、D列は使われていて、列の順番を変えることができないのです。
ichinoseさんのコードでDまたはA列を
WORKに使って(対象Rangeを連続列にして)やると、完璧でした。

しかし、異動簿に予備行は「U列」以降なのです。
そこで、
> .Range("B:C,U").AdvancedFilter _
または
> .Range("B:C","U").AdvancedFilter
のように指定してみましたが、だめでした。

このような、飛んでる列を指定するにはどのようにしたらよいでしょうか。
ご存知でしたら教えてください。
 ───────────────────────────────────────  ■題名 : Re:AdvancedFilterについて  ■名前 : ichinose  ■日付 : 03/1/30(木) 19:27  -------------------------------------------------------------------------
   ▼123 さん:
こんにちは。

>実は、D列は使われていて、列の順番を変えることができないのです。
列の順番は、変えなくてもいいんですが・・・。

>しかし、異動簿に予備行は「U列」以降なのです。
>そこで、
>> .Range("B:C,U").AdvancedFilter _
>または
>> .Range("B:C","U").AdvancedFilter
>のように指定してみましたが、だめでした。
>
>このような、飛んでる列を指定するにはどのようにしたらよいでしょうか。
>ご存知でしたら教えてください。
私なら、シートSheet2にそっくり(B列からU列までの条件合致データ)コピーしてしまいますが(コードは簡単そうだから)・・・。
B列、C列、U列のみをSheet2にコピーするようしました。
'===========================================================
Private Sub B_検索_Click()
Dim rng As Range
Dim rng1 As Range
Application.ScreenUpdating = False
With Worksheets("Sheet2")
.Range("A2").Value = "*" & 検索番号.Value & "*"
.Range("B2").Value = "*" & 検索氏名.Value & "*"
.Range("f:h").ClearContents
End With
With Worksheets("異動簿")
 .Range("u:u").Formula = "=row()"
 .Range("u:u") = .Range("u:u").Value
 .Range("u1").Value = "行"
 .Range("b:c").AdvancedFilter _
  CriteriaRange:=Worksheets("Sheet2").Range("A1:B2"), _
  Action:=xlFilterInPlace, _
  Unique:=False
 Set rng = .Range("b:b").SpecialCells(xlCellTypeVisible)
 Set rng = Union(rng, rng.Offset(0, 1), rng.Offset(0, 19))
 rng.Copy Worksheets("Sheet2").Range("F1")
 .ShowAllData
 DoEvents
 .Range("u:u").ClearContents
 .Range("b1").Select
 End With
Show_リスト
Application.ScreenUpdating = True
End Sub

フィルタ結果を別コードでSheet2にコピーしています。
 ───────────────────────────────────────  ■題名 : Re:AdvancedFilterについて  ■名前 : 123  ■日付 : 03/1/31(金) 9:58  -------------------------------------------------------------------------
   ▼ichinose さん:
こんにちは。

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

Set rng = Union(rng, rng.Offset(0, 1), rng.Offset(0, 19))

Unionというのは初めて見ました。

それに、それぞれのデータに(列)番号を振るという発想は私には
でてきませんでした。

また、Unionのほかにも
 Formula = "=row()"
 Action:=xlFilterInPlace
 SpecialCells(xlCellTypeVisible)
 DoEvents
などなど、知らないコードが続出です。

ichinoseさんは、これらのものを どこから仕入れるのですか?
(私の持っている数冊の参考資料では載っていません)
よろしければ、ichinoseさんの知識の入手方法を教えて
いただけますでしょうか。

なにはともあれ、毎度毎度、助かります。
本当にありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 650