|
▼たえりか さん:
>▼kanabun さん:
>早速のご回答ありがとうございました。
>確かに教えていただいたとおりにしたら質問したことができました!
>
>教えていただいたコードでマクロを実行するとE2には"リンゴ"と入力されます。
>たとえばE2を入力規則でドロップダウンリストにして、"リンゴ"から"みかん"あるいは"バナナ"に変えたとき、F列とG列も変わるようにできないでしょうか?
そのばあいは、マクロを標準モジュールにではなく、
対象ワークシートモジュールに書きます。
[E2] に {リンゴ,みかん,バナナ} の入力規則を設定しておき、
そのシートのモジュールに こんな感じです。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) <> "E2" Then Exit Sub
Application.EnableEvents = False '-----------(1)
Range("B1:C1").Copy Range("F1") '-----------(2)
Range("A1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("E1:E2"), _
CopyToRange:=Range("F1:G1") '------- (3)
Application.EnableEvents = True '------- (4)
End Sub
(1) セルを書き換えますので、Changeイベントがまた起きます。
そうすると また Worksheet_Change イベントが起き、イベントの
連鎖が発生し、困ったことになりますので、これ以後、セルを書き換えても
Changeイベントは発生しなかったことにします。
(2) [B1:C1]の列見出しを [[F1:G1](出力列)にコピーします。
[C1] が「数量」なら、[G1]も「数量」に変わります。
(3) フィルタオプションを実行します。
条件範囲[E1:E2]
抽出先 [F1:G1]
(4) 抽出転記が終われば、次のセル変化に対応するために、
EnableEventsプロパティを 「有効」に戻しておきます。
>また、少し話がそれて恐縮ですがC列がコードではなく、個数などの数値データだとして、
>G列を基準として降順でF列とG列が自動で並べ替えられて表示される方法がありますでしょうか?
そうするには、さっきのコードの (3) のあとに 追加します。
Application.EnableEvents = False
Range("B1:C1").Copy Range("F1")
Range("A1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("E1:E2"), _
CopyToRange:=Range("F1:G1")
'------------------------------------------------------- ここから
Dim r As Range
Set r = Range("F1", Cells(Rows.Count, "F").End(xlUp)) _
.Resize(, 2)
If r.Rows.Count > 2 Then
r.Sort Key1:=r.Columns(2), Header:=xlYes
End If
'------------------------------------------------------- ここまで
Application.EnableEvents = True
|
|