[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『選択したセルが空白ならマクロ停止』(黒人)
OS:XP
EXCEL2003です
A B 1 a a 2 c c 3 d 4 f 5 A列に手打ちしてあるデータがあります。 @一番上(a)をコピー。 A隣のB列に貼り付けます。 Bその後あるマクロを実行。 C@で選択したセル(a)の一つ下(c)が空白なら終了。 この場合空白ではないのでコピーしてB列に貼り付け。 ・・・といった動作を繰り返し、最終的にA列が空白のところまで行ったら このマクロを終了したいのです。 条件付でマクロを繰り返し、終了するやり方を教えてください。
@とAは、マクロ実行前の手作業だよね。 で、@はA1を選択してCtrl/c かな。次にAでは、当然B1を選択してCtrl/vかな。 このAを行ったとき、もう@の状態(A1が選択された状態)がどうだったか、誰もわからない。 なので、Bここからマクロ実行して、Cで@のセルはどこだったのか判断できないよ。
やるなら、Bでマクロ実行させる前に、まずA1を選択させる。で、マクロを開始。 でも、この処理って、どんな意味があるんだろう? 単純に、A列の値のあるセルの値をB列に転記というのならわかるけど・・・
(ぶらっと)
Sub 条件付でマクロを繰り返し() Dim r As Long r = 1 Do While Cells(r,"A").Value <> "" Cells(r,"B").Value = Cells(r,"A").Value あるマクロ r = r + 1 Loop End Sub Sub あるマクロ() MsgBox "中は秘密?" End Sub ってことでしょうか。 (Mook)
>@からCまですべてマクロで実行です。
じゃぁ、Mookさんからお答えが出ているコードのなかの 「あるマクロ」を消せばできあがり。
そのほかの方法としては、A列をコピーしてB1に貼り付ける、これをマクロ記録すれば以下のMacro1ができあがる。 それを、少しブラッシュアップしたのがSample1。ある行から下は、たとえ値があってもコピーしたくないという 要件じゃなければこれでもいい。 さらにSample2のような方法もある。いずれもループなし。
Sub Macro1() Columns("A:A").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub
Sub Sample1() Columns("A").Copy Range("B1") End Sub
Sub Sample2() With Range("A1", Range("A1").End(xlDown)) .Offset(, 1).Value = .Value End With End Sub
(ぶらっと)
B が何かを説明した方が良いのではないでしょうか。 一回コピーするあとに何をしているのでしょう。 ただコピーするだけなら、ぶらっとさんの Sample で済んでしまいます。 (Mook)
>一回コピーするあとに何をしているのでしょう。
ですね。きっと。であれば、もう、Mookさんのコードそのものでいいわけで、以下は単に 別の記述方法ということで、Mookさんのコードと基本的にかわらないけど。
Sub Sample3() Dim c As Range
For Each c In Range("A1", Range("A1").End(xlDown)) If Len(c.Value) = 0 Then Exit For c.Offset(, 1).Value = c.Value 'ここでなにかしらの処理をする。あるいは以下のように必要な情報を引数であたえて、サブプロシジャを実行する。 Call サブマクロ(c.Offset(, 1)) Next
End Sub
Private Sub サブマクロ(myR As Range) MsgBox "処理すべきセルは" & myR.Address & vbLf & "処理すべき値は" & myR.Value End Sub
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.