質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

1回答

4428閲覧

VBA フィルターによる絞り込みがうまくいきません。

tttkkk

総合スコア38

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2021/01/23 06:18

VBAで AutoFilter による絞り込みを行いたいのですが、絞り込みが上手くできませんでした。

sheet6にidの一覧があり、sheet7にidの下4桁を入力することで、sheet6のid一覧を AutoFilter で絞り込みしたいのですが、全て隠れてしまいました。
sheet6 および sheet7 の画像を載せさせて頂きましたので、参考にして頂けますと幸いです。

sheet7の入力に関しては下4桁のみを入力するだけにしたく、その下4桁というのを分かりやすくするために、表示をあえて 文字列 にしております。(0003 と入力して、3 ではなく、0003 と表示させたいため。)
そのため、はじめは文字列という表示が絞り込みが上手くいかない原因かと思ったのですが、sheet6, sheet7の表示をどちらとも数値にしても一覧のidすべてが隠されてしまいました。

以下に私のコードを記載いたします。

VBA

1Sub filterId() 2 3Dim scriningId() As Long, endRow As Long, id As Variant, m As Long 4ReDim scriningId(0) 5'下4桁のidが打ち込まれた部分を選択。 6endRow = Sheet7.Cells(rows.Count, 1).End(xlup).Row 7Sheet7.Range(Cells(2, 1), Cells(endRow, 1)).Select 8'選択部分をfor eachで配列に格納。 9For Each id In Selection 10 m = UBound(scriningId) + 1 11 ReDim Preserve scriningId(m) 12 scriningId(m) = id + 10000000 13Next id 14 15Sheet6.Cells(1, 1).AutoFilter 1, scriningId, xlFilterValues 16Sheet6.Select 17 18End Sub

以上となります。
問題点を教えて頂けないでしょうか。
宜しくお願い致します。

イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

フィルタ対象(scriningId)は文字列の配列として扱う必要があるようです。
(Sheet6でidの列が数値型であっても同様)

検証環境:
Windows 10
Excel 2016

diff

1Sub filterId() 2-Dim scriningId() As Long, endRow As Long, id As Variant, m As Long 'Longだとうまくフィルターされない 3+Dim scriningId() As String, endRow As Long, id As Variant, m As Long 4ReDim scriningId(0) 5 6+'Rangeエラー回避のためSheet7をactivate 7+Sheet7.Activate 8 9'下4桁のidが打ち込まれた部分を選択。 10endRow = Sheet7.Cells(Rows.Count, 1).End(xlUp).Row 11 12Sheet7.Range(Cells(2, 1), Cells(endRow, 1)).Select 13'選択部分をfor eachで配列に格納。 14For Each id In Selection 15 m = UBound(scriningId) + 1 16 ReDim Preserve scriningId(m) 17- scriningId(m) = id + 10000000 18+ scriningId(m) = "1000" & CStr(id) 19 20Next id 21 22 23Sheet6.Cells(2, 1).AutoFilter 1, scriningId, xlFilterValues 24Sheet6.Select 25 26End Sub 27

投稿2021/01/23 06:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tttkkk

2021/01/23 11:12

フィルタ対象はstring型でないといけないんですね…。 そんなことは全く知りませんでした。 教えて頂きありがとうございます。 また、修正して頂いたコードも +,- の記号と色分けで非常に見やすく、とても勉強になりました。 ご丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問