Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3806 / 13645 ツリー ←次へ | 前へ→

【60071】オートフィルタの開始列の取得 よっち 09/1/26(月) 18:45 質問[未読]
【60074】Re:オートフィルタの開始列の取得 横入り 09/1/26(月) 20:56 発言[未読]
【60094】Re:オートフィルタの開始列の取得 よっち 09/1/27(火) 11:35 回答[未読]
【60096】Re:オートフィルタの開始列の取得 Jaka 09/1/27(火) 12:39 発言[未読]
【60109】Re:オートフィルタの開始列の取得 横入り 09/1/27(火) 20:40 発言[未読]
【60077】Re:オートフィルタの開始列の取得 チェケラ 09/1/26(月) 22:01 発言[未読]

【60071】オートフィルタの開始列の取得
質問  よっち  - 09/1/26(月) 18:45 -

引用なし
パスワード
   始めまして。よっちと申します。
AutoFilterについて質問させて下さい。

現在全てのシートに対して同じフィルタをかけるアドインを作成しています。
※全てのシートっていうのは今回の質問に関係ありません。

ポイントとしては、
[1]全てのシートが同じフォーマットです。
[2]表の開始位置(表の左上?)がファイルによって違います。
[3]フィルタをかけたい列がファイルによって違います。
 (これはマクロ操作者が列をアルファベットで入力します。)

フィルタの開始列が何列目(フィルタされているのが何行目)かという情報を取得する方法が知りたいのですが、
[2]のせいで、AutoFilterのRange(行)、Field(列)が動的になってしまい、
どうやって値を自動で取得すればいいのか、いくら考えても対策が思いつきません。

表の上の部分の行(見出しというんでしょうか?)が複数行ある時もありますし、
空白でもフィルタが設定できる為、頭がパンクしてしまいました。

なるべくマクロ操作者には表の場所の情報を入力させたくありません。
何か旨い方法はありますでしょうか?


便利マクロとしてVBA勉強兼ねて作成中なので、
ファイルのフォーマット揃えろってのは、すいませんが勘弁して下さい。


以上、よろしくお願いいたします。

【60074】Re:オートフィルタの開始列の取得
発言  横入り  - 09/1/26(月) 20:56 -

引用なし
パスワード
   ▼よっち さん:

>フィルタの開始列が何列目(フィルタされているのが何行目)かという情報を
>取得する方法が知りたいのですが、
フィルタされている範囲ですか?
それともかけたい範囲ですか?

後者なら、どのような特徴を持っているんですか?それが提示されないと
だれも回答できません。

【60077】Re:オートフィルタの開始列の取得
発言  チェケラ  - 09/1/26(月) 22:01 -

引用なし
パスワード
   ▼よっち さん:
>表の上の部分の行(見出しというんでしょうか?)が複数行ある時もありますし、
この判断基準も載せた方が良いでしょう

【60094】Re:オートフィルタの開始列の取得
回答  よっち  - 09/1/27(火) 11:35 -

引用なし
パスワード
   横入りさん、チェケラさん
コメントありがとうございます。

>>フィルタの開始列が何列目(フィルタされているのが何行目)かという情報を
>>取得する方法が知りたいのですが、
>フィルタされている範囲ですか?
>それともかけたい範囲ですか?
>後者なら、どのような特徴を持っているんですか?
>それが提示されないとだれも回答できません。

>表の上の部分の行(見出しというんでしょうか?)が複数行ある時もありますし、
この判断基準も載せた方が良いでしょう

なるほどです。
やろうとしていることが、他人が作成した表でも使える。という事にしたいので
決まり事がかなり少ないです、情報少なくてすいません。

本来なら1つのボタンでフィルタつけて(▼のやつ)→フィルタかける。
まで行きたいんですが、いきなりだと自分には難しいので、
フィルタされている範囲を取得できるようにしたいです。
(マクロ実行時にすでにフィルタはついている)
フィルタついている範囲だったら、条件なくても簡単に取れるのでしょうか?


フィルタつけたい範囲については、
データ自体はデータベースの構成にはなっており、1列1列の項目名が付与されていますが、
cvsのような外部読み込み用ではなく、
操作性・閲覧性の為に、ファイルの見栄え上下記の点があります。

・見出し部が2行以上ある可能性がある。(カテゴリ毎に纏められている。正規化されていないから)
・表の左上の開始位置がA1でなく、不定
・ID列がありますが、1レコード目のIDは不定

それ以外は特に決まってないような。。。
どのような情報がいるのでしょうか。
決まって無さ過ぎて無理なんですかね。


以上、よろしくお願いいたします。

【60096】Re:オートフィルタの開始列の取得
発言  Jaka  - 09/1/27(火) 12:39 -

引用なし
パスワード
   なんかの足しになるかもしれない。

ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=160;id=FAQ
                            ↑
                  ずれていると思うけど目安箱の【160】

【60109】Re:オートフィルタの開始列の取得
発言  横入り  - 09/1/27(火) 20:40 -

引用なし
パスワード
   ▼よっち さん:
>フィルタついている範囲だったら、条件なくても簡単に取れるのでしょうか?
 AutoFilter オブジェクトのRangeプロパティというのがそれです。
 MsgBox ActiveSheet.AutoFilter.Range.Address を試してみてください。

>フィルタつけたい範囲については、
>データ自体はデータベースの構成にはなっており、1列1列の項目名が付与されていますが、
>cvsのような外部読み込み用ではなく、
>操作性・閲覧性の為に、ファイルの見栄え上下記の点があります。
>
>・見出し部が2行以上ある可能性がある。(カテゴリ毎に纏められている。正規化されていないから)
>・表の左上の開始位置がA1でなく、不定
>・ID列がありますが、1レコード目のIDは不定
>
>それ以外は特に決まってないような。。。
>どのような情報がいるのでしょうか。
>決まって無さ過ぎて無理なんですかね。

ソートの場合に、データの先頭行が見出しかデータかを指定するオプションが
ありますね。あれと同じで、自動判定することは困難でしょう。

Selectされた位置が見出しであるとみなすとか、Inputメソッドを使って
指定させるとか、人間が指定する必要があるでしょう。
さもなければ、あなたがたくさん例を集めて、それをロジックに変更する
かです。
いずれにせよ、あなたのシートを見ていない他人に依存するような話じゃない
ことは確かだと思います。

3806 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free