No.6ベストアンサー
- 回答日時:
> ダイアローグシートが入っているとそこでエラーになるようです。
なるほど納得で~す。グラフだけで、これを入れないでテストしていました。
ダイアログって始めて操作しました。参考になった点があって良かったです。
>ワ-クシート以外のシートはコピー不要です。
そうだったんですか。最初に確認すべきでしたね。
今度は、大丈夫と思います。
Sub test()
Dim NewObj As Workbook
Dim Sh As Integer
Dim Shn As String
Dim Shc As Integer
Dim N As Integer
Set NewObj = Workbooks.Add
Application.DisplayAlerts = False
For Sh = 1 To ThisWorkbook.Worksheets.Count
ThisWorkbook.Activate
Shn = Worksheets(Sh).Name
If Worksheets(Sh).Range("A1").Value = True Then
Shc = Shc + 1
Worksheets(Sh).Cells.Copy
If Shc > NewObj.Sheets.Count Then
NewObj.Sheets.Add after:=Sheets(NewObj.Sheets.Count)
End If
NewObj.Sheets(Shc).Activate
Selection.PasteSpecial Paste:=xlValues
Selection.PasteSpecial Paste:=xlFormats
For N = 1 To NewObj.Sheets.Count
If NewObj.Sheets(N).Name = Shn Then
NewObj.Sheets(N).Delete
Exit For
End If
Next N
ActiveSheet.Name = Shn
ActiveSheet.Range("A1").Select
End If
Next Sh
NewObj.Sheets(1).Select
NewObj.SaveAs "C:\bbb.xls"
NewObj.Close
Application.DisplayAlerts = True
Set NewObj = Nothing
End Sub
何度もすみません。今度はうまく行きました。有難うございます。
最後にもう一つだけ教えて下さい。
保存する時の保存場所、および新しいファイルの名前はそのとき操作する人間が任意で設定するためにはどうすればいでしょうか?
No.7
- 回答日時:
> 保存する時の保存場所、および新しいファイルの名前はそのとき操作する人間が
> 任意で設定するためにはどうすればいでしょうか?
具体的にどの時点で、どのような方法で指定したいのかが分からないので、
いろいろな方法があって、いちがいには言えません。
まぁ、操作性が良いのではないかと思われる方法として、セルA1に TRUE と入力
した一番左側のシートで、セルA2とかに フォルダ名を、A3にファイル名を記述する
方法ですね。
フォルダ名、ファイル名とも幾つか選択するような状況なら、コンボボックスで
リストから指定するようにすれば良いでしょう。
あとは、マクロ起動時、ダイアログを出して、入力する方法もあります。
ただ、既設のホルダ名でないといけませんので、その辺をチェックするコードが
必要になるでしょう。
No.5
- 回答日時:
Excel97 SR-1 で確認しましたが、正常に動作します。
イミディエイトウィンドウに下記のように記述すると 3とか -4167 の
数字が返りませんか?
? Sheets(1).type<Enter>
また、同じように下記のように記述すると -4167 が返りませんか?
? xlWorksheet<Enter>
-4167
VBEのメニューから[ツール]-->[参照設定]で「参照不可」になっている
ライブラリーは、ありませんか?
ありましたら、設定をやり直してください。
SRも確認してください。
この回答への補足
ありがとうございます。
さきほどのエラーは自宅のエクセル2000での結果です。
ワ-クシート以外のシートはコピー不要です。
イミディエイトウィンドウに下記をコピー&ペーストしエンターキーをおしたら「コンパイルエラー 修正候補 式」と出ました。
「参照不可」になっているライブラリーは、ありませんでした。
よろしくおねがいします。
原因がわかりました。
いろいろテストしてみたところ元のファイルがワークシートだけで構成されていればうまく動くのですが、ダイアローグシートが入っているとそこでエラーになるようです。
どう書き換えればいいのでしょうか?お手数をおかけしますがよろしくお願いします。
No.4
- 回答日時:
そうですか。
Excel97 では、確認しませんでした。それでは、お聞きしますが、先程も書きましたが、
> グラフシートやダイアローグシートが入っています
というこの「グラフシートやダイアローグシート」は、新しい
ブックにコピーするのですか?しないのですか?
No.3
- 回答日時:
新規で作ってみましたのでテストしてみてください。
ただ、質問内容に書いてある、下記のことですが
> (AAA.xls にはワークシート以外にグラフシートやダイアローグシートが
> 入っています。)
これは、入っているから、どうするということを書かないと、どうすれば
いいのか分かりません。
取り敢えず、ワークシート以外は、そのままコピーするようにしました
ので、不要の際は、修正してください。
Else の3行を削除すればいいでしょう。たぶん。
Sub test()
Dim NewObj As Workbook
Dim Sh As Integer
Dim Shn As String
Dim Shc As Integer
Dim N As Integer
Set NewObj = Workbooks.Add
Application.DisplayAlerts = False
For Sh = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Activate
Shn = Sheets(Sh).Name
If Sheets(Sh).Type = xlWorksheet Then
If Sheets(Sh).Range("A1").Value = True Then
Shc = Shc + 1
Sheets(Sh).Cells.Copy
If Shc > NewObj.Sheets.Count Then
NewObj.Sheets.Add after:=Sheets(NewObj.Sheets.Count)
End If
NewObj.Sheets(Shc).Activate
Selection.PasteSpecial Paste:=xlValues
Selection.PasteSpecial Paste:=xlFormats
For N = 1 To NewObj.Sheets.Count
If NewObj.Sheets(N).Name = Shn Then
NewObj.Sheets(N).Delete
Exit For
End If
Next N
ActiveSheet.Name = Shn
ActiveSheet.Range("A1").Select
End If
Else
Shc = Shc + 1
NewObj.Sheets.Add after:=Sheets(NewObj.Sheets.Count)
ThisWorkbook.Sheets(Sh).Copy Before:=NewObj.Sheets(Shc)
End If
Next
NewObj.Worksheets(1).Select
NewObj.SaveAs "C:\bbb.xls"
NewObj.Close
Application.DisplayAlerts = True
Set NewObj = Nothing
End Sub
ありがとうございました。あたらしいファイルBook1が作成され、シートもコピーされましたが。
実行時エラー438「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」と出て止まってしまいます。
「デバックします」を選択すると、
If Sheets(Sh).Type = xlWorksheet Then
の部分がひっかかっているようでした。
どうすればいいですか?
No.2
- 回答日時:
横レス失礼します。
> ためしたところエラーになってしまいました。
No.1のコードですが、ちょっと気付いたことですが、多分ここではないでしょうか。
Application.SheetsNewWorkbook = 1
↓
Application.SheetsInNewWorkbook = 1
あと、A1に入れる TRUE は、文字列は、少ないと思いますので、どちらでも
いいように ↓のようにしたら如何でしょうか?
if Thisworkbook.Sheets(intSheetCnt).Range("A1").Value = "TRUE" Then
↓
If ThisWorkbook.Sheets(intSheetCnt).Range("A1").Text = "TRUE" Then
上書き確認メッセージは、多分いらないと思いますので、前後に
Application.DisplayAlerts = False
Application.DisplayAlerts = True
を入れたら良いかと思います。
有難うございます。
うごきました。ただ、
If ThisWorkbook.Sheets(intSheetCnt).Range("A1").Text = "TRUE" Then
が、エラーになったので
If ThisWorkbook.Sheets(intSheetCnt).Range("A1") = True Then
に変えてみました。以下のとおりです。(A1に入るtrueは文字列ではなく関数の答えです。)
今回、A1がTrueだったのは3枚のシートでしたが、結果、空白のシートをそれぞれ1枚あるファイルが3つ出来ただけでした。
ほしいのはA1がTrueのシートの書式と値を貼り付けた3つ(今回の場合は)のシートを持つ新しいファイルひとつなのですがどうすればいいのでしょうか?
Sub test()
Dim intSheetCnt As Integer
'これで新規ブックでのシート数を1にします
Application.SheetsInNewWorkbook = 1
For intSheetCnt = 1 To ThisWorkbook.Sheets.Count
If ThisWorkbook.Sheets(intSheetCnt).Range("A1") = True Then
Workbooks.Add
ThisWorkbook.Sheets(intSheetCnt).Copy ActiveWorkbook.Sheets(1)
'最初にあった要らないシートを削除
Application.DisplayAlerts = False
ActiveWorkbook.Sheets(1).Delete
Application.DisplayAlerts = True
' '保存するファイル名はCドライブ直下でシート名 ここはお好みで
' ActiveWorkbook.SaveAs "C:\" & ThisWorkbook.Sheets(intSheetCnt).Name & ".xls"
'
' ActiveWorkbook.Close
End If
Next
End Sub
No.1
- 回答日時:
※TRUEは、文字でTRUEとします。
Dim intSheetCnt as Integer
'これで新規ブックでのシート数を1にします
Application.SheetsNewWorkbook = 1
For intSheetCnt = 1 To Thisworkbook.Sheets.Count
if Thisworkbook.Sheets(intSheetCnt).Range("A1").Value = "TRUE" Then
Workbooks.Add
Thisworkbook.Sheets(intSheetCnt).Copy Activeworkbook.Sheets(1)
'最初にあった要らないシートを削除
Activeworkbook.Sheets(1).Delete
'保存するファイル名はCドライブ直下でシート名 ここはお好みで
Activeworkbook.SaveAs "C:\" & Thisworkbook.Sheets(intSheetCnt).Name & ".xls"
Activeworkbook.Close
EndIf
Next
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) セルの値からファイルを複数作りたい 2 2022/10/06 12:42
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルVBA 既存エクセルを開きその中のシートとしてCSVファイルを開く 3 2023/05/31 13:11
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) Excel VBAの書き方 1 2022/03/28 12:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
Accessのテーブルを既存のExcel...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
Wordで差し込み印刷時に表示す...
-
EXCELの「シートの見出し」のフ...
-
ワークシートそのものの色を変...
-
エクセルでリンク貼り付けした...
-
エクセルのシー名を二段表示に...
-
エクセル、特定のシートにパス...
-
EXCELの図形(テキストボックス)...
-
エクセルの2つのシートを並び...
-
エクセル 非表示のシートをハ...
-
エクセルを開くとメニューバー...
-
【Excel VBA】データ貼り付け先...
-
(エクセル)Indirect関数で、ハ...
-
エクセルでシートを追加したと...
-
PowerQueryで行数の指定はでき...
-
エクセル、別のシートの表をポ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報