- ベストアンサー
マクロでオートフィルタ後の値の参照に関する悩み
- マクロ内でオートフィルタを使用してデータ表から必要な値を抽出したいです。特定の列に検索条件を指定し、オートフィルタを実行すると、抽出した値をマクロ内で参照することができます。
- 例えば、A列、B列、C列に検索条件を指定し、オートフィルタを実行すると、抽出した値はD列に表示されます。抽出した値をマクロ内に戻すには、D列のセルを参照すれば良く、適切な構文で記述すれば実現できます。
- ただし、D列のセルの位置は抽出条件によって変わる可能性があります。そのため、セルの位置を動的に参照するようなマクロの記述が必要になります。また、抽出後のD列のデータ数は常に2つとなるため、この点も考慮してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 マクロ内に戻したいという意味が分かりにくいです。「マクロ」というのを、コードに戻すとしても、意味が通りませんので、単なる抽出に留めます。 '// Sub TestMacro1() Dim rng As Range Dim c As Range, i As Long Dim Ar(1) As Double With ActiveSheet If .AutoFilterMode Then Set rng = .AutoFilter.Range 'タイトル行を含めない場合は、On Error Resume Next が必要 With rng.Columns("D").SpecialCells(xlCellTypeVisible) For Each c In .Cells If IsNumeric(c) Then Ar(i) = c.Value i = i + 1 If i > 1 Then Exit For End If Next c End With End If End With MsgBox Ar(0) & "," & Ar(1) End Sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>抽出後のD列のデーター数は、常に2つです。 sub macro1() dim h as range dim c as long dim ans(1 to 2) if not activesheet.filtermode then exit sub for each h in range("D2:D" & range("D65536").end(xlup).row).specialcells(xlcelltypevisible) c = c + 1 msgbox h.value if c < 3 then ans(c) = h.value end if next end sub >マクロに戻したい 「何をしたい(どういう結果を得たい,あるいは「戻し」たあと具体的にどう使いたい)」のか,少々イミフメイです。
お礼
ありがとうございます。参考にさせて頂き、やりたかった事ができるようになりました。