[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一部シートのみ実行したい。』(ゾーマ)
すべてのシートを分割してブックにするマクロを使っていたのですが、
全部が全部必要ではなく、不要なシートも分割されて手間が増えていたので
全シートに実行と、特定のシートに実行の分岐点をつくって見たのですが、
ユーザーフォームで必要なシートを選択してもらうところまでは思いつきましたが、
その後どうすればよいか考えが及ばず思いつきませんでした。
続きご指導いただければと思います。
なお、途中まで作ってしまったのですが、
ほかにもっと良い方法があれば変更も検討します。
以下コード。
基準モジュール?
Public 選択list As String
Sub シートを分割して保存()
Dim MyName As String Dim rc As Integer
With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダを選択して、OKをクリック" If .Show = True Then folder = .SelectedItems(1) Else Exit Sub End If End With
rc = MsgBox("全シート処理でよろしいですか?", vbYesNo + vbWuestion, "全シートか、一部シートか") If rc = vbYes Then
MyName = InputBox("頭につけるブック名を入力してください", "ブック名入力") Application.ScreenUpdating = False For Each シート In Worksheets If シート.Name <> "macro" Then シート.Copy ActiveWorkbook.SaveAs folder & "\" & MyName & シート.Name ActiveWorkbook.Close End If Next シート Application.ScreenUpdating = True MsgBox "終了しました!"
Else
UserForm1.Show
MsgBox (選択list)
’ここから思いつきません><
Err_frmShow:
End If
End Sub
ユーザーフォーム
Private Sub UserForm_Initialize()
Dim i As Integer
ListBox1.MultiSelect = fmMultiSelectMulti
For i = 1 To Worksheets.Count
ListBox1.AddItem (Worksheets(i).Name) Next i
End Sub
Private Sub CommandButton1_Click()
Dim i As Integer
With ListBox1
For i = 0 To .ListCount - 1 If .Selected(i) = True Then 選択list = 選択list & .list(i) & vbCrLf End If Next i End With
MsgBox 選択list
Unload Me
End Sub
どうかお願いいたします!
< 使用 Excel:Excel2013、使用 OS:unknown >
MsgBox (選択list) 'ここから思いつきません>< MyName = InputBox("頭につけるブック名を入力してください", "ブック名入力") Application.ScreenUpdating = False For Each シート In Split(選択list, vbCrLf) If シート <> "macro" Then Worksheets(シート).Copy ActiveWorkbook.SaveAs folder & "\" & MyName & シート ActiveWorkbook.Close End If Next シート Application.ScreenUpdating = True MsgBox "終了しました!" Err_frmShow: (mm) 2018/05/11(金) 15:58
Worksheets(シート).Copyで
実行時エラー9 インデックスが有効範囲にありません。
となり、エラーになってしまいます。
エラー無視で大丈夫だとは思いますが解決方法はありますか?
(ゾーマ) 2018/05/11(金) 16:13
If シート <> "macro" and Evaluate("isref('" & シート & "'!a1)") Then
(mm) 2018/05/11(金) 16:27
ありがとうございます。
(ゾーマ) 2018/05/11(金) 16:37
(の後の’はなぜいるのでしょか。
(ゾーマ) 2018/05/11(金) 17:07
シートが存在しないかどうかを判別して有ればコピーしていると理解し、
いけるかと思ったのですがだめでした。
別の方法も含め、ご指導お願いいたします。
(ゾーマ) 2018/05/14(月) 11:27
■標準モジュールに記述
Public MyPath As String
Sub シートを分割して保存() Dim MyName As String
With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダを選択して、OKをクリック" If .Show = True Then MyPath = .SelectedItems(1) Else Exit Sub End If End With
MyName = InputBox("頭につけるブック名を入力してください", "ブック名入力") MyPath = MyPath & "\" & MyName
UserForm1.Show
End Sub
■UserForm1のモジュールに記述
Private Sub UserForm_Initialize() Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets ListBox1.AddItem sh.Name Next sh End Sub
Private Sub CommandButton1_Click() Dim i As Long, c As Long, tmp As String
With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then tmp = .List(i) With Workbooks.Add ThisWorkbook.Worksheets(tmp).Copy _ Before:=.Worksheets(1)
Application.DisplayAlerts = False For c = 2 To .Worksheets.Count .Worksheets(c).Delete Next Application.DisplayAlerts = True
.SaveAs Filename:=MyPath & "_" & tmp .Close
End With End If Next i End With
MsgBox "処理終了" Unload Me End Sub
ちなみに、どっちでもいいとおもいますけど、「ListBox1.MultiSelect」は、実行するごとに設定するんじゃなくて、ユーザーフォームの設計段階で設定しておいてもいいんじゃないでしょうか?
(もこな2) 2018/05/14(月) 14:31
ThisWorkbook.Worksheets(tmp).Copy _ Before:=.Worksheets(1) 実行時エラー'1004' 移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、「コピー」コマンドと「貼り付け」コマンドを使用して移動先またはコピー先のブックにシートを挿入してください。
となります。
ちゃんと1048576行までありましたので古いエクセルを使っているわけでもなさそうなのですが
なんでこれが出るのか分かりますでしょうか。
>ちなみに、どっちでもいいとおもいますけど、「ListBox1.MultiSelect」は、実行するごとに設定するんじゃなくて、ユーザーフォームの設計段階で設定しておいてもいいんじゃないでしょうか?
これはその通りプロパティで直しました!
(当時わからずググったら記述する方式が乗ってたため、そのまま採用してました。)
(ゾーマ) 2018/05/15(火) 19:15
なんで、ユーザーフォームをわざわざ使うのですか?
普通にシートタブを選択したらいいのでは?
選択したら、
選択したシートだけ作業をすればいいだけです。
参考URL>>
http://officetanaka.net/excel/vba/tips/tips31.htm
(まっつわん) 2018/05/15(火) 19:36
なるほど、
シートを選択する操作方法の要望も結構高いですけど、
個人の感じ方の違いですね。
ならば、ぼくなら、問答無用でユーザーフォームを表示し、
それに、全シート選択の機能を追加するかな。
(チェックボックスにチェックを入れて全選択するようにするか、
全シート選択用のコマンドボタンを用意するかは悩ましいところですが。)
頭につけるブック名もそれを入力する用のテキストボックスを用意しておけばいいですよね?
(まっつわん) 2018/05/15(火) 20:03
この選んだシートだけ分割保存ができるようになったら試してみます。
(ゾーマ) 2018/05/15(火) 20:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.