- ベストアンサー
ExcelのVBAで選択範囲を指定する方法
初心者でVBAに挑戦したらいきなり壁にぶち当たりました。。 誰か教えて下さい! 私のしたいことは、、 +-+-----+---+ |No|Name|状況| +-+-----+---+ |11|RARA| ○ | +-+-----+---+ |12|RURU| ○ | +-+-----+---+ |13|KAKA| △ | +-+-----+---+ |14|RERE| △ | +-+-----+---+ |15|RERA| × | +-+-----+---+ |16|KOKO| × | +-+-----+---+ 上記のような表があって、マクロを実行したら状況が○になっている行のNo・nameのセルが選択されるようにしたいんです。 ○のある行の多さは状況によって変わるので、”○”だったら選択というように指定したいと思っています。 一度「マクロの作成」機能でマクロを作ってみたんですが、 Range("A2:B3").Select のようになりました。 どうやったら○だったら、という条件が付けれますか? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。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
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
#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)のやり方を 知って欲しいと言うことでした。
お礼
返事が遅くなってすみません!お返事とってもうれしく思います(^-^) ご説明とっても分かりやすいです!! そのようにすればより分かりやすいですねー。(初心者なので) 分からなかったことも急いでいたこともあって、理解できた#1の方のを使わせていただきました。皆様ありがとうございますm(_ _)m No.1の方のを使わせていただきましたが、皆さんに教えてもらったことはとても役に立ちました!! ボタンを押したらマクロが実行されて○、△、×別の新しい表ができるというのを作りたかったんですが、値が一つも無いときにボタンを押したらおかしくなるっていう状況にはまってしまってました(^-^;) IF文を使おうにもセルの値ってどうやって取るんだろう(TT)ってなってたんですが、Cells(i,"C")="○"やNothingを教えていただいたおかげで助かりました。 色を変更することもあると思うので助かります。 本で探しても積み重ねがないから自分のしたいことができないんですよねー。 長くなりましたが(私の悪いところ(^-^;))、みなさんはどのように勉強して初心者からベテランになられましたか?? 初心者が勉強するのにいい本や、いいページがあったら教えてください。
- snoopy64
- ベストアンサー率42% (337/793)
補足1~3拝見しました。 状況が○になっている行だけを・・・という事だったら、 ・1行目を選択 ・データ→フィルタ→オートフィルタ とやると、1行目(項目名)に▼マークが付きますので、 状況の▼を押して、○を選ぶと、○だけのリストになります。 この状態のまま使うも良し、 必要な部分をコピーして別シートに貼り付けるも良し。 これとは別に、ピボットテーブルを使う方法もあります。 何しろ、おっしゃる目的だけの為だったら、マクロを使わずともできますよ! それでも、マクロはある程度知っておくと、今後発生するであろう問題の解決の役には立つと思います。 頑張ってください(^o^)丿
お礼
返事をありがとうございます! 今回は、ボタンを押したら○だけの表が別にできるというのを行ないたかったのでマクロが使いたかったのです(^-^) エクセルは2002の上級を取得するレベルには何とかなれたので、この調子でVBAも!と思ったら全く別物のようでぶち当たっちゃったんです(笑) JAVAは少しだけかすったことはあるんですがねぇ(T_T) がんばりますね♪
- imogasi
- ベストアンサー率27% (4737/17069)
>○のある行の多さは状況によって変わるので >行の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範囲となる。
お礼
返事をありがとうございます! とっても助かります!! >行のNo・nameのセルが選択されるようにしたいんです それと当然、○のある行は飛び飛びであることがあり得るのが前提ですね。 それができるっていうのが思いつかなかったので、ソートボタンを作って先にソートするという手順にしようかと思っていました(^-^;) ○のデータがある行を選択・コピーして、全く別のセルに張り付けて”○一覧”という表を作りたいんです。 1セルを選んで別のセルにコピーして、次のセルを選んで、、という手順がどのようにしたらいいのか分かりません(T_T) なので、教えて頂いたのを使わせてもらおうと思います。 理解する道は遠そうなので、先にCellsの使い方とか先に読んで勉強しますね。 ありがとうございました!!
- snoopy64
- ベストアンサー率42% (337/793)
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 適宜書き換えてください。 頑張ってくださいヽ(^。^)ノ
お礼
早速の返事をありがとうございます! 私が質問した時間から15分もかからずにメールを見て考えて書き込みをされるなんてすごいですね!! 詳しくなりたいので、プログラムの意味をがんばって理解して、利用させてもらおうと思います。 本当にありがとうございました★
お礼
みなさんすごいですね! 本当にびっくりしました。 プログラムを書き込んでもらえるととっても助かります。 がんばって意味を理解して利用させてもらおうと思います。 今日、帰り本屋さんでVBAの本立ち読みしてみたんですが、道のりは遠そうです(^-^;) ありがとうございました!!