• ベストアンサー

ExcelのVBAで選択範囲を指定する方法

初心者でVBAに挑戦したらいきなり壁にぶち当たりました。。 誰か教えて下さい! 私のしたいことは、、 +-+-----+---+ |No|Name|状況| +-+-----+---+ |11|RARA| ○ | +-+-----+---+ |12|RURU| ○ | +-+-----+---+ |13|KAKA| △ | +-+-----+---+ |14|RERE| △ | +-+-----+---+ |15|RERA| × | +-+-----+---+ |16|KOKO| × | +-+-----+---+ 上記のような表があって、マクロを実行したら状況が○になっている行のNo・nameのセルが選択されるようにしたいんです。 ○のある行の多さは状況によって変わるので、”○”だったら選択というように指定したいと思っています。 一度「マクロの作成」機能でマクロを作ってみたんですが、 Range("A2:B3").Select のようになりました。 どうやったら○だったら、という条件が付けれますか? よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 NoがA列、NameがB列、状況がC列とします。 これで、以下のマクロを実行してみて下さい。 Sub macro()   Dim rg As Range   Dim i As Long   Dim lastrow As Long   lastrow = Range("C65536").End(xlUp).Row   If lastrow < 2 Then     Exit Sub   End If   For i = 2 To lastrow     If Cells(i, 3).Value = "○" Then       If rg Is Nothing Then         Set rg = Cells(i, 1).Resize(, 2)       Else         Set rg = Union(rg, Cells(i, 1).Resize(, 2))       End If     End If   Next i   rg.Select   Set rg = Nothing End Sub

noname#118337
質問者

お礼

みなさんすごいですね! 本当にびっくりしました。 プログラムを書き込んでもらえるととっても助かります。 がんばって意味を理解して利用させてもらおうと思います。 今日、帰り本屋さんでVBAの本立ち読みしてみたんですが、道のりは遠そうです(^-^;) ありがとうございました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#3です。早速お返事を載せていただき嬉しく思います。しかし案の状、(既にご回答が出尽くしていたのにも係わらず上げた)私の真意が伝わっていないように思います。 (止めておけば良いのにとも思いますが)具体的にもう一度比較してあげてみますのでご再考を。 C列に○の入った行に、色を付ける、と言う問題とします。 (1)(私のお勧め) Sub test01() d = Range("A65536").End(xlUp).Row For i = 1 To d If Cells(i, "C") = "○" Then Range(Cells(i, "A"), Cells(i, "B")).Interior.ColorIndex = 6 End If Next i End Sub ○の行が見つかった段階で、即 Range(Cells(i, "A"), Cells(i, "B")).Interior.ColorIndex = 6 を実行している。 (2)(例えば#1さんのご回答の方法をお借りすると) Sub test02() Dim r As Long Dim s As String d = Range("A65536").End(xlUp).Row s = "" For r = 1 To d If Range("C" & r).Value = "○" Then If Len(s) > 0 Then s = s & "," End If s = s & "A" & r & ":B" & r End If Next Range(s).Interior.ColorIndex = 6 End Sub 該当○のは入ったRangeのセルを全部捉えてから Range(s).Interior.ColorIndex = 6 としている。 それぞれ長短ありますが、「>初心者でVBAに挑戦したらいきなり」であるなら、考えが易しい(1)のやり方を 知って欲しいと言うことでした。

noname#118337
質問者

お礼

返事が遅くなってすみません!お返事とってもうれしく思います(^-^) ご説明とっても分かりやすいです!! そのようにすればより分かりやすいですねー。(初心者なので) 分からなかったことも急いでいたこともあって、理解できた#1の方のを使わせていただきました。皆様ありがとうございますm(_ _)m No.1の方のを使わせていただきましたが、皆さんに教えてもらったことはとても役に立ちました!! ボタンを押したらマクロが実行されて○、△、×別の新しい表ができるというのを作りたかったんですが、値が一つも無いときにボタンを押したらおかしくなるっていう状況にはまってしまってました(^-^;) IF文を使おうにもセルの値ってどうやって取るんだろう(TT)ってなってたんですが、Cells(i,"C")="○"やNothingを教えていただいたおかげで助かりました。 色を変更することもあると思うので助かります。 本で探しても積み重ねがないから自分のしたいことができないんですよねー。 長くなりましたが(私の悪いところ(^-^;))、みなさんはどのように勉強して初心者からベテランになられましたか?? 初心者が勉強するのにいい本や、いいページがあったら教えてください。

全文を見る
すると、全ての回答が全文表示されます。
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.4

補足1~3拝見しました。 状況が○になっている行だけを・・・という事だったら、 ・1行目を選択 ・データ→フィルタ→オートフィルタ とやると、1行目(項目名)に▼マークが付きますので、 状況の▼を押して、○を選ぶと、○だけのリストになります。 この状態のまま使うも良し、 必要な部分をコピーして別シートに貼り付けるも良し。 これとは別に、ピボットテーブルを使う方法もあります。 何しろ、おっしゃる目的だけの為だったら、マクロを使わずともできますよ! それでも、マクロはある程度知っておくと、今後発生するであろう問題の解決の役には立つと思います。 頑張ってください(^o^)丿

noname#118337
質問者

お礼

返事をありがとうございます! 今回は、ボタンを押したら○だけの表が別にできるというのを行ないたかったのでマクロが使いたかったのです(^-^) エクセルは2002の上級を取得するレベルには何とかなれたので、この調子でVBAも!と思ったら全く別物のようでぶち当たっちゃったんです(笑) JAVAは少しだけかすったことはあるんですがねぇ(T_T) がんばりますね♪

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>○のある行の多さは状況によって変わるので >行のNo・nameのセルが選択されるようにしたいんです それと当然、○のある行は飛び飛びであることがあり得る のが前提ですね。 その場合Range("A1:B1,A5:B5,A10:B10,A12:B12").Select のような状態にしたいのでしょうが、(#1のご回答がこれ。、で連なる範囲数に制限はないのかな)、そのほかUNION(#2のご回答がこれ)などがあります。 これらは中級・上級の技です。(初級・中級の解説書には 載っていません。) ですから「初心者でVBAに挑戦したらいきなり」ならば Cells(i,"A")が○であると判定したら、その行だけに対し、その場で処理をするようにしたら良いと思う。 書式設定やCopyなどで一括して範囲指定するほうが、操作と似ていて、色んな点で良い場合があろうが、初めは1セルに1処理から始めることをお勧めします。 またリストというデータベースを処理する時は、範囲が2つ3つに離れることは、まずないので、1範囲となる。

noname#118337
質問者

お礼

返事をありがとうございます! とっても助かります!! >行のNo・nameのセルが選択されるようにしたいんです それと当然、○のある行は飛び飛びであることがあり得るのが前提ですね。 それができるっていうのが思いつかなかったので、ソートボタンを作って先にソートするという手順にしようかと思っていました(^-^;) ○のデータがある行を選択・コピーして、全く別のセルに張り付けて”○一覧”という表を作りたいんです。 1セルを選んで別のセルにコピーして、次のセルを選んで、、という手順がどのようにしたらいいのか分かりません(T_T) なので、教えて頂いたのを使わせてもらおうと思います。 理解する道は遠そうなので、先にCellsの使い方とか先に読んで勉強しますね。 ありがとうございました!!

全文を見る
すると、全ての回答が全文表示されます。
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

Sub test() Dim r As Long Dim s As String s = "" For r = 2 To 30 If Range("C" & r).Value = "○" Then If Len(s) > 0 Then s = s & "," End If s = s & "A" & r & ":B" & r End If Next Range(s).Select End Sub 適宜書き換えてください。 頑張ってくださいヽ(^。^)ノ

noname#118337
質問者

お礼

早速の返事をありがとうございます! 私が質問した時間から15分もかからずにメールを見て考えて書き込みをされるなんてすごいですね!! 詳しくなりたいので、プログラムの意味をがんばって理解して、利用させてもらおうと思います。 本当にありがとうございました★

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA:範囲選択について

    初歩的な質問ですが、よろしくお願いします。 Excel2000です。 グラフを描くための範囲選択をしたいのですが、うまくいきません。 状況は、 ・列A、列Bにデータが入っている。(データの数はAB同じで2行以上) ・開始点は一定。(ここでは、行10と仮定します) ・終了点が変化する。(但し、終了点は常に一番下のデータ) これだけです。 一番下のデータを参照するので、 Range("A10 : Range("B10").End(xlDown)").Select Range("A10 : Range("B65536").End(xlUp)").Select Range("A10 : Cells(ActiveSheet.Rows.Count, 2).End(xlUp)").Select と書きましたが、全てダメでした。 直接書くのがダメなら変数を使おうと思い、 Dim StopCell as Range Set StopCell = Range("B65536").End(xlUp) Range("A10 : StopCell").Select と書きましたが、ダメでした。 このとき、変数StopCellには「セル」ではなく、「セルの値」が代入されているようです。 Valueと書いていないのに値が代入されていること、オブジェクト変数なのに数値が代入されていることが納得できません。 どこをどのように間違えているのでしょうか。 また、目的のマクロはどのようになるのでしょうか。 大村あつし著「かんたんプログラミングExcel2000VBA基礎編」および「同 コントロール・関数編」で勉強していますが解決しません。 ご教授ください。

  • エクセル VBA の行選択

    エクセルVBAで行を選択する場合 Rows(1,1).select Range(Cells(2,2),Cells(5, 5)).EntireRow.Select の方法があると知りました。 この数値の部分に変数を入れるとエラーがでてしまいました。 どうすれば変数で行を選択することができるのか教えてください。 2003を使用しております。

  • エクセルのVBAで範囲指定に変数を入れたいんですけど・・・。

    エクセルのVBAで Range("A2:B○").Select という範囲を指定するときにA1に3が入っていたら○にB3を、4が入っていたら○にB4を入れるというふうにしたいんですがやり方がわかりません。 参照できるページでもいいのでよろしければ教えていただけないでしょうか?よろしくお願いします。

  • エクセルで縦の行を自動選択する方法

    同じような質問があるのですが、どうも上手く行かないので質問させてください。 マクロのVBA?を使って自動選択したいのです。 具体的に言うとこうです。 横1行で一つのデータの括りになるので 例えばこんな感じで Range("B3:F3").Select 横の列はB3~F3まで選択し、 さらに行が増えた場合でも 縦は自動で選択されるようにしたいのです。 もしこう書けば Range("B3:F30").Select 縦の行も含め指定した範囲だけ選択されますが しかし、縦の行は自動選択(入力された最後のセルまで)したいので Range("B3:F3").Select + 縦が自動選択される記述 をご教示いただきたくご質問しました。 よろしくお願いします。

  • エクセルVBAでの範囲選択について

    はじめまして。 VBAを勉強し始めたばかりなのですが、 sub test() Range("A1:M10").Select Selection.WrapText=True End Sub とあるものを、 『InputBox』を使わずに自由に範囲選択をするように するにはどういう方法があるのですか?

  • エクセル VBA 範囲指定方法

    エクセルVBA初心者です。 以下の範囲指定について教えてください。 一つの表のK列の一番下のセル(不定)を選択→Range("K65536").End(xlUp).Select その選択されたセルからA3(固定)まで範囲を選択したいのですが、不定セル:固定セル の範囲指定方法が分かりません。 よろしくお願いいたします。

  • エクセルVBAでセル範囲選択→並べ替え

    大きなデータを選択する場合でA列には空白がない場合、 Range("A1").CurrentRegion.Select でいいと思うのですが、このデータを並べ替えようとするとき、1行から4行めには別の文字列がはいっており、5行目以下がデータであるとき、 Range("A1").CurrentRegion.Offset(4).Selectで下にさげると、最終選択範囲も下がってしまいます。 最終の範囲を変えず、開始位置を5行目にかえるにはどうすればよいのでしょうか?

  • Excel VBA セル範囲の選択方法について

    VBAのソースで、「集計バックアップ」と名前を付けた範囲を選択したいのですが、「Worksheets("記録表").Range("集計バックアップ").Select」と記述するとエラー1004が出ます。 構文的に何か問題があるのでしょうか?

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

    あるファイルのデータを別のファイルに行挿入でコピーするマクロを作ろうとしています。 コピー元の選択について、行範囲が固定であれば例えば   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アクティブセル行で列範囲選択

    マクロ A1をアクティブセルにして A:H列の行を選択するにはどう書けばいいのでしょうか? この場合A1:H1が選択されればいいのですが range("A:H " & activecell.row).select みたいな感じだとエラーになってしまいます。

専門家に質問してみよう