• ベストアンサー

セルが空白だったらExitSub

いつもお世話になっております。 問う方Excel97でシートAのD列のデータを シートBに自動コピーさせるVBAを思考中。 D列のデータが無くなったらLoopを止めるように 条件をつけたいのですが、どう書いたものか困っております。 ちなみに、セルの指定もコピーを書きこんだら次の行を見に行かせる為に、引数?を使用しています。 どなたか、教えて下さい。 宜しくお願い致します。

  • A-TOM
  • お礼率100% (5/5)

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

  • ベストアンサー
  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.1

あまりにも簡潔すぎて私には理解が難しいですが、 以下のようにすれば出来ますけど。 解説: ループでやっているということなので、以下のようになります。 Dim lIdx as long '行ループ変数 Dim lTargetCol as long '指定列 lIdx = 1 lTargetCol = 4 'D列を指定 Do   If Cells(lIdx, lTargetCol).value = "" Then Exit Sub   'ココに何か処理が入ります。   lIdx = lIdx + 1 Loop Do~Loopのところはこうでもいいです。 Do Until Cells(lIdx, lTargetCol).value = ""   'ココに何か処理が入ります。   lIdx = lIdx + 1 Loop

A-TOM
質問者

お礼

ご回答、ありがとうございました。 私が作成したかったのは下記がやりたかったからなんです。 先にchkをtrueにしておき、 Do While chk = True '*処理内容 If Cells(lIdx, 4).Value = "" Then chk = False End If lIdx = lIdx + 1 Loop ↑で処理をします。 本当に助かりました。 ありがとうございます。

その他の回答 (1)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

データの性格が不明なため、最終登録行を求めるようにしてみました。 データの途中に未登録行があっても構いません。 最下行(Excel97以降は65536行目)から上方向に最終登録行を調べたほうが汎用的でしょう。 後は For~Next でまわせます。 個人的にはセル単位で書くのは余り行いません。時間がかかるし・・・  CopyTest2はセル範囲をコピーしています。  CopyTest3は列を丸ごとコピーしていいならLoopの必要はなくなります。 後、  Endプロパティ、  CurrentRegionプロパティ、  SpecialCellsメソッド、  UsedRangeプロパティ、  Resizeプロパティ などはセル操作を効果的にすることができます。Helpにあります。ご参考に。 'セル単位でコピー Sub CopyTest1()   Dim rw As Long '行カウンタ   Dim col As Integer '列カウンタ   With Worksheets("A")     'D、E列をコピーする(Cells(行数,列数)でD列=4、E列=5)     For col = 4 To 5       '各列で入力された最後のセルの行を求める       'Cells(65536, col)は一番下のセル。上方向に入力された最後のセルを求める       '開始行は1行目にしてある       For rw = 1 To .Cells(65536, col).End(xlUp).Row         'コピーの例。同じセル番地にコピーしている         Worksheets("B").Cells(rw, col) = .Cells(rw, col)       Next     Next   End With End Sub 'セル範囲をコピー Sub CopyTest2()   With Worksheets("A")     .Range("D1:D" & .Range("D65536").End(xlUp).Row).Copy Destination:=Worksheets("B").Range("D1")   End With End Sub '行を丸ごとコピーしていいなら・・・ Sub CopyTest3()   Worksheets("A").Range("D:D").Copy Destination:=Worksheets("B").Range("D:D") End Sub

A-TOM
質問者

お礼

ご回答、ありがとうございました。 私が作成したかったのは下記がやりたかったからなんです。 先にchkをtrueにしておき、 データが無くなったらLoopを抜けるというのが 作りたかったんです。 Do While chk = True '*処理内容 If Cells(lIdx, 4).Value = "" Then chk = False End If lIdx = lIdx + 1 Loop 勉強になりました。 ありがとうございました。

関連するQ&A

  • エクセルで空白のセルを探して貼り付け

    エクセルVBAでSheet2の指定のセルをコピーして、 Sheet1にある表の中の指定の列の空白セルを探して貼り付けるVBAを作成したいのですが、うまく出来ません。 Sheet1の表は1行目、2行目は見出しの項目が並んでいます。 3行目から50行目までは値を入力するようになっていて、 51行目はそれらをの集計が表示されるようになっています。 下記のVBAを作成したら3行目~50行目までの空欄に貼り付けず、 52行目に貼り付けてしまいます。 ----------------------------------------------------------- Sheets("Sheet2").Range("B6").CurrentRegion.Copy Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial xlPasteValues Application.CutCopyMode = False ------------------------------------------------------------ 修正して頂けないでしょうか? 宜しくお願いします。

  • 空白セルをデータと認識してしまいます

    Excel2003を使用しています。 「マクロの記録」を使って、あるリストを自動作成 しようとしているのですが、うまくいきません。 A,B2つの列に分かれたデータを連結させるため、 C列に「CONCATENATE」関数を入れて適当な行まで コピーします。(それ以上はデータが入らないだろうと思われる100行目ぐらいまで) その後C列をコピーし、「値貼付け」をして 関数を値に変えます。 そうすると、たとえば実際には20行目までデータが 入っていたとすると、21行目~100行目までは 空白になりますよね? でも、どうもその空白行もデータとみなされている ようなんです…。 Range("C2").End(xlDown).Row で下端セルを探そうとすると、100行目に なってしまいますし、「ジャンプ」で空白セルを 探しても、同じ結果になります。 空白セルを選んで一度「Delete」を押すと 正しく「空白」と認識するようなのですが…。 「実際にデータの入っているセルとそうでないセル」 を自動で判別させたいので、 簡単に「何も入っていないセルを”空白”と正しく 認識させる方法」はありませんでしょうか?

  • シート内の一部のセルを別シートにコピー

    Excelのマクロ(VBA)の記載方法について お分かりになる箇所だけでも結構ですので、 どなたかご教授を願い致します。 シートX   A    B   C  1 data1 data2 data3 2 x   data7 data8 3 data4 data5 data6 4 data7 data8 data9 シート Y   A   B   C    D 1 length 3  (任意) (任意) 2 xxxx (任意) (任意) (任意) 3 zzz  (任意) (任意) (任意) 4 (空白)(任意) (任意) (任意) 上記のような2つのシート(同一Excelファイル内)があって、 シートXの一部のセルを次の条件(1~4)でシートYにコピーしたい場合 1.コピー元の列の数は、シートYの "length"と書かれたセルの右となりの数字   とする(上記では3なので、A,B,C列をコピー対象) 2.コピー元の行の数は、シートXの1~4行目までとするが、   シートXのA列のセルが"x"だったら、その行は全てコピーしない。 3.コピー先(Y)の列は、コピー元(X)の列と一つずれてコピー(BならCに、CならDに) 4.コピー先(Y)の行は、シートYのA列で1行からで始めて空白セルになった行からコピー開始。 (上記では、A列で空白セルのある4行目からコピー) 上記条件で、下記のシートYを作成したいのですが、 この場合どようなマクロ(VBA)で実現できますでしょうか。 コピー結果(シートY)  A     B   C   D 1 length  3  (任意) (任意) 2 xxxx  (任意) (任意) (任意) 3 zzz   (任意) (任意) (任意) 4 (空白) data1 data2 data3 5 (任意) data4 data5 data6 6 (任意) data7 data8 data9

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • ある条件を満たすセルに対応する行のセル内容をコピーして・・

    ある条件を満たすセルに対応する行のセル内容をコピーして・・  いつもお世話になっております。エクセルVBAのほぼ初心者です。 ある列の一部(たとえばE100~200)において、ある条件を満たすセル(たとえば<30)を すべて検索して(たとえばE110とE130)、そのセルの行にある別列のセル内容(たとえば A110とB110、およびA130とB130)をコピーして、別のワークシートのとある場所(たとえ ばB2)に貼り付ける。  というようなマクロを作成したいのですが、自分の力量では難しいのです。。  Do~Loopなどを利用すればよいのでしょうか?  いい方法がありましたらどうぞよろしくお願いいたします。

  • excel2010の空白セルのある行の削除方法

    Excel2010を使っております。 2列以上の多数の行からなるデータに、空白のセルがあちこちに散在している状態で、 ”検索と選択"→"ジャンプ"→"セル選択"で空白セルを指定して、行のみ削除をすると、いずれかの列が空白である行がOR条件で削除されてしまいます。 全部の列が空白(AND条件)の行のみを削除する方法を教えてください。(画像を添付いたします) 宜しくお願いいたします。

  • セルの場所

    エクセルVBAにて、 指定した列から「検索」を使って該当のセルを選び出し、(1)そのセルの行をコピーして別シートに貼り付けるマクロを組みたいのですが、(1)以降の処理がどうしても組めません。officeは2000を使っています。 宜しくお願いします。

  • "0"だけを空白で返すには?

    Excel2000を使用しています。VBAである文字列データ(数値)を必要な長さに分割してシートの1行目から順にセルに貼り付けています。 例)要素数が20個ならA1セルからA20セルまでに その際数値が”0”の時は空白に置換して貼り付けているのですが、「10.3」や「50.6」などの”0”までなくなってしまい、セルに貼り付けた際「1.3」や「5.6」になってしまいます。 純粋に”0”だけ空白に(置換)してセルに貼り付けるにはどうすればいいのでしょうか?教えてください。

  • ExcelVBAで複数セルを別シートに貼り付けたい

    Excel VBAでデータをコピーして、別シートに貼り付けるどうしたらいいのでしょうか。 Sheet1のセルA1からA4のデータをコピーして、Sheet2のC2からc5に貼り、次はSheet1のセルB1からB4のデータをコピーしてSheet2のC7からc10に貼りを500行ほど繰り返し(コピーするデータは、4行づつ横へ移動し、貼り付けるほうは4行づつ縦へ移動します。) それが終わったら、今度はB列、c列と100列ほど同じ操作を繰り返します。 いろいろな方法を試しましたが、なかなかうまくいきません。 どなたか教えていただけませんでしょうか。よろしくお願いいたします。

  • Excelセルの参照

    Excelにdataとnという2シートがあります。dataシートのA列3行目~22行目にデータが縦入力されており、以降B列、C列とデータ入力が繰り返されます。 nシートでdataシートの入力値参照のため、あらかじめdataシートの参照リンクを貼っておきたいのですが、nシートのデータは横並びであるせいか、参照リンクをうまくコピーすることができません。 dataセルのA3セルの値をnシートのD1に=data!A3と貼り付けて、W1(=data!A22)まで数式を自動コピーできないでしょうか。また、D2~W2まで=data!B3~=data!B22など参照リンクをコピーで作成できないでしょうか。 よろしくお願いいたします。 横並びに参照する必要があるのですが、