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

解決済みの質問

エクセル マクロでの繰り返し処理について

エクセル初心者です。エクセル2010を使用しています。
とあるホームページから、ページをコピーして、エクセルに「テキストで貼り付け」をおこない、
A列に8行の項目が入ります。この8行と次の8行の間には、自然に空白行が1行ずつ入ります。
これは、完全に手作業です。

次に、下記の作業を、マクロの自動記録を相対参照で行います。

上記のエクセルのデータを、1つめの8行のデータをコピーして(A1からA8)、C1に「行と列を入れ替え」を選択してC1からJ1に貼り付けます。
その後は、次のデータのまとまりのA10のセルに移ります。これをCtrl+a を押し続けることで、数百件か多いときは4000件ほどの並べ替えをしています。

「データがある間は、この処理を繰り返す。」
というマクロにしたいのですが、参考書等を見ながらチャレンジしてもうまくいきません。
わかる方、教えていただけますか。

以下が、マクロの自動記録でできた物です。データの個数は数百のこともあれば4000件のこともあります。

Sub 行列入れ替え8行()
'
' 行列入れ替え8行 Macro
'
' Keyboard Shortcut: Ctrl+a
'
ActiveCell.Range("A1:A8").Select
Selection.Copy
ActiveCell.Offset(0, 2).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
ActiveCell.Offset(9, -2).Range("A1").Select

End Sub


どうぞ、ご指導よろしくお願いいたします。

投稿日時 - 2011-02-22 17:00:40

QNo.6542368

困ってます

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

"クール"なやり方もきっと色々あると思いますが,折角そこまで作ったのですからもう少し手を入れるだけで作成してみます。


Sub 行列入れ替え8行()
'
' 行列入れ替え8行 Macro
'
' Keyboard Shortcut: Ctrl+a
'

’繰り返しの開始
 do

 ActiveCell.Range("A1:A8").Select
 Selection.Copy
 ActiveCell.Offset(0, 2).Range("A1").Select
 Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
 False, Transpose:=True
 ActiveCell.Offset(9, -2).Range("A1").Select

’繰り返し条件
 loop until activecell = ""

End Sub



#幾つかのポイント
実際に貼り付けるデータで,たとえば「8行」の中に空白で入ってくるデータがあるのか無いのかでも,マクロの組み方が変わってくることもあります。
上述サンプルでも「8行の先頭が空白で入ってくることは無い」という未確認の前提を置いているワケですが,場合によっては「シートの最後の行」をキチンと把握してそこまで繰り返すといった作り方をすることも多いです。
例:
loop until activecell.row >= range("A65536").end(xlup).row

投稿日時 - 2011-02-22 17:43:17

お礼

keithin様、

ありがとうございます!
できました!自分でも、もっと勉強しなくちゃ!です。
ありがとうございました。

投稿日時 - 2011-02-22 18:22:38

ANo.1

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

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

回答(3)

ANo.3

1セルだけの操作、1列だけの操作なんてのは自動マクロ作成に任せたらできます。

繰り返しや判定分岐、要は骨組みのが考えて勉強するところ。
DO文とFOR文、その使い分け、一度にたくさんやって欲しいならここの小さい機能よりこちらが先。終了判定おかしいと終わりませんから大事。

投稿日時 - 2011-02-24 12:15:08

ANo.2

参考

http://www.voicechatjapan.com/excelvba/VBArei2.htm
ここに基本構文もあります。

例えば、
ActiveCell.Offset(9, -2).Range("A1").Select
の9や-2、"A1"は変数で持たせることによって、
いろんなセルを指定できます。
ActiveCell.Offset(x, y).Range(z).Select

投稿日時 - 2011-02-22 20:37:55

お礼

 
 lavv様

 ありがとうございます。
 教えてくださったサイトも見せていただきました。私はまだまだ勉強不足で、
 書いてあることがすぐには理解できませんが、試しながら、できるようになりたいと思います。

 自分でマクロを1から書くことはできないのですが、自動記録したものに少し手を加えて、
 使いやすくなればと思います。

 ありがとうございました。
 

投稿日時 - 2011-02-23 17:49:42

あなたにオススメの質問