[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定シートがなかったら特定シートを新しく作る』(美鈴)
おせわになります
ご教示くださいませ。
まとめ というシートがなかった場合
新しくまとめというシートを作り
下記のマクロを使いたいです
なにとぞよろしくお願いします
Sub まとめ()
Dim sh As Worksheet
Dim lr As Long, tlr As Long
For Each sh In Worksheets
If sh.Name <> "まとめ" And sh.Name <> "List" And sh.Name <> "ID" And sh.Name <> "Bace" Then
lr = sh.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
sh.Rows("1:" & lr).Copy
tlr = Sheets("まとめ").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
Sheets("まとめ").Range("A" & tlr + 1).PasteSpecial
Application.CutCopyMode = False
End If
Next
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
既存のマクロとくっつけるのはご自身で取り組んでみて、詰まってしまったらどの部分がわからないのか提示して改めて聞いてみるとよいとおもいます。
Sub Sample()
Dim sh As Worksheet
Dim まとめシート As Worksheet
For Each sh In Worksheets
If sh.Name = "まとめ" Then Set まとめシート = sh Exit For End If Next sh
If まとめシート Is Nothing Then
Set まとめシート = ThisWorkbook.Worksheets.Add まとめシート.Name = "まとめ" End If
End Sub
(もこな2) 2018/03/05(月) 12:07
有難う御座います
参考にさせていただきます
(美鈴) 2018/03/05(月) 12:35
>If sh.Name <> "まとめ" And sh.Name <> "List" And sh.Name <> "ID" And sh.Name <> "Bace" Then
好みですけど、Select case を使ってもよいかなと思いました。
>lr = sh.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
「ActiveSheet」は「sh」の誤りではないでしょうか?
>Sheets("まとめ").Range("A" & tlr + 1).PasteSpecial
「PasteSpecialメソッド」使ってますが、引数を省略してるので、ただのPasteメソッドと同じになってるような気がします。
そして、ただのPasteメソッドであれば、COPYメソッドの引数として貼付先を渡してしまえば、Pasteメソッドの記述は不要になるとおもいます。
というのを纏めるとこんな感じになるかとおもいます。興味があれば研究してみてください。
Sub まとめ_改()
'==変数の宣言など
Dim sh As Worksheet Dim まとめSH As Worksheet Set まとめSH = ThisWorkbook.Worksheets("まとめ")
'==処理
For Each sh In Worksheets Select Case sh.Name Case Is = "まとめ", "List", "ID", "Bace"
Case Else With sh Range(.Rows(1), .Rows(.Cells(.Rows.Count, "A").End(xlUp).Row)).Copy _ まとめSH.Cells(まとめSH.Rows.Count, "A").End(xlUp).Offset(1, 0) End With End Select Next sh End Sub (もこな2) 2018/03/05(月) 15:50
もこな2さん Rangeの前に.が抜けてるよ。 (ろっくん) 2018/03/05(月) 16:56
であれば、私もつい最近知ったんですが、こんなふうに記述すると、Application.Range って解釈されて シートの指定を要しないらしいです。
http://www.moug.net/faq/viewtopic.php?t=76639
でもなんでActiveSheet.Rangeと解釈されず、Application.Rangeって解釈になるのかは、実はよくわかってない・・・とりあえずテストではエラーにならず動作してます。(Excel2013でチェック済み)
(もこな2) 2018/03/05(月) 22:14
もこな2さん へぇ〜勉強になりました。 Rangeの場合シートを省略するとActiveSheetが対象となる、と思ってました。 Applicationのメンバにあるんですね〜。
そういえば、関数でも昔はApplication.SumやApplication.Matchなんて 書き方していたのを思い出しました。
トピ主さん場所をお借りしてすみません。
(ろっくん) 2018/03/06(火) 08:41
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.