人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelのマクロを生まれて初めて触っています。
業務上、必要に迫られて、すぐに何とかしなければいけないのですがうまくいきません。

Sub シート結合()
Dim S1 As Worksheet
Dim i As Integer
Dim j As Integer
Dim r As Range

Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
Set S1 = ActiveSheet

j = 1
For i = 1 To Sheets.Count
For Each r In Range("A1", Range("A65536").End(xlUp))
If r.Value = "" Then Exit For
r.EntireRow.Copy S1.Cells(j, 1).EntireRow
j = j + 1
Next r
Next i
End Sub

マクロを実行したら、新規にシートを作成し、他のシートに書いてある全てのセルの中身をコピーしたい

マクロを実行しても、新規シートは作成されるが何もコピーされてこない、という状況です。
誰か直して下さい。

そもそも考え方が違うよ、こんな書き方しなくても全然違う書き方でスマートにやれるよ、というのも大歓迎です。
VBAに初めて触れてまだ3時間ほどなので、そこらへんは全然分かっていないので。
基礎からやれよ、という回答はご遠慮下さい。重々承知の上で、しかし時間がないのでやむなくなのです。

●質問者: nacbox
●カテゴリ:コンピュータ
✍キーワード:A1 ADD AS Excel EXIT
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ota2244
●50ポイント

記載のソースからなるべく近い形で作ってみました。


Sub シート結合()

Dim lRow As Long

Dim lCol As Long

Dim lIdx As Long

Dim oSheet As Worksheet

Dim oSheetNew As Worksheet

Dim oCell As Range


Worksheets.Add.Move after:=Worksheets(Worksheets.Count)

Set oSheetNew = ActiveSheet


lRow = 0

For lIdx = 1 To Worksheets.Count - 1

Set oSheet = Worksheets(lIdx)

For Each oCell In oSheet.Range("A1", "A65536")

'データの存在しない行を見つけた場合は次のシートへ

If oCell.Text = "" Then Exit For

lRow = lRow + 1

oSheet.Rows(oCell.Row).Copy

oSheetNew.Rows(lRow).PasteSpecial

Next

Next

End Sub

◎質問者からの返答

おおお、ありがとうございます。

見事に実行されました。

私の作ったソースに沿って書いて頂いたお陰で、自分のソースの何がいけないのか、勉強になって助かります。

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


2 ● SALINGER
●50ポイント ベストアンサー

こんな感じでできます。

Sub シート結合()
 Dim S1 As Worksheet
 Dim i As Integer
 Dim j As Integer
 Dim r As Range
 
 Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
 Set S1 = ActiveSheet

 j = 1
 For i = 1 To Worksheets.Count - 1
 Worksheets(i).UsedRange.Copy Destination:=S1.Range("A" & j)
 j = j + Worksheets(i).UsedRange.Rows.Count
 Next i
End Sub
◎質問者からの返答

ありがとうございます!

こちらはまた、最適化していただいて、短い時間の勉強では一度も見たことのない書き方とかがあって、やはり泥縄では駄目ですね。

実行速度も速くて助かりました。

とりあえず動いたらすぐに客先に見せなければいけないので、後回しにはなりますがのちほどじっくりリファレンス片手に勉強させていただきます。

回答いただいたお二人ともいるかにしたいところなんですが、いるかは一人しか付けられないので、悩みましたが、実際に使用させていただいたSALINGERさんにいるかします。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ