0

データベースとしてまとめたテーブルがあります。テーブルのシステムサイズ列を検索して「2500」を見つけ、次に標準列を検索して「標準」を見つけ、次にカテゴリ列を検索して「FL」を見つけるマクロを作成しようとしています。これらの値が見つかった行に関連する項目列を別のシートで選択します。たとえば、マクロは列 E (システム サイズ) ですべての "2500" を検索し、次に列 F (標準) ですべての "標準" を検索し、次に列 G (カテゴリー) ですべての "FL" を検索します。次に、これらの要件を満たすすべての行の C 列 (アイテムの選択) から値をコピーし、別のシートに貼り付けます。以下は私がこれまでに持っているコードですが、列全体ではなく1つのセルしか検索できません。

Sub ImDoingMyBest()
'
' ImDoingMyBest Macro
'

'
    If Sheets("Database").Range("E2").Value Like "*2500*" Then
    Sheets("Database").Range("C2").Copy
    Sheets("Quote Sheet").Select
    Range("B26").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
End If
End Sub
4

2 に答える 2

0

Siddarth Rout のコメントに続いて、次のコードは Autofilter を使用して、基準を満たす "Database" シートの行を分離し、列 C の対応する値を "Quote Sheet" という名前のシートのセル B26 で始まる範囲にコピーします。 "。

Sub FilterAndCopy()

    Dim dataWs As Worksheet
    Dim copyWs As Worksheet
    Dim totRows As Long
    Dim lastRow As Long

    Set dataWs = Worksheets("Database")
    Set copyWs = Worksheets("Quote Sheet")

    With dataWs
        .AutoFilterMode = False
        With .Range("C:G")
             .AutoFilter Field:=3, Criteria1:="2500"
             .AutoFilter Field:=4, Criteria1:="Standard"
             .AutoFilter Field:=5, Criteria1:="FL"
        End With
    End With

    totRows = dataWs.Range("C:C").Rows.count
    lastRow = dataWs.Range("C" & totRows).End(xlUp).Row
    dataWs.Range("C2:C" & lastRow).Copy
    copyWs.Range("B26").PasteSpecial Paste:=xlPasteValues
    dataWs.AutoFilterMode = False

End Sub
于 2013-02-17T05:29:59.563 に答える
0

列全体を検索する方法は、for ループを使用することです。例えば:

For i  = 1 To 10000

    If Sheets("Database").Range("E" & i).Value Like "*2500*" Then

        Sheets("Database").Range("C" & i).Copy
        ...
        ...

    End If

Next i

代わりに (そして私の好み) 、Range ではなくCells( row , column ) 形式を使用します。これにより、Range 参照を連結する必要がなくなります。これには時間がかかります

Range("E" & i)

そしてに変更

Cells(i, 5)

これはきちんとしたコード (IMO) です。

于 2013-02-15T17:58:25.597 に答える