• ベストアンサー

Excel オートフィルタの使用で、256列ないための、対処法は!

FUJITSU ノートPCを使用しております。 FMV-BIBLO NB18D/L Windows XP Home Edition Office XP Personal 2002 Excel 2002 事情(購入資金等。2007は重く、遅い。etc)があって、Office 2007は使用しないことを前提として。 そして、オートフィルタ機能を重点的に使用することを前提としてでございます。 Office 2003までは、列のデータが多くなってしまうと、256列以上のデータにオートフィルタをかけたいと思っているのにかけられない。 今、私に考えられる単純な方法は1つだけありますが、他に便利な方法がございましたらご教示下さい。 1、マクロにて、未使用の最後列の1列だけを使用しての手動的な単純なマクロしか思いつきません。 左図は、全256列を使用済です。注意:必ず、3列以上(~20列)にオートフィルタがかかっております。 右図は、できれば、左図の最後列の後ろにつなげたいわけですが、それはできません。 各左右のシートのB列だけは、同データが入力してあります。 ---【私の方法】------ ●画像のように左右にきっちりと平行に表示させます。  次に、  マクロにて、各左右のシートの未使用の最後のあたりにある空白列の1列だけを使用しての手動的な単純なマクロを使用する。 次に、また、左シートに3列以上にオートフィルタをかけて、●のマクロを実行する。の繰り返しとなります。 --------------------- オートフィルタの操作後の同じ行番号だけを、2つのブックの各シートに即同時表示させるマクロなんてできますでしょうか? 皆様はどのような工夫をされてますか? 何か、よい方法はございますか? もちろん、Excel自体にそのような機能はないですよね。 何卒よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

Sub test()   Dim r  As Range   Dim ri As Range   Dim n  As Long   Dim x  As Long   Dim v() As Long   On Error GoTo ErrHndlr   With Workbooks("テスト用1.xls").Sheets("sheet1")     If Not .AutoFilterMode Then Exit Sub     With .AutoFilter.Range.Columns(1)       n = .Cells(1).Row       x = .Cells.Count       Set r = .SpecialCells(xlCellTypeVisible)     End With   End With      ReDim v(n To n + x, 1 To 1)   For Each ri In r     v(ri.Row, 1) = 1   Next      With Workbooks("テスト用2.xls").Sheets("sheet1")     .AutoFilterMode = False     With .Cells(n, "IV").Resize(x)       .EntireColumn.ClearContents       .Value = v       .AutoFilter Field:=1, Criteria1:=1     End With   End With      Erase v   Set ri = Nothing   Set r = Nothing   Exit Sub ErrHndlr:   MsgBox Err.Number & vbLf & Err.Description End Sub こんな感じになります。 シート名は仮に"Sheet1"としています。 Workbooks("テスト用2.xls").Sheets("sheet1")の IV列を作業用として使います。 ただ、.SpecialCellsにはエリア数に制限がありますので フィルタ抽出後の不連続範囲が8192個を超えるとエラーになります。 別案として、Workbooks("テスト用2.xls").Sheets("sheet1")の作業列、例えばIV1に =SUBTOTAL(3,[テスト用1.xls]Sheet1!A1) という数式をセットして 1 でフィルタかけるという方法も考えられますが、 『行データが4・5万行』となるともたつきますね。 ...というより256列×40,000行ものデータだと、 1シートだけでも50~70Mバイトくらいになるのではないですか? Excelには荷が重いデータ量ですね。快適な作業ができるとはあまり思えないです。 Accessに移行して、適当なテーブルごとに分割してデータベースを構築したほうがいいような気がしますけど。

oshietecho-dai
質問者

お礼

どうも有難うございました。

oshietecho-dai
質問者

補足

ご回答、誠に有難うございます。 私は、今回の質問は、 「物理的にも不可能だと思っておりました」  以前から、いろいろと悩んでもおりました。 1つだけ(前者と後者の違い)ご確認させて下さい。 >フィルタ抽出後の不連続範囲が8192個を超えるとエラーになります。 8192行であると解釈すればよろしいですか。 ●ならば、後者の=SUBTOTAL(3,[テスト用1.xls]Sheet1!A1) を予め、記載した上でボタンで使用しようと思っておりますが、 後者では、何か不都合、エラー等が起こりますか? 自身で、いろいろ試しましたが(別段、問題はなさそうですが)、 後者なら、●印にて行えば、4・5万行でもOKだと思いますが、 >『行データが4・5万行』となるともたつきますね。 もたつきます→前者より重くなる ということでしょうか? 簡単で結構ですので、お時間のおありの時で結構でございます。 度々と、すみません。 ----------- p.s.前回の質問で、 各投稿欄の記載が長文かつ画面が長くなってたこともありまして、 見落としてしまいました。 私が、あわてていて、せっかくご回答して頂いた他の方(Wendy02様)に、「お礼をつける」をうっかり忘れてしまいましたことを、 この場をお借りしてお詫びと改めてお礼を申し上げます。 質問を締め切った直後に、その方のご回答の存在を発見した次第でございます。

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>フィルタ抽出後の不連続範囲が8192個を超えるとエラーになります。 例えば Range(1:10,12:20)、 1から10行が抽出、11行が非表示、12から20行目が抽出されていれば エリア数は2です。行数ではありません。 効率悪いですが、エラー時に分岐処理すれば対応可です。 Sub test()   Dim r  As Range   Dim ri As Range   Dim n  As Long   Dim x  As Long   Dim v() As String   With Workbooks("テスト用1.xls").Sheets("sheet1")     If Not .AutoFilterMode Then Exit Sub     With .AutoFilter.Range.Columns(1)       n = .Cells(1).Row       x = .Cells.Count       ReDim v(n To n + x, 1 To 1)       On Error Resume Next       Set r = .SpecialCells(xlCellTypeVisible)       On Error GoTo 0       If r Is Nothing Then         For Each ri In .Rows           If Not ri.Hidden Then             v(ri.Row, 1) = "1"           End If         Next       Else         For Each ri In r           v(ri.Row, 1) = "1"         Next       End If     End With   End With   With Workbooks("テスト用2.xls").Sheets("sheet1")     .AutoFilterMode = False     With .Cells(n, "IV").Resize(x)       .EntireColumn.ClearContents       .Value = v       .AutoFilter Field:=1, Criteria1:="1"     End With   End With   Erase v   Set r = Nothing End Sub SUBTOTAL関数の方法は、使ってみて重くなければ、 簡単ですからいいんじゃないでしょうか。 不都合やエラーは特にないと思います。

oshietecho-dai
質問者

お礼

今回もホントに以外でした。 私自身、諦めかけてた質問でしたので。 投稿してみるものなのですね! どうも有難うございました。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

色々書かれていますが、何をやりたいのかが解りません 1.元のデーターがどうなっているのか? 2.そのデーターをつかって、どんな結果が欲しいのか? 3.マクロとは、どんな(何をする)マクロなのか?

oshietecho-dai
質問者

お礼

どうも有難うございました。 不足な箇所をご指摘いただきまして助かりました。

oshietecho-dai
質問者

補足

お答え有難うございます。 説明不足で、大変申し訳ございません。 少し表現(説明)がしにくい質問内容だと思います。 見にくい行列番号等だけ記載します。 テスト用1.xls    テスト用2.xls  A B IU IV    A B C D 1          1 2          2 8          8 9          9 10         10 11         11 12         12 13         13 14         14 2007なら、256列以上ありますので、単に右を左に追記すればいいのですが、2003まではそれができません。  2007を使用すれば、今回の質問は全く不要です。 >1.元のデーターがどうなっているのか? 左はご覧のように、全256列をデータで使用済ですが、IT列だけ(どこの列でもいいのですが)はデータが空白です。 数万行に、ごく一般的なデータが入力されてるだけです(どんなデータでもよいです)。  左のB列とIU列の間は、非表示にしてあるだけです。 【★1】左で、約10列以上にオートフィルタをかける単純なマクロ(私がいつも使用してます)を実行します。   ■この実行後と全く同じ結果(行番号)を→右に即同時表示させるマクロでございます。     物理的にも不可能だと思いますが、■に近いことができるマクロがあればと思っております。   右で同じデータのB列に同じようにオートフィルタをかければよいと思われますが、不可能です。    質問内容と画像をよくみれば分かりますが、    右では項目名もデータが全く違うため【★1】は使用できません。 【私の方法】でもよいのですが、【★1】の後、オートフィルタを全て表示させて、また【★1】を実行させる必要がございます。  これですと、【★1】の後、私が、もし【★2】手動でオートフィルタをたとえば10列に行った場合、非常に困ります、   【★2】を再度行わなければなりませんので、【★2】を私はもお覚えておりませんので、【私の方法】では不都合です。    ただ、【★2】をしない場合は、【私の方法】でも使用できますが、行データが4・5万行ありますとすごく動作が遅くなり、    かつPCに負担もかかってしまいます。  >2.そのデーターをつかって、どんな結果が欲しいのか? >3.マクロとは、どんな(何をする)マクロなのか? ■の方法でございます。 よろしくお願い致します。

関連するQ&A

  • EXCELのオートフィルターマクロについて

    初歩的な質問で恐縮です。 sheet1にデータ一覧を作成(仮にシート名を「データシート」とします)し、 sheet2へ検索条件を入力するセルとコマンドボタンを配置し、sheet1のデータを「オートフィルタで検索」するマクロを作成しました。 マクロの検証も行い動作の確認も行いマクロの実行してみると、ちゃんとフィルタ処理されており全て完璧!となりました。 ところが、他人への配布も予定していたので、データの改ざんを防止するため、データシートをシート保護して実行したところ、「ロックされているため実行できません」旨のエラーになってしまいました。 やはり、シートの保護を行なってしまうと、マクロであってもオートフィルタ機能は使用できないのでしょうか? 何か解決(保護状態でもオートフィルタ機能が使用可能)方法はありませんでしょうか? ご教授お願いいたします。

  • エクセル 特定の列にだけオートフィルター

    よろしくお願いします。 エクセルのオートフィルターの設定につきまして 普通にフィルターをかけるとデータのある列の全部にフィルターがかかってしまうのですが、 特定の列、例えばB列(会社名)にのみフィルターをかけて、他の列のデータもそれに連動するようにする方法を教えてください。

  • エクセル オートフィルター

    オートフィルターについて教えて下さい。 同じシート内で、独立した複数のオートフィルターを用いることは出来ますか。下に示すような場合にAとB列に独立してオートフィルターを設定して、果物を抽出して、CとD列には野菜だけを抽出する。みたいなイメージです。オートフィルターやマクロを用いないやり方で他のやり方でもできる場合は教えて下さい。    A    B      C    D 1  りんご 果物   りんご  果物 2 キャベツ 野菜  キャベツ  野菜 3  イチゴ 果物   イチゴ  果物

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

  • エクセル・オートフィルタについて

    エクセルでオートフィルタの使い方について質問です。 2000ほどの行があるデータをひとつづつオートフィルタで同じデータがかぶっていないかチェックしています。 以前まではオートフィルタの逆三角を開くと、開いた列のデータがバーっと一覧で出るので 一つ選んで、データを見る。確認したらまた、逆三角を開いて矢印キーで一つ降りて、データを見る。 というのをやっていたのですが、 今回データチェックをしようとしたらうまくいきませんでした。 というのも、オートフィルタの逆三角を開くとその列のデータの一覧が出るのですが、 選択して確認し、また逆三角を開き矢印キーで降りる。というのを5回ほど連続でやると、 なぜか、データの一覧の一番上のデータに選択が戻ってしまうのです。 データ自体が似たような数字の一覧なので、気付かない内に、一番上のデータに戻っていたり、 一番上に戻ったあと、どこまで調べたのかがわからなくなり、困っています。 以前のようにオートフィルタで一つづつ下がっていくやり方で全部確認をしたいのですが、 どうしたら元に戻りますでしょうか? PC初心者なので、説明もままならない状態で申し訳ありませんが、 わかる方いらっしゃましたら回答よろしくお願いいたします。 ・Microsoft Windows XP ・Microsoft Office Excel 2003 を使用しています。 よろしくお願いします。

  • エクセル2003です。オートフィルターでA列の(○もしくは×)で○だけ

    エクセル2003です。オートフィルターでA列の(○もしくは×)で○だけを別シートに貼り付けるという記憶マクロを行っています。A列に○が無い場合、処理を実行させると×までもフィルターされてしまいます。A列に○があるか無いか判別し、無ければ処理を実行しない(msgboxで○はありません)という記述はどうすればよいのでしょうか?よろしくお願いします。

  • EXCELのオートフィルタについて教えてください。

    下記のようにデータが入力されています。   A   B   C 1 あ 2 い 3 う 4 え 5 お C列のC1に「=A1」C2に「=A2」と入力してオートフィルタを使って、「C3」以下に入力するとオートフィルタが使用できます。 しかし、以下のようにデータが入力されている場合はオートフィルタが使用できないのですが・・・   A   B   C 1 あ 2  3 い 4  5 う 6 7 え 8 9 お C列のC1に「=A1」C2に「=A3」と入力してオートフィルタを使って、「C3」以下に入力するとオートフィルタが使用できません。 簡単なことなのかもしれませんが、今一理解に苦しんでいます。 宜しくお願いいたします。

  • エクセルでオートフィルターが使えない

    エクセルで「データ」->「フィルター」->「オートフィルター」が使えなくなっています。 該当シートではオートフィルターを使用していません それと ブックを開いたときにブック名の他に[作業グループ] と名前が付いています これが原因なのでしょうか 解除する方法を教えてください エクセル2002

  • エクセルのオートフィルタについて

    エクセルのオートフィルタについて教えてください。 エクセル2003です。 データ-並べ替え で複数の列に対してレベルごとに昇順で並べ替えをしますが、これをオートフィルタではできないのでしょうか? 例えば、A列にクラスデータがあり、それをオートフィルタで昇順にしておいて、それをレベル1として、B列に点数があり、それをオートフィルタで降順にして、それをレベル2とするような使い方です。

  • エクセル オートフィルターに関して、

    予めsheet1のA列に入力した文字等をsheet2でオートフィルター表示する方法を教えて下さい。初心者です、宜しくお願い致します。

専門家に質問してみよう