|
▼トホホ さん:
>●抽出キーのあるフィールドは常に○列目とは限りません。
>●また、分類も今回の例の様に毎回LLLとMMMとSSSとは
>限りません。
>↓の様に書いてみたのですが、問題があります。
>1.毎回抽出キーが違うので替わるたびにシート名もマクロの中で
>書き換える必要がある。商品分類の数は数十種類。
キーの位置、分類の文字列も不定となると抽出したいモノは
どこかに羅列(セルでもコード内でもいいですけど)する必要があります。
>2.あらかじめ、商品分類の名前でシートを用意しておくのが手間。
これは、マクロでやれば良いですね。
Sheet名にできない文字列がきたときにどうするのか? とか
今回抽出条件に当てはまってないSheetはどうするのか?(古いデータのまま?) とか
というのは別に考えておく必要があると思います。
>3.下の記述を見ても分かるが、同じような記述を繰り返しているが
>もっとスマートにしたい。
こちらは引数で渡して処理するようにすれば良いです。
mainのところにズラズラと羅列する形になります。
Option Explicit
Sub main()
抽出 "LLL", 4
抽出 "MMM", 4
'・・・・
'・・・・
End Sub
'分類=分類を文字列で指定。項目=列番号を数字で指定
Private Sub 抽出(分類 As String, 項目 As Integer)
Dim Org_Sh As Worksheet '元Sheet
Dim Des_Sh As Worksheet '先Sheet
'元SheetをSet
Set Org_Sh = Worksheets("受注DB")
'先SheetをSet なければ作成。
On Error Resume Next
Set Des_Sh = Worksheets(分類)
On Error GoTo 0
If Des_Sh Is Nothing Then
Set Des_Sh = Worksheets.Add(After:=Worksheets(Worksheets.Count))
Des_Sh.Name = 分類
Else
Des_Sh.Cells.Clear
End If
'AutoFilterでコピー
With Org_Sh.Range("A1")
.AutoFilter Field:=項目, Criteria1:=分類
.CurrentRegion.SpecialCells(xlVisible).Copy Des_Sh.Range("A1")
.AutoFilter
End With
Set Org_Sh = Nothing
Set Des_Sh = Nothing
End Sub
|
|