アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのオートフィルタ機能について、フィルタの要素を配列を用いて指定、適用させようとしているのですが、うまく適用されません。
古いバージョンだとこれでいけたのですが、現在の環境(表題のとおりExcel2016)だと配列の最終要素のみでフィルタリングされたような状態になってしまいます。私の記述に誤りがあるのか、Excelのバージョンアップに伴って不可になったかが分からず質問する次第です。

プロシージャは以下の通りです。なお、動作範囲はActivesheet(sheets(1))のみです。

Sub Macro1()

Dim trng As Range, frng As Range, i As Long
ReDim mx(0) As Variant

Set frng = Sheets(1).Range("A1").CurrentRegion       '適用範囲
Set trng = frng.Resize(frng.Rows.Count - 1, 1).Offset(1, 0)  'フィルタ対象列
frng.Cells(1, 1).AutoFilter                  '適用前に一度フィルタ解除

For i = 0 To trng.Rows.Count - 1
ReDim Preserve mx(0 To i)
mx(i) = trng.Cells(i + 1, 1)
'Debug.Print "・", mx(i)
Next i

frng.AutoFilter Field:=1, Criteria1:=mx

End Sub

本来はfor文の後ろで配列の要素を要不要に応じて修正してから適用するつもりだったのですが、テストランで上記を実行すると配列の最終要素(上記の場合A列の行の値)のみのフィルタがかかってしまいます。なお、配列に格納しているtrngの値はすべて数値です。

以上、ご教示いただけると助かります。よろしくお願いいたします。

A 回答 (1件)

こんばんは。



コードをみると2つ問題点がありますね。

格納しているのが数値だそうですが、索は文字列ですから、文字列に変えなくてはいけません。
だから、
>mx(i) = trng.Cells(i + 1, 1)
   ↓
mx(i) = CStr(trng.Cells(i + 1, 1))

>frng.AutoFilter Field:=1, Criteria1:=mx
    ↓
rng.AutoFilter Field:=1, Criteria1:=mx, _
Operator:=xlFilterValues ' ←これを加える

これで試してみてください。
    • good
    • 5
この回答へのお礼

助かりました

ありがとうございます。お陰様で解決できそうです。
なるほど、つまり配列変数(Variant型)であっても要素に格納する時には文字列に変換しておく必要があるのですね。Excelのバージョンのせいと疑った自分が恥ずかしい…
とても助かりました。どうもありがとうございます。

お礼日時:2019/02/19 11:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A