こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBAで複数セルをコピーの制御構文

エクセルVBAで
A8~I8のセルをコピーしてJ7~R7にコピーし、2行下に移り空白セルまで繰り返すという
処理をしたいと考えています

Sub copy()

Dim i As Integer

i = 7
Do Until Cells(i, 1) = ""
Cells(Cells(i,10),Cells(i,18).Value = Cells(Cells(i+1,1),Cells(i+1,9).Value
i = i + 2
Loop

End Sub

と作ってみたところエラーで動きませんでした。

上記のプログラムはどこら辺がおかしいでしょうか?
よろしくお願いします。

投稿日時 - 2016-02-19 17:33:06

QNo.9130630

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

一見しておかしいところがわかる。セル範囲を,左上と右下の2つのセルで指定してろらえるのは、Cellsではなく、Rangeだよ。
ーー
それより言いたいのは、質問のコードを、標準モジュールにコピペすると、エラーが出て、赤字になって、どこがエラーか指摘してくれるじゃないか。
この段階で(広い意味で)VBAの文法(使い方。メソッドやプロパティの使い方)的なエラーだとわかる。
VBAの初歩的なことだが、WEBなどでの勉強のための、「検索語」を考えると、「Cells」かな。あるいは「VBA セル範囲指定」かな。
後者でやると、まず初めに出てきたのは
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html で
そこでは、Range(cell1,cell2) が初めに出てくる。
こういうWEBで調べる方法を会得しないと、前に進めないでしょう。
ーー
エクセルで基本的な要素はシートのセル、しかしエクセルVBAで基本的なのはセルの長方形的集まりのRangeなんだ。1セルはその1特殊場合という概念構成になっている。
小生は、このアイデアが、よく考えられているな、と思いつつVBAを使っている。
ーー
将来2シート以上にまたがる処理の場合は、Cellsの前に、シートやブックを特定するものを書き加える必要がある場合に出くわすかも。
ーー
小生は、個人的に
Sub test01()
i = 10
Range("J" & (i + 1) & ":R" & (i + 1)).copy Range("A" & i & ":I" & i)
End Sub
のように列記号を使う方法が好きです。ぱっと見で列が判るから。
Copyを使う方法も(書式が設定なしの場合などでは)良い面もある。

投稿日時 - 2016-02-20 17:14:53

ANo.1

>空白セルまで繰り返す

とは、どのセルが空白になるまでという意味なのか意味が解りません。
 A8セルではなく、その1つ上のセルであるA7セルから始めて、1行おきにセルの値を調べて行って、空白のセルが初めて現れた行の2行上の所までコピーを繰り返すという事なのでしょうか?(空白が初めて現れた行の1つ下の行に値が入力されているセルがあっても、関係なくその手前の所でマクロを終了する)


>上記のプログラムはどこら辺がおかしいでしょうか?

 Cells( )の中にCells( )が2つ入っていて、尚且つその2つのCells( )の間を「,」で繋げている点が間違っています。
 Cells( )だけではセル範囲を指定する事は出来ません。
 セル範囲を指定するのであれば、Range( )を使って下さい。

Sub copy()

Dim i As Integer

i = 7
Do Until Cells(i , 1) = ""
Range(Cells(i, 10), Cells(i, 18)).Value = Range(Cells(i + 1, 1), Cells(i + 1, 9)).Value
i = i + 2
Loop

End Sub

投稿日時 - 2016-02-19 18:19:43

あなたにオススメの質問