- ベストアンサー
Excelでマクロを組んで、データを繰り返し抜き出したいのですが
Excelでマクロを組んで「データ取得→データ並び替え→データ取得・・」と繰り返す作業を自動的に行いたいと思っています。 元データ 一回目 二回目 │A│ │A│ │A│ │列│ │列│ │列│ ─┼─┼─ ──┼─┼ ──┼─┼ 1行 │k │ 3行│m│ 2行│d │ ──┼─┼─ ──┼─┼ ──┼─┼ 2行 │d │ 5行│z │ 4行│r │ ──┼─┼─ ──┼─┼ ──┼─┼ 3行 │m │ 8行│e │ 6行│p │ ──┼─┼─ ──┼─┼ ──┼─┼ 4行 │r │ 9行│f │ 7行│s │ 例えば、上記の元データのようにデータ(小文字アルファベット)を入力し、その後一回目、二回目・・・とデータの並べ替えを繰り返し、その都度上から二段目のデータのセルのデータ(この場合それぞれz、r)を取得して変数xに収めるという作業を繰り返し自動的に行うようにしたいのですが、「x=Cells(2,1)」とマクロを書くと非表示になっているセルA2のデータ(この場合d)を常に取得してしまいうまくいきません。 これはどのような方法で解決できるのでしょうか。 OSはWindows2000、ExcelはExcel2000を使っています。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 今の段階では、質問としては、解答にいたるまでの要件が満たないと思います。 Excel上には、「二段目」という概念(VBAでいうプロパティ)はありません。 1行目、2行目と書きながら、2行目を取得すると、非表示になっているセルA2 と書かれていますので、それは、ダメだとのを書かれていると、文章としての論理に矛盾してしまいます。 おそらくは、表示と非表示のセルの区分けの仕方を教えてほしい、 または、ひとつの列の範囲の表示のセルの2行目のセルの値を取り出したいということだとは思います。 これ自体は、列に対して、SpecialCells のxlCellTypeVisible で、Cells プロパティで、セルを取り出せばよいと思います。注意するのは、取得したままでは、おそらくは、Areas なので、うまく取れないと思います。 しかし、実際は、その後の項目で、変数に納めて、作業を繰り返し自動的に行うということになると、今度は、VBAのプロシージャ(単独のマクロ文)という単位の意味が揺らいできてしまうように思うのです。最終的に、それ[変数]をどうするか、ということになるのだと思います。 一回目と二回目のタイムラグがあるはずです。そのタイムラグが、機械的であれ、人間の手によるものであれ、今度は、その値を留めておかなくてはなりません。その時に、人間の手による割り込みは、そんなにトラブルはありませんが、これが機械的な問題になると、静的変数だとしても、メモリを飛ばしてしまう可能性もあるわけです。私は、ここの掲示板で、そういう予想のつかない問題で、何度やっても解決しないという例をみてきました。どういう環境下で、何を目的として、どう使っているかを教えていただいた方のみが、解決したという事例があります。(五名ぐらいの中で、たった一人の方だけです) だから、そういう点を含めて、もう少し、分かりやすい説明をしていただけないと、どうしたら解決するか、と聞かれても、分かりません、と答えるだけしかありません。 全体的に、こちらかの単独のスキルを教えただけで、それを組み替えて自分のマクロにする力がおあるなら、なおさら、問題点をはっきりさせてください。
その他の回答 (1)
- Bickyon
- ベストアンサー率41% (42/101)
並べ替えの条件、行の表示/非表示の条件が不明確なのですが、マクロ内で非表示になさっているということは、条件判定しているんですよね? それならば、For~LoopやDo~Loopを利用して表示条件の2番目に出現するセルの内容を変数に退避すれば良いのではないでしょうか。 意図した回答となっていない場合は、もう少し条件を詳しく教えてください。
お礼
問題解決しました。ありがとうございました。
お礼
データ並べ替えの際に、今まで降順(xlDescending)だったものを昇順(xlAscending)に変更して取得したいデータを最下行に持ってきて、下記のように処理したら上手くいきました。 y=Activesheet.cells.specialcells(xlLastCell).Row x=cells(y,8) 私が普段使ってる本にはSpecialCellsが載っておらず、Wendy02さんの回答をもとにネットで検索して調べてなんとか正解にたどり着くことができました。大変助かりました。ありがとうございました。