Excel VBAで選択範囲のループ処理がうまくいかない

このQ&Aのポイント
  • Excelのバージョンは2007、OSはWindows Vistaです。セルの選択範囲をループ処理しようとした際、全行分ループしてしまいます。画面上の選択範囲は正しいのに、なぜ正しくループさせることができないのか、教えてください。
  • Excel VBAで選択範囲のループ処理に関して困っています。セルの選択範囲を正しくループさせる方法が分からず、全行分ループしてしまいます。なぜ選択範囲が正しくループされないのか、教えていただけないでしょうか。
  • Excel VBAで選択範囲のループ処理に関して質問があります。セルの選択範囲をループさせる際、全行分ループしてしまい、正しくループさせることができません。画面上の選択範囲が正しいのに、なぜ正しくループされないのでしょうか。お知恵をお貸しください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

可視セルを使えば良いと思います。 下記操作を「マクロの記録」すれば参考コードが得られます。 A列のオートフィルタ範囲を選択 Ctrl+G (ジャンプ) Alt+S (セルの選択) Y (可視セル) Enter (確定) 得られたコードが上手く適用出来ない場合、遠慮なく捕捉質問してください。

murabee
質問者

お礼

できました! SpecialCellsで選択範囲を可視セルだけにすることで出来るんですね。 大変助かりました。ありがとうございました。

その他の回答 (1)

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

こんばんは。 #1さんの指示で間違いありませんし、マクロが出来ている以上、実際のコードを書くまでもないとは思いますが、記録マクロでは解決できない、2点ほど気をつけなくてはならない点があります。 SpecialCells で、Visible セルを選択する、というものには、タイトル(フィールド)行を含めていますから、その次のセルからです。タイトル行を含めないと、エラーを生じることがあります。 選択された範囲は、Range 型ですが、取得した範囲の末尾に、Cells を付けないと、ループすると、Area(複数のセル) になる可能性があります。 例: Range("A2", Range("A65536").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells

murabee
質問者

補足

アドバイスありがとうございます。 Each xxx in Selection~Next でループするより、 rng1 = Range("A2", Range("A65536").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells Each xxx in rng1 ... Next としたほうが安全ってことですよね。

関連するQ&A

  • エクセルVBA セル範囲の選択とループ処理

    VBA歴がまだ浅い学習者です。アドバイスをお願いいたします。 4つのシート、D、X、Y、Summaryがあります。 シートの概要: D:データが大量にあるシート X、Y:個別にデータを張り付けるシート Summary:X、Yを元にシート関数で、結果を出すシート シートDの概要: ABCDEFGHIJKLM 空空空空空空空空空空空空空 ←1行目は空白 空空11111111111 ←データの最初の行は、A列B列のみ空白、 1111111111111 1111111111111 1つ目のデータ群(A2:M14) ※行数は適当、列は固定(A:M) 1111111111111 空空22222222222 2222222222222 2つ目のデータ群 (A15:M23) ※行数は適当、列は固定(A:M) 2222222222222 2222222222222 空空33333333333 3333333333333       ・             ・             ・             ・       空空nnnnnnnnnnn ←データの数は可変する(ただし偶数個) nnnnnnnnnnnnn nnnnnnnnnnnnn nnnnnnnnnnnnn nnnnnnnnnnnnn ◇注意点 データの列数は同一ですが、行数は、同じではありません。 1つ目と2つ目、3つ目と4つ目・・・のデータ群が、比較したいペアのデータです。 やりたい操作:(下記にサンプルコードあり) ・1つ目のデータ群を選択してコピー ・それをシートXのA1より貼り付け ・2つ目のデータ群を選択してコピー ・それをシートYのA1より貼り付け ・(ここで比較結果が、シートSummaryのB2:J2に返される) ・シートSummaryのB2:J2に返された結果をコピーして、同シート、B4より貼り付ける(以後その下に張り付ける) ・3つ目のデータ群を選択してコピー ・それをシートXのA1より貼り付け ・4つ目のデータ群を選択してコピー ・それをシートYのA1より貼り付け ・(ここで比較結果が、シートSummaryのB2:J2に返される) ・シートSummaryのB2:J2に返された結果をコピーして、同シート、B5より貼り付ける(以後その下に張り付ける) ・以下データがなくなるまでループ わからない点: ・データ群のセル範囲を手書きではなく自動(おそらくend(xldown)を使用)で選択させる記述  ※データの見出し行にあるAB列の空白をうまく使って書けるのではと考えています。 ・ループ処理の記述 どうかご教授お願いいたします。 補足が足りない場合は、お伝えください。 サンプルコード Sub テスト() Sheets("D").Select Range("A2:M14").Select  ’??? Selection.Copy Sheets("X").Select ActiveSheet.Paste Sheets("D").Select Range("A15:M23").Select '??? Application.CutCopyMode = False Selection.Copy Sheets("Y").Select ActiveSheet.Paste Sheets("summary").Select Range("B2:J2").Select Application.CutCopyMode = False Selection.Copy Range("B4").Select '??? ActiveSheet.Paste End Sub

  • エクセルのデータ並べ替え(抽出)の方法

    エクセルのデータ並べ替え(抽出)の方法 を教えてください。 下記のようなデータがあるとします。   A    B    C   D 1 田中  東京  千葉  福岡 2 山田  京都  滋賀 3 佐藤  奈良  青森  USA 4 鈴木  カナダ 愛媛 A列は名前、B列以降は文字列です。B列以降はC列までの行、D列までの行とさまざまです。重複セルはありません。 これを下記のように並べ替えたいです。   A    B    C   D 1東京  田中 2千葉  田中 3福岡  田中 4京都  山田 5滋賀  山田 6奈良  佐藤 7青森  佐藤 8USA   佐藤 9カナダ 鈴木 10愛媛  鈴木 こういうことは可能でしょうか??? 教えてください。 よろしくお願いします。

  • エクセル2003VBAで選択範囲

    いつもお世話になっています。 エクセル2003を使用しております。下記を関数又はVBAの組み方・構文を教えて下さい。 (1)E列には、「1」と「.」と「空白」が入っています(「1」が入ってないケースもあります)が、「1」を検索します。もし「1」が無ければ、J列を同様に検索します。(中身はE列と同じです) (2)「1」が入っているセルから見て、「行」の±10の範囲内を選択し、別シートにコピーする。 例1. 1が入っているセルが、「E15」とします。 この場合、コピーしたい範囲は、5行目全部~25行目全部です。 例2. 1が入っているセルが、「E17」とします。 この場合、コピーしたい範囲は、7行目全部~27行目全部です。 分かりにくいかもしれませんが、よろしくお願いします。

  • エクセルのマクロで行選択の選択範囲を変数指定する方法

    あるファイルのデータを別のファイルに行挿入でコピーするマクロを作ろうとしています。 コピー元の選択について、行範囲が固定であれば例えば   Rows("10:20").Select でよいのですが、コピー元行範囲がファイルにより異なるので変数化する必要があります。 単純には、 Sub Row_Copy() Dim AA, BB As Integer AA = 10 BB = 20 ' 10行目から20行目を行選択しコピーする Rows("AA:BB").Select '##ここが問題## Selection.Copy ' ' (簡単のため)同じシートに行挿入する例 Rows("30:30").Select Selection.Insert Shift:=xlDown End Sub ですが、これだと Rows("AA:BB").Select の部分でエラーになります。 いろいろとやってみましたが、どうしても何らかのエラーになってしまいます。Rowsは変数では使用できないのでしょうか? ちなみに、行範囲の選択ではなくRangeでセル範囲の選択をするという方法もありますが、複数ファイルのデータをコピー先の一つのファイルにマージするために行挿入でコピーしたいことと、列方向の柔軟性を持たせたいため、コピー元選択方法として行範囲の指定をしたいという趣旨があります。 また、1行毎のコピー・行挿入をデータの行数だけ繰り返すという手もありますが、データ量が多いとかなり処理時間がかかるためこれも避けたいと思っています。 マクロ初心者で知識不十分ですが、よろしくお願いします。

  • VBAにて範囲選択およびコピーの方法について

    連休中失礼いたします。VBA初心者です。 VBAにて範囲選択の方法およびコピーの方法について教えてください。 (1)範囲選択の方法  まず最初の条件としてD列における値が1.0以上(数値表記は少数点)の場合に限り、 それに該当する行をコピー(A~D列)したいのですが… この方法をVBAの式で表したいのです。  範囲選択として求めたい範囲は、下表で行くとRange(”A3:D6”)の範囲を選択したいのです。  ※D列における値が1.0以上の条件の指定までは、何とかできてそうな感じなのですが、   その条件を満たす、範囲選択がうまくできません。 (2)コピーの方法  (1)で選択した範囲を、選択sheetを変更して貼り付けたいのですがどのようにしたらよろしいでしょうか??       A列     B列     C列      D列 1行    13     10      10      0.5 2行    10     8       7       0 3行    11     9       7       1.0 4行    9      25      18      1.5 5行    8      43      23      1.5 6行    7      12      23      1.0 7行    6      23      43      0.5  8行    15     23      54      0 … …

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

  • VBAのコードがエラーになってしまいます。(エクセル)

    ある表のある項目が空白以外(つまり、在庫がある)のものを オートフィルターで抽出して、その中の該当列のみコピーするマクロを 記録と修正をして書きました。 初めはきちんと動いていたのですが、今日になって急に 「Selection.Copy」のところでエラーが出てしまうようになったんです。 エラーコメント: 実行時エラー‘1004': そのコマンドは複数の選択範囲に対して実行できません。 ・・・・と出たときに、デバッグすると、「Selection.Copy」の 1行が黄色くなっていて、該当箇所になっています。 コード: Selection.AutoFilter Field:=19, Criteria1:="<>" '検索 Range("A8:C1000,G8:I1000,J8:L1000").Select Selection.Copy 作業自体は、複数の選択範囲に対して実行できる(コピーできる)し、 今まで動いていたのに??と、なにがいけないのかわからないので、 どうか教えていただきたいと思います。 VBAは勉強始めたばかりで、この部分だけが問題なのか わかりません。補足をしますので、どうかよろしくお願いします。 Excel2000を使用しています。

  • Accessの選択クエリの抽出条件について

    いちもお世話になります。Access2002を勉強中の初心者です。 顧客テーブルから選択クエリを作っています。クエリのフィールドには「都道府県」(東京、埼玉、千葉...)と「顧客名」(山田、佐藤、田中...)があります。 「顧客名」の山田以外を抽出したいのですが、但し「都道府県」が東京の場合は山田以外の条件を外したいのです。つまり、埼玉、千葉の山田は抽出しませんが東京の山田は抽出したいのです。 このような抽出条件の設定ができますか? アドバイス、よろしくお願いします。

  • EXCELマクロVBAについて

    Excel2007、XPを使用しています。 AからE列に下記のような情報が入力されています。 A / B / C / D / E ID / 名前 / 住所 / 電話 / 注文日 11111 / 田中 / 東京都 / 00000000000 / 2012/08/10 11111 / 田中 / 東京都 / 00000000000 / 2012/08/09 11111 / 田中 / 東京都 / 00000000000 / 2012/08/18 11112 / 佐藤 / 京都府 / 00000000000 / 2012/08/10 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/11 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/15 A列のIDでくくったとして、 E列の注文日が最大のみの行を表示させたいです。 A / B / C / D / E ID / 名前 / 住所 / 電話 / 注文日 11111 / 田中 / 東京都 / 00000000000 / 2012/08/18 11112 / 佐藤 / 京都府 / 00000000000 / 2012/08/10 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/15 このようなことはマクロで可能なのでしょうか? 恐れ入りますがご教授お願い致します。

  • エクセル 複数行にまたがっているデーターを一つの行にまとめたい

          A列  B列   C列 1行目  佐藤 北海道 りんご 2行目  佐藤 北海道 ばなな   3行目 伊藤  東京  いちご 4行目  伊藤  東京  ばなな  上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列 1行目  佐藤 北海道  りんごばなな 2行目  伊藤  東京   いちごばなな A列とB列のデーターが同じでC列のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

専門家に質問してみよう