プロが教えるわが家の防犯対策術!

a1からa100までをマクロを使ってb1に順にコピーしたい。その場合、セルの内容が空になったところで、その作業を終えたい。

A 回答 (5件)

Rangeオブジェクトの「Find」メソッドが空白セルや指定の文字列などをのセルの行番号(Row)を取得するのに便利です。


下記の例では指定範囲を定義(Set)し、その定義範囲で最初の空白セルの行番号を取得できるので、その1行上(-1)が空白でない最後のセルになります。そこで、その最後のセルまでループ処理(For~Next)します。
Option Explicit
Public Sub GetData()
Dim rCol As Range, lngRow As Long, i As Long
Set rCol = Range("A1:A100")
lngRow = rCol.Find("").Row
For i = 1 To lngRow - 1
Range("B" & i) = rCol(i)
Next i
End Sub

この回答への補足

貴重な回答ありがとうございました。試行錯誤している部分を具体的にお知らせしますのでご教示下さい。(1)シート1にb19:j54の表があります。(2)c19が空でなければその左のb列のデータ(b19)をb16(これは固定です)へコピーします。(3)シート2のC5:M69を印刷します。(4)c20が空でなければその左のb列のデータ(b20)をb16(これは固定です)へコピーします。(5)この作業をc54まで行います。(最大36回)(6)c列が空のところで作業を終了します。シート1のc列を点検して空でなければ同じ行のb列の値をb16へ入れ、シート2を印刷する。c列が空のところで作業を終了する。このようなマクロを組みたいのですが、教えてください。

補足日時:2008/11/17 12:44
    • good
    • 0

diashunです。


補足を拝見しましたが、これではコーディングソースを作ってくれという内容に受け取れます。OKWaveは質問者に、回答者がその経験に基づくヒントやアイデア、参考となるURLなどを提供し、質問者のスキルアップの手助けをする場であり、仰るようなご要求はソース作成の下請け的なことを回答者に求めている状態と思います。ご要求の内容は経験豊富な回答者(アンサリスト)には困難でもなんでもありませんが、前述の趣旨に則り、今回のご要求には応じられませんので、悪しからず。
    • good
    • 0
この回答へのお礼

ご指摘最もです。実は始め質問した折り、他の回答者の中で、「もっと具体的に尋ねなさい」と言うご指摘があり、知りたかったのはその中のごく一部でしたが縷々細かく書いてしまいました。自分は昔からロータスでマクロを組む習慣があり、エクセルに乗り換えてからも、エクセルマクロの基礎的なところが分かっておらず、先回のような質問をしました。メールをいただき反省し、昨日からエクセルのヘルプなどを確認したところ分かりました。今後ともよろしくお願いします。ありがとうございました。

お礼日時:2008/11/18 13:48

>b1に順にコピーしたい


とは,b1から順にB100までコピーしたいのこと。
B1ひとつの表現になっていて不適当でしょう。
ーー
一般には
Sub test02()
d = Range("A101").End(xlUp).Row
Range("A1:A2" & d).Copy Range("B1")
End Sub
が質問の回答かな。
ーーーー
全般にどういう場面で使おうとしているかもわからないが
マクロまでを考えるなら
A列の当たる列の選択
A100に当たる行の選択
B1にあたるスタートセルの選択
を考えないと、意味無い(勉強にもならない)と思うよ。
>セルの内容が空になったところで、その作業を終えたい。
だからA列のデータをB列など指定セルを先頭セルに、コピーしたいと
質問しないと勉強にならない。
B1:b100までに後半データがなければ、
Sub test01()
Dim a As Variant
a = Range("A1:A100")
Range("B1:B100") = a
End Sub
でも不都合が無いのでは(値だけ移るが)
    • good
    • 0

Do Loop 或いは For Nextの使い方でしょうか


A1~A100の途中に空白はないとして
Sub TEST1()
i = 1
Do While Cells(i, 1).Value <> ""
Cells(i, 2).Value = Cells(i, 1).Value
i = i + 1
Loop
End Sub
途中に空白がある場合でデータの入っている最後の行まで
Sub TEST2()
For i = 1 To Range("A65536").End(xlUp).Row
Cells(i, 2).Value = Cells(i, 1).Value
Next
End Sub
とか参考にしてみてください。
    • good
    • 0

Range("A1:A100").SpecialCells(xlTextValues).Copy Range("B1")


とか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!