下記コードは何とか動作しますが、チェックお願い致します。
1、 MsgBox "「 空白シート 」 は ありません。"
の
追加編集が、よくわかりません。
2、 1以外に、おかしな箇所をご教示お願い致します。
---------------------------
'「 ブック1 」 に空白シートがあったら、そこへ貼り付ける
Sub 空白シートへコピー()
Dim ws As Worksheet
For Each ws In Workbooks("ブック1.xls").Sheets
If IsEmpty(ws.UsedRange) = True Then
Workbooks("ブック2.xls").Activate
Cells.Select
Selection.Copy
Workbooks("ブック1.xls").Activate
ws.Select
Range("A1").Select
ActiveSheet.Paste
Else
MsgBox "「 空白シート 」 は ありません。"
End If
Next
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは。
私も作ってみました。私なら、だいたいは、こんな風です。
シートが空か調べるのは、通常は、WorksheetFunction.Count を使ったほうが速いです。
ただ、ワークシート関数を使うことをためらうときもありますが。
参考にしてみてください。
本来は、
Workbooks("ブック2.xls").Activate や
以下のWorkbooks("ブック2.xls").ActiveSheet
は、明示的に、シートを指定したほうがよいです。
Sub 空白シートへコピー3()
Dim wsh As Worksheet
Dim wsh2 As Worksheet
Dim flg As Boolean
Set wsh2 = Workbooks("ブック2.xls").ActiveSheet
For Each wsh In Workbooks("ブック1.xls").Worksheets
If WorksheetFunction.Count(wsh.Cells) = 0 Then
wsh2.Cells.Copy wsh.Range("A1")
flg = True
End If
Next wsh
If flg = False Then
MsgBox "「 空白シート 」 は ありません。"
End If
Set wsh2 = Nothing
End Sub
ご回答、誠に有難うございます。
確かに、早いです。
シート指定を忘れてました。
「Select」の使用が、まだ時間がかかるようでございます。
No.1
- 回答日時:
元のソースを生かすとして、以下ではどうですか。
「空シート有無」の判定はFor Each~Next文の外に無ければいけません
Sub 空白シートへコピー()
Dim ws As Worksheet
Dim psw As Boolean
For Each ws In Workbooks("BOOK1.xls").Sheets
If IsEmpty(ws.UsedRange) Then
Workbooks("BOOK2.xls").Activate
Cells.Copy
Workbooks("BOOK1.xls").Activate
ws.Select
Range("A1").Select
ActiveSheet.Paste
psw = True
Exit For
End If
Next
If psw = False Then
MsgBox "「 空白シート 」 は ありません。"
End If
End Sub
でもこのような空きシートを探すロジックが必要ですか?
BOOK1にシートを追加してコピーするか、BOOK2のシートをBOOK1に直接コピーするのが現実的なロジックではないでしょうか
ご回答、誠に有難うございます。
>元のソースを生かすとして、
わざわざ、このようにして頂いたおかげで、No.2様との違いがとても体感できました。
>でもこのような空きシートを探すロジックが必要ですか?
ちょくちょくと、このようなシートが存在することがありました為でございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について教えて...
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
北九州市にあった「井筒屋ブッ...
-
WorkBooksをオープンさせずにシ...
-
シート3枚あるはずが1枚しか...
-
Excelでブックの共有を掛けると...
-
行、列の挿入がリンク先に反映...
-
【ExcelVBA】シートをそれぞれ...
-
エクセルで50行ごとに区切った...
-
Excel VBAでブックを閉じる時、...
-
EXECLの変更を保存せずにブック...
-
Excelで、複数ブックの複数シー...
-
エクセルで別ブックをバックグ...
-
リンク元ブックのPWが分からな...
-
VBA: ブックをアクティベイトで...
-
外部ブック参照が#REF!になって...
-
エクセルで参照しているデータ...
-
captionの値と実際の表示名が合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelで複数ブックの同一セルに...
-
VBA バックグラウンドで別ブッ...
-
エクセルで50行ごとに区切った...
-
エクセルで「ディスクがいっぱ...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルシートの一部を送りたい
-
エクセル2016です。「ブッ...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
複数ファイルから特定シートの...
おすすめ情報