• 締切済み

Filterがかかっている状態でさらに選択している範囲の行番号を取得したい

タイトル通りですが、選択範囲の中を 単にEach でループすると 隠れている部分のCellまでみているようです。 フィルターで表にある部分だけを対象に処理はできないものでしょうか? Excel2003 SP3 Windows XP SP3

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 オートフィルタの位置がはっきりしていないのですが、確か、前回では、単に、A列からだったと思います。 >最終的にMDBに書き込みたいのですが、その際に変更のあった行のみを書き込みたいのですが、 ずいぶん、難しいことを考えていらっしゃるのですね。Excelから、この方式で、ADODBを使うなどしても、この状態からでは、かなり複雑になってしまいます。そうすると、回答者側も、そのレベルを維持できないままになってしまうことがあります。その目的ですと、たぶん、全体を書き換える必要があるかもしれません。 一旦、臨時のシートなどにコピーしてから、MDBに移すか、Access があれば、Access からインポートさせた方が楽なような気がします。 ただ、それは今回は質問外のことですから、Rangeオブジェクトを取得する部分もつけておきました。(★)一通りのエラー処理はしています。標準モジュールでもシートモジュールでも可能です。シートモジュールなら、ActiveSheet は必要ありませんが、With ステートメントを外さなくてはなりません。 コメントブロックの「'」が一つのものは解説です。 '------------------------------------------- Sub Test1() Dim c As Range Dim i As Long Dim sh As Worksheet Dim sKENSAKU As String ''検索値 ''========================================= sKENSAKU = "B"  'セルからなら、= Range("F1").value 'とします。 ''=========================================   Set sh = ActiveSheet   With sh     'AutoFilter モードになっているかどうか、チェック     '-------------------------------------------     If .AutoFilterMode Then       .ShowAllData     End If     If sKENSAKU = "" Then Exit Sub     ''フラッグの削除     .Range("A2").Resize(.AutoFilter.Range.Rows.Count - 1).ClearContents     'Field:=2 B列を検索対象     '誤動作する場合は、Range("A1:E200") やCurrentRegion を使う     .Range("A1").AutoFilter Field:=2, Criteria1:=sKENSAKU     '-------------------------------------------     With .AutoFilter.Range       ''検索値が見つからない場合       If WorksheetFunction.Subtotal(3, .Columns(2)) = 1 Then        MsgBox sKENSAKU & ":は見つかりません", vbExclamation        Exit Sub       End If       For Each c In .Columns(1).SpecialCells(xlCellTypeVisible)         i = c.Row         If c.Row > 1 Then           'True を書き込む           c.EntireRow.Cells(1, 1).Value = True '同じ行ならどこの列でも可能           '★以下は、フラグを抜いた行のオブジェクトの取得           .Rows(i).Resize(, .Columns.Count - 1).Offset(, 1).Select         End If       Next c     End With   End With End Sub

tss_jp
質問者

補足

データが大量なので入れ物はAccessにしています。 入力もAccessにしようと思ったのですが、Excel の方がオートフィルターとかフィルとか補助機能が 充実しているのでこちらにしてくれ、ということに なりました。 とりあえず、データの開始行から終了行までを ループし変更フラグの立っている行でIDをフィルタ にしたSQLで全列を書き換えています。 IDのない行は新規ということでaddnewしています。 ばたばたしていて教えていただソースみれていませんが、 これから試させていただきたいと思います。 ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 前回の質問も見ていましたが、最終的に何をしたいのでしょうか? テクニックだけを聞いても、最後まで詰め切れないなら、また、別の疑問が出てきてしまいます。 >Filterがかかっている状態でさらに選択している範囲の行番号を取得したい ワークシート上で、それぞれの行番号というような、数値を取得するようなことは、めったにありませんし、その数値で、ひとつずつコピーでもするのでしょうか?一般的に、必要なものは、あくまでも、行やRange のオブジェクトはずです。 それと、前回の質問からすると、フィルタではなくて、AutoFilter のことのようです。フィルターというのは、オートフィルタ、フィルタ・オプション、リストなどに存在します。フィルタとオートフィルタでは、シート・プロパティが違います。 >隠れている部分のCellまでみているようです。 AutoFilter.Range で、確かに、それぞれループすれば、隠れているセルまで見るけれども、それで、どうするかが問題です。まさか、c.Hidden =True と判定する必要もないと思うのです。 例えば、コピーするなら、1行目のタイトル行(フィールド行)を抜けば、Copy して、Paste すれば、隠れている行は省かれます。(ただし、Excelが故障しているのか、トラブルがある場合は別です) 最終行の取り方はもう回答が出ているはずですから、上部の左端のひとつ下を選択して、その二点を、Rangeで囲めば、それで範囲は取れます。隠れているセルは無視されます。

tss_jp
質問者

補足

材料の加工先の振り分けをしているのですが、 加工先によって対応可能不可能があります。 まず、加工先でフィルターをかけ、その中か らさらに材料を選択しています。納期とか その他の条件で選択行に値を設定しています。 最終的にMDBに書き込みたいのですが、その際に 変更のあった行のみを書き込みたいのですが、 変更のあった行のみA列にフラグたてようとして います。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

>Filterがかかっている状態でさらに選択している この選択状態の時に、下記のマクロを実行してください Sub test() Dim rng Selection.SpecialCells(xlCellTypeVisible).Select For Each rng In Selection MsgBox rng.Address & "=" & rng.Value Next rng End Sub 以上参考まで

関連するQ&A

  • EXCEL VBA 選択範囲のループ処理ができない

    A列   B列 --------------- 東京  山田 東京  田中 埼玉  佐藤 埼玉  鈴木 神奈川 伊藤 --------------- みたいなシートがあり、「東京」で2行ある「山田」と「田中」を1セルにまとめたいのです。 オートフィルタで東京の人のみ表示させておいて、選択範囲を、 Each xxx in Selection~Nextをつかって処理しようとしましたが、 どうしてか、山田から伊藤まで全行分ループが回ってしまいます。 画面上で見えている選択範囲は正しく、Copyメソッドであれば望みどおりできるのですが。。。 選択範囲を正しくループさせるにはどうしたらよいか、教えて下さい。 よろしくお願いします。 Excelのバージョンは2007、OSはWindows Vistaです。

  • Excelで、選択(色反転)したCellが何行かを右下に表示させるには

    Excelの機能の事で教えていただけないでしょうか?Excelの表を作成して、filter設定をして、対象の条件に合致した行を表示させた後、それが何行あるのかExcel上で知りたい。対象のCellを選択して色を反転させて状態にして、Excel画面の右下に対象cell数を表示させる機能があったはずなのですが、どのように設定したら表示させられるか教えていただけないでしょうか?

  • 列選択で勝手に広範囲に範囲選択される

    よろしくお願いいたします。 ・使用環境 エクセル2010 表示は[標準]で[ページ レイアウト]は使用していません。 [範囲選択の拡張]は設定していません。 セルの結合とウィンドウ枠の固定の組み合わせで、行を選択した時に勝手に広範囲に範囲選択されます。 例1) A1:D5の表でA1:B1を結合 セル番地B2を選択して[ウィンドウ枠の固定]を設定 ↓ この状態で1行目を選択すると1~14行目が範囲選択されます。 2行目以降は通常通りに選択可能。 (ウィンドウ枠の固定はG10で固定した場合も同様) 例2) A1:D5の表でB1:C1を結合 セル番地B2を選択して[ウィンドウ枠の固定]を設定 ↓ 1行目を選択すると通常通り1行目のみ範囲選択されます。 セルの結合とウィンドウ枠の固定のどちらかのみの設定の場合は、この現象は発生しません。 使用しているの他のブックでは、列選択でも勝手に範囲選択される現象が起きています。 回避策がございましたら、ご教示ください。

  • Excel:選択している行・列を見やすくする方法

    Excelで、行数・列数の多い表を扱っているとき、選択している行・列がどこなのか、見間違うことがあります。 行数・列数が書いてある部分が立体的になり、太字になることは知っていますが、それでも、見られる範囲を広げる為にズームを50%などとしていると、分かりにくいです。 秀丸エディタなどでは、カーソルのある行の背景色を変えたりして見やすくする機能がありますが、Excelで同じように、選択している行・列の背景色を変えるなどして、見やすくする方法はないでしょうか? Windows2000, Excel2000を使用しています。

  • excelの計算範囲の選択

    今、エクセルで3万近くの行を扱っています。 ある関数をひとつのマスに定義して、それを行の特定の部分まで選択範囲の下の十字キーで計算範囲をドッログするという作業を繰り返しています。しかしかなりの行数を扱っているので、excelのウインドウ外にマウスを持ってきても2,3分はドロッグしっぱなしにしなければならずかなりめんどくさいです。 そこでこの計算範囲の選択も普通の選択範囲の選択のようにshiftを押しながら一気に選択できる方法、またはショートカットはないでしょうか。

  • Windows7 アイコンの選択範囲が広すぎる

    Windows7を使い始めたのですが デスクトップやフォルダ内のファイルを選択する際 選択範囲が広すぎて困っています。 XPのころはフォルダを選択する際などは、フォルダのアイコンの絵の部分のみが選択範囲でした。しかし7ではアイコンよりもかなり広い範囲の四角形が選択範囲となっています。 デスクトップにアイコンが並んでいる際、特定の2つのフォルダをドラッグで選択したいのに、1個1個の選択範囲が広いためにドラッグすると1個のファイルを移動させてしまう感じになってしまいます。 アイコンの選択範囲を縮小させたいのですが、そのような設定はあるのでしょうか?

  • 選択範囲のデータを配列に一発で取り込みたい

    Office2003を使用しています。 エクセルVBAでセルの選択範囲のデータを一発で配列変数に取り込みたいのですが、そんなこと可能でしょうか? ループ回して取り込むことはできるのですが、 膨大なデータ量ですので高速化したいと思いまして。。 すみませんが、よろしくお願いします。

  • excelで選択範囲の反転をしたいのですが

    EXCELで、ある範囲を選択しているとします。それで、その選択している範囲を反転させたいのです。メニューバーやツールバーの中を探したのですが、どうしても見つけることができません。 VBAとかを使わないと無理なのでしょうか? 実は、表を作って、一列置きに色をつけて、あと、7列ごとに色をつけたりするのに、範囲選択するのがめんどうなので、列、行ごとに色をつけてしまったあと、表を選択→選択範囲の反転→塗りつぶしなし というふうにできれば楽なのになと思うのです。 やりかたをご存じの方、教えていただけるとうれしいです。よろしくお願い致します。

  • photoshopで同時に複数のレイヤーで選択範囲をカットしたい

    質問失礼いたします。 photoshopにてある画像3枚(3つのレイヤー)のうち基準となる1枚(透明部分と色の置かれた部分がある画像)から選択した範囲をカットし、残りの2つも同じ範囲でカットする。 これが1セットとして数十セット以上繰り返さないといけません。 現在自動選択ツールで範囲選択した後、レイヤーごとに選択しなおしてカットしています。 範囲選択の基準となる画像は、カットしたい位置がセットごとにバラバラになるのでアクションも使えません。 そこで作業効率を上げるために残り2つのレイヤーも同時に同じ選択範囲でカットすることはできないのでしょうか。 または自動選択ツールを使わず透明部分以外(色が置かれたところだけ)を選択することはできないでしょうか。 もし以上のような事ができるツールなどありましたら教えていただけるとありがたいです。 作業環境: windows xp sp3 Photoshop CS3 わかりづらい説明かもしれませんがアドバイスいただけると助かりますm(_ _)m

  • Excel でデータのある行に番号をつけるには?

    Excel でデータが存在する行に番号をつける方法は? 表1から表3を得る方法を教授願います。フィルタと「編集」→「形式を選択して貼り付ける」が使えそうですが上手く行きません。 表1,2,3について説明します。 表1が原型。A列にはデータのないセルあり。表2でデータのあるセルをフィルタ表示し、上から1,2,3を入力。表3はフィルタを全表示にした結果。 表1 A B 1 aa 2 3 cc 4 5 ff 6 gg 7 8 ii 表2 1 aa 1 3 cc 2 5 ff 3 6 gg 4 8 ii 5 表3 1 aa 1 2 3 cc 2 4 5 ff 3 6 gg 4 7 8 ii 5

専門家に質問してみよう