- ベストアンサー
セルが空白だったらExitSub
いつもお世話になっております。 問う方Excel97でシートAのD列のデータを シートBに自動コピーさせるVBAを思考中。 D列のデータが無くなったらLoopを止めるように 条件をつけたいのですが、どう書いたものか困っております。 ちなみに、セルの指定もコピーを書きこんだら次の行を見に行かせる為に、引数?を使用しています。 どなたか、教えて下さい。 宜しくお願い致します。
- A-TOM
- お礼率100% (5/5)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あまりにも簡潔すぎて私には理解が難しいですが、 以下のようにすれば出来ますけど。 解説: ループでやっているということなので、以下のようになります。 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
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
データの性格が不明なため、最終登録行を求めるようにしてみました。 データの途中に未登録行があっても構いません。 最下行(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
お礼
ご回答、ありがとうございました。 私が作成したかったのは下記がやりたかったからなんです。 先に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 _ 全くの初心者です よろしくお願いします
- ベストアンサー
- Visual Basic
- ある条件を満たすセルに対応する行のセル内容をコピーして・・
ある条件を満たすセルに対応する行のセル内容をコピーして・・ いつもお世話になっております。エクセルVBAのほぼ初心者です。 ある列の一部(たとえばE100~200)において、ある条件を満たすセル(たとえば<30)を すべて検索して(たとえばE110とE130)、そのセルの行にある別列のセル内容(たとえば A110とB110、およびA130とB130)をコピーして、別のワークシートのとある場所(たとえ ばB2)に貼り付ける。 というようなマクロを作成したいのですが、自分の力量では難しいのです。。 Do~Loopなどを利用すればよいのでしょうか? いい方法がありましたらどうぞよろしくお願いいたします。
- ベストアンサー
- Visual Basic
- excel2010の空白セルのある行の削除方法
Excel2010を使っております。 2列以上の多数の行からなるデータに、空白のセルがあちこちに散在している状態で、 ”検索と選択"→"ジャンプ"→"セル選択"で空白セルを指定して、行のみ削除をすると、いずれかの列が空白である行がOR条件で削除されてしまいます。 全部の列が空白(AND条件)の行のみを削除する方法を教えてください。(画像を添付いたします) 宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- セルの場所
エクセルVBAにて、 指定した列から「検索」を使って該当のセルを選び出し、(1)そのセルの行をコピーして別シートに貼り付けるマクロを組みたいのですが、(1)以降の処理がどうしても組めません。officeは2000を使っています。 宜しくお願いします。
- ベストアンサー
- Visual Basic
- "0"だけを空白で返すには?
Excel2000を使用しています。VBAである文字列データ(数値)を必要な長さに分割してシートの1行目から順にセルに貼り付けています。 例)要素数が20個ならA1セルからA20セルまでに その際数値が”0”の時は空白に置換して貼り付けているのですが、「10.3」や「50.6」などの”0”までなくなってしまい、セルに貼り付けた際「1.3」や「5.6」になってしまいます。 純粋に”0”だけ空白に(置換)してセルに貼り付けるにはどうすればいいのでしょうか?教えてください。
- ベストアンサー
- Windows XP
- 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など参照リンクをコピーで作成できないでしょうか。 よろしくお願いいたします。 横並びに参照する必要があるのですが、
- ベストアンサー
- Excel(エクセル)
お礼
ご回答、ありがとうございました。 私が作成したかったのは下記がやりたかったからなんです。 先にchkをtrueにしておき、 Do While chk = True '*処理内容 If Cells(lIdx, 4).Value = "" Then chk = False End If lIdx = lIdx + 1 Loop ↑で処理をします。 本当に助かりました。 ありがとうございます。