• ベストアンサー

新しく開いたブックをアクティブにするマクロ

マクロ 新しく作ったブックをアクティブにする マクロ初心者です。 マクロを使って同階層にあるファイルのアクティブのシートを ひとつのブックにコピーして保存するマクロを作りたいと思ってます。 他の質問を参照して下記のコードを途中まで作成しました。 参照した質問では、 マクロの入っているブックにシートをコピーするようでしたが、 そうすると保存した時にマクロも保存されてしまうので 私なりに調べて、新しいブックにシートコピーするようにしましたが、 この記述の後、新しいブックをアクティブにする記述がわからず、 保存できなくなってしまいました。 ここまで終わるとマクロの入っているブックがアクティブになって終わります。 このあと新しく開いたブックをアクティブにして、 ブックのsheet1~3を削除して、名前をつけて保存したいのですが 開いたブックをアクティブにするマクロをご伝授ください。 あたらしくブックをつくるとbook1~・・・と名前が変わってしまうので 変数で名づけたいのですが、やり方が良くわかりませんのでよろしくお願いします。 何卒よろしくお願いします。 Sub consolid_test() Dim shCnt As Integer Dim Wb As Workbook Dim i As Integer Dim sh As Worksheet Dim nSh As Worksheet Dim fName As String Dim ka As String Application.ScreenUpdating = False '画面更新を一時停止 Application.DisplayAlerts = False Set mb = Workbooks.Add '新しいコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fName = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fName = Empty '全て検索 If fName <> mb.Name Then 'ブック名がこのブックの名前でなければ Set Wb = Workbooks.Open(myfdr & "\" & fName) 'そのブックを開きwbとする。 Wb.ActiveSheet.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く ActiveSheet.Name = Range("B16") 'シート名の変更 ActiveSheet.Unprotect 'シート全体をコピーして値にする Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Wb.Close (False) '保存の有無を聞かずに保存しないで閉じる N = N + 1 'ブック数をカウント End If fName = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す ・ ・ ・ ・

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

こんにちは。 こんな感じにすれば不要なブランクシートはできません。 シート名を変更する際の簡単なエラートラップはついで。 余談になりますけど、 > If fName <> mb.Name Then は ThisWorkbook と比較した方が良いでしょう。そして統合したブック の保存の際に同名ファイル確認して Save するか、保存作業はユーザー に任せた方が良いと思います。 ご参考までに。 余談その2      Active にできないのは、Application.ScreenUpdating = False のせい   な予感。 Sub sample()   Dim wbSrc    As Workbook   Dim wbDst    As Workbook   Dim sFolderPath As String   Dim sFileName  As String   Dim sFilePath  As String   Dim fCopied   As Boolean      Application.ScreenUpdating = False   Application.DisplayAlerts = False      sFolderPath = ThisWorkbook.Path      sFileName = Dir$(sFolderPath & "\*.xls")      fCopied = False   Do While Len(sFileName) > 0          sFilePath = sFolderPath & "\" & sFileName     ' // マクロのあるブック以外とする     If sFilePath <> ThisWorkbook.FullName Then              ' // ソースブックを開く       Set wbSrc = Workbooks.Open(sFilePath)              ' // 進捗表示       Application.StatusBar = "Copy ... " & sFileName       DoEvents              ' // シートのコピー       If wbDst Is Nothing Then         ActiveSheet.Copy         Set wbDst = ActiveWorkbook         fCopied = True       Else         ActiveSheet.Copy After:=wbDst.Sheets(wbDst.Sheets.Count)       End If              ' // 可能ならB16の値でシート名変更、不可能なら適当な名前       On Error Resume Next       ActiveSheet.Name = ActiveSheet.Range("B16").Value       If Err Then         ActiveSheet.Name = "Sheet" & CStr(wbDst.Sheets.Count)       End If       On Error GoTo 0              ' // 値に変換(適当)       ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value              ' // ソースブックを閉じる       wbSrc.Close SaveChanges:=False          End If     ' // 次を検索     sFileName = Dir$()   Loop      Application.ScreenUpdating = True   Application.StatusBar = ""      If Not fCopied Then     MsgBox "該当ブックは見つからない", vbInformation, "エラー"   Else     MsgBox "適切な場所へ保存して下さい", vbInformation, "完了"   End If   Set wbSrc = Nothing   Set wbDst = Nothing End Sub

curo_chan
質問者

お礼

大変勉強になりました! もともとの構文自体もほかの質問から持ってきたものを 自分でここだと思われるところを適当に直しただけで、 何が悪かったのかさっぱりわかりませんでした・・ 今回ご指南いただいたマクロを元に、勉強したいと思います。 本当にありがとうございました。

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

ついでの余談 このマクロの統合順番ですが、HDD のファイルシステムによって決まります。 DIR 関数がファイルを検索してくる順...ということですが、   FAT:  HDDに記録されている順   NTFS: ファイル名順 という違いがあります。 統合順番に意味がある場合、Win9x系、NT系 OS が混在する環境では注意が必要。

curo_chan
質問者

お礼

自分自身、もっと理解を深める必要がありますね・・ OSの件は確認してみます。 ありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

提示のコードのとおりであれば、 mb.Activateができないのはちょと不可思議な現象ですが、、、 エラーも出ないのですよね? ま、そこに拘っていては先に進みませんので。。。。 下記のように、新ブックオブジェクトを明示してみてください。 mb.Activateは不要です。 '-------------------------------------- mb.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Application.DisplayAlerts = False Windows(mb.Name).SelectedSheets.Delete Application.DisplayAlerts = True mb.SaveAs myfdr & "\Consolidated.xls" mb.Close False '-------------------------------------- また、ブック名を変数で付けたい場合は、 例えば、統合&本日: "統合20090609.xls" としたければ、 '--------------------------------------- Dim NewBookName As String NewBookName = "統合" & Format(Date, "yyyymmdd") & ".xls" mb.SaveAs myfdr & "\" & NewBookName  '---------------------------------------- 以上ここまで。  

curo_chan
質問者

お礼

お助けいただき、ありがとうございます。 みなさまのおかげで無事解決しました。 また分からないことが発生しましたら質問させていただきます!

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

n-junです。 止まるというのがエラーなのかよく分かりませんが、削除に対してのメッセージなら mb.Activate Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Application.DisplayAlerts = False ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = True メッセージが出ないようにするとか?

curo_chan
質問者

お礼

お助けいただき、ありがとうございます。 みなさまのおかげで無事解決しました。 また分からないことが発生しましたら質問させていただきます!

curo_chan
質問者

補足

説明文がつたなくてすみません。 mb.Activate この命令でマクロが動いてくれないのです。。 なぜだか見当もつきません。 もし他の指定方法がありましたら ご伝授ください。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

「新しいブックをアクティブにする記述がわからず、」 解答=> Set mb = Workbooks.Addとしているからmbが新しいワークブックオブジェクトです。これをアクティブにするなら、 mb.Activate とします。mbに"hoge.xls"の名前をつけて保存するには、 mb.SaveAs("hoge.xls") とできます。

curo_chan
質問者

お礼

お助けいただき、ありがとうございます。 みなさまのおかげで無事解決しました。 また分からないことが発生しましたら質問させていただきます!

curo_chan
質問者

補足

さっそくのご解答ありがとうございます。 上記の構文に書き足してみましたが、 なぜだか止まってしまうのです。。 新しいブックにいくことが出来ません。 何か書き方が悪いのでしょうか・・ mb.Activate Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Sheets("Sheet3").Activate ActiveWindow.SelectedSheets.Delete

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

新しく開いたBookって >Set mb = Workbooks.Add '新しいコピー先ブックをmbとする。 これの事? そうであれば md.Activate でアクティブになるかと。

curo_chan
質問者

お礼

お助けいただき、ありがとうございます。 みなさまのおかげで無事解決しました。 また分からないことが発生しましたら質問させていただきます!

curo_chan
質問者

補足

さっそくのご解答ありがとうございます。 上記の構文に書き足してみましたが、 なぜだか止まってしまうのです。。 新しいブックにいくことが出来ません。 何か書き方が悪いのでしょうか・・ mb.Activate Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Sheets("Sheet3").Activate ActiveWindow.SelectedSheets.Delete

関連するQ&A

  • マクロで複数ブックのデータを一つのブックにコピー

    マクロ超初心者です。 1つのフォルダの中に複数のbook(sheetも複数)があります。 これを新しい1つのbookにまとめたいです。 sheetは「bookを開いた時に表示されるsheetだけ」を新しいbookにまとめたいです。 どなたかの回答に下記マクロがありました。 Sub consolid() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く wb.Close '開いたブックを閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックをコピーしましました。" End Sub このマクロを使わせていただき、 これでいける!と思ったのですが、255文字以上のコピーが出来ません。 どのようにすればよいでしょうか?

  • Excel マクロで複数ブックのデータを一つのブックにまとめる方法

    マクロ初心者です。 1つのフォルダの中に複数のbook(sheetも複数)があります。 これを新しい1つのbookにまとめたいです。 sheetは「bookを開いた時に表示されるsheetだけ」を新しいbookにまとめたいです。 どなたかの回答に下記マクロがありました。 Sub consolid() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く wb.Close '開いたブックを閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックをコピーしましました。" End Sub 非常によかったのですが、これですと (1)全てのsheetがコピーされてしまいます。 (2)また、保存しますか?とbookごとに聞いてきます。 上記のマクロのどこを変更すれば、(1)(2)を解決できますでしょうか? (エクセルは2002です) 以上、よろしくお願いします。

  • Excel マクロで複数ブックのデータを一つのブックにまとめる方法

    マクロ初心者です。 1つのフォルダの中に複数のbook(sheetも複数)があります。 これを新しい1つのbookにまとめたいです。 回答に下記マクロがありました。 Sub consolid() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く wb.Close '開いたブックを閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックをコピーしましました。" End Sub これで使用した所マクロを実行する度に何度も同じシートが コピーされてしまいます。 できれば同じ名前のシートは上書きにしてマクロを何度も使用できるように【各BOOKは毎週更新されて私のフォルダに入ってきます】したいのですが そのような事は可能なのでしょうか? どなたか分かる方教えてください。お願い致します。

  • 同一フォルダの複数ブックの値を取得マクロ

    エクセル2010のマクロで困っています。 同一フォルダ内・複数ブックの 「異動表」というシートの特定のセルを抽出し、一覧にするマクロを素人ながら作成しようとがんばっています。 下記、マクロを作成したのですが、 必ず、98件(98ブック)前後でマクロが止まってしまいます。 【Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。】←ここで止まります。 なぜなのでしょうか??ご教授願います。 Sub (1)() Dim mb As Workbook, wb As Workbook Dim myfdr As String, fname As String, n As Integer Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xlsx") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Sheets("異動表").Range("A1").Copy '選択&コピー mb.Sheets("Sheet1").Activate 'コピー先シートを選択してアクティブにする Range("a1048576").End(xlUp).Offset(1, 0).Activate 'データ最終行を選択 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して貼付→値 wb.Sheets("異動表").Range("b1").Copy '選択&コピー mb.Sheets("Sheet1").Activate 'コピー先シートを選択してアクティブにする Range("b1048576").End(xlUp).Offset(1, 0).Activate 'データ最終行を選択 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して貼付→値 wb.Sheets("異動表").Range("b4").Copy '選択&コピー mb.Sheets("Sheet1").Activate 'コピー先シートを選択してアクティブにする Range("c1048576").End(xlUp).Offset(1, 0).Activate 'データ最終行を選択 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して貼付→値 wb.Sheets("異動表").Range("m2").Copy '選択&コピー mb.Sheets("Sheet1").Activate 'コピー先シートを選択してアクティブにする Range("d1048576").End(xlUp).Offset(1, 0).Activate 'データ最終行を選択 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して貼付→値 wb.Sheets("退職金計算書").Range("d21").Copy '選択&コピー mb.Sheets("Sheet1").Activate 'コピー先シートを選択してアクティブにする Range("e1048576").End(xlUp).Offset(1, 0).Activate 'データ最終行を選択 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して貼付→値 Application.ScreenUpdating = True 'コピー先のセルの内容を置き換えますか?=YES Application.DisplayAlerts = False '警告表示を出さない Application.CutCopyMode = False 'クリップボードのコピーを消す wb.Close (False) '有無を言わずに保存せず閉じる For Each c In mb.Sheets(mb.Sheets.Count).UsedRange '取り込んだシートの使用範囲に If c.FormulaR1C1 Like "=*!*" Then '他シート参照があれば c.Value = c.Value '値に変更 End If Next n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 Dim ws As Worksheet '全てのシートの色をなしにする For Each ws In Worksheets ws.Tab.ColorIndex = xlColorIndexNone Next MsgBox UCase(Environ("UserName")) & "さん、" & n & "件のブックをコピーしましました。" _ + Chr(&HD) + Chr(&HA) + "他シートを参照する式だけは値にしておきましたよ。" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "", , "( ̄ー ̄)v " End Sub

  • 複数シートをブックにするマクロを応用して。。

    1ブック内にyymmdd(日付)シートが多数あり、それを月別yymmごとブックを作成するマクロです。 これは以前、回答して頂いた「n-jun」さんの構文です(n-junさん、重宝しています、感謝!) Private Sub CommandButton1_Click() Dim myDic As Object Dim wb1 As Workbook Dim wb As Workbook Dim ws As Worksheet Dim sh As Worksheet Dim myKey Set myDic = CreateObject("Scripting.Dictionary") Set wb1 = ThisWorkbook Application.ScreenUpdating = False For Each sh In wb1.Worksheets myDic(Left(sh.Name, 4) & "_") = Empty Next For Each myKey In myDic.keys For Each sh In wb1.Worksheets If InStr(sh.Name, Left(myKey, 4)) > 0 Then If wb Is Nothing Then wb1.Worksheets(sh.Name).Copy Set wb = ActiveWorkbook Else wb1.Worksheets(sh.Name).Copy after:=wb.Sheets(wb.Sheets.Count) End If End If Next Application.DisplayAlerts = False wb.SaveAs Filename:="C:\仕事\月別" & "\" & Left(myKey, 4) & ".xls" wb.Close Set wb = Nothing Application.DisplayAlerts = True Next Application.ScreenUpdating = True Set myDic = Nothing Worksheets("main").Activate MsgBox "出力完了" End Sub 実は、これをフォルダ内のブックの場合は? として応用ができないか悩んでいます。 つまり、フォルダ内にyymmddブックが多数あり、 これを月別yymmとして、それぞれまとめたいのです。 Set wb1 = ThisWorkbookの箇所が、 フォルダ内のブック指定になると思うのですが、 下記コードでどうなんでしょうか?動きません。 myfdr = "C:\仕事\月別" fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 Set wb1 = Workbooks.Open(myfdr & "\" & fname) 変更箇所、アドバイス頂ければ助かります。お願いします

  • エクセルVBAでBOOKに読み取りパスワード設定

    エクセル2013です。 以下のコードで指定した任意のフォルダ内のエクセルに読み取りパスワードを設定できました。 しかし、そのフォルダの下にサブフォルダーがあった場合にサブフォルダ内のBOOKは対象になりません。どのように直せばサブフォルダも対象にできるようになるでしょうか?教えてください。 Sub TEST01()   Dim myfdr As String, fname As String   Dim mb As Workbook, wb As Workbook   Dim n As Long   With Application.FileDialog(msoFileDialogFolderPicker) '対象とするフォルダの指定      If .Show = True Then       myfdr = .SelectedItems(1)     Else       MsgBox "キャンセルします。"       Exit Sub     End If   End With   Set mb = ThisWorkbook 'このコピー先ブックをmbとする。   fname = Dir(myfdr & "\*.xls*") 'フォルダ内のExcelブックを検索   n = 2   Do Until fname = Empty '全て検索     Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。     With mb.Sheets("Sheet1") '転記       .Cells(n, "B").Value = wb.FullName       .Cells(n, "C").Value = wb.Sheets(1).Range("B1").Value     End With     n = n + 1 'カウント     Application.DisplayAlerts = False     wb.SaveAs Filename:=wb.FullName, Password:="emaxemax"     wb.Close     Application.DisplayAlerts = True     fname = Dir 'フォルダ内の次のExcelブックを検索   Loop '繰り返す   MsgBox n - 2 & "件処理しましました。" End Sub

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub

  • VBAのエラーで、セルの書式が多すぎるため書式を追加できません。

    Excel2003のVBAで質問です。 複数ブック→1つのブックで複数シート にするマクロを作成しています。 今まではうまく実行できていたのですが、 wb.Sheets("12月").Range("A1:AO45").Copy mb.Sheets(mb.Sheets.Count).Range("A1").Select mb.Sheets(mb.Sheets.Count).Paste を追加したところ、途中までは大丈夫なのですが、ある一定数以上のブックで 「セルの書式が多すぎるため書式を追加できません」とメッセージが出ます。 VBAのどの辺りを修正すればよいのでしょうか? また、都度 「コピーまたは移動先セルの内容を置き換えますか?」や「クリップボードにおおきな情報があります。この情報を貼り付けられるようにしますか?」などに「Y」や「N」を都度入力しなくてもよいようにできますでしょうか? 以上、よろしくお願いします。 下記は全マクロ。 Sub Consolid03() Dim mb As Workbook, wb As Workbook Dim myfdr As String, fname As String, n As Integer Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Sheets("12月").Copy After:=mb.Sheets(mb.Sheets.Count) '開いたシートをコピーしてmbの末尾に置く wb.Sheets("12月").Range("A1:AO45").Copy mb.Sheets(mb.Sheets.Count).Range("A1").Select 'コピー先シートを選択してアクティブにする mb.Sheets(mb.Sheets.Count).Paste wb.Close (False) '有無を言わずに保存せず閉じる mb.Sheets(mb.Sheets.Count).Unprotect Password:="9" 'パスワード解除 For Each c In mb.Sheets(mb.Sheets.Count).UsedRange '取り込んだシートの使用範囲に If c.FormulaR1C1 Like "=*!*" Then '他シート参照があれば c.Value = c.Value '値に変更 End If Next n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 Dim ws As Worksheet '全てのシートの色をなしにする For Each ws In Worksheets ws.Tab.ColorIndex = xlColorIndexNone Next MsgBox UCase(Environ("UserName")) & "さん、" & n & "件のブックをコピーしましました。" _ + Chr(&HD) + Chr(&HA) + "他シートを参照する式だけは値にしておきましたよ。" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "", , "( ̄ー ̄)v " End Sub

  • VBAでシート名を変える、グラフのリンクを切る等を教えてください

    以前、「複数ブックのシートを一つのブックにコピーする」VBAを教えていただきました。 そこで、誠に恐縮なのですが、下記を追加するにはどのようにすればよいのでしょうか? 1、コピー元とのグラフのリンクを解除する。    数式のリンクは解除されているので、恐らくグラフのリンクが解除されていない。毎回、編集→リンクの設定で解除している。 2、シート名をセルB2の5文字目以降にしたい。 3、1つのセルに255文字以上入力されている、以降の文字がコピーしない現象を回避。    シートのコピーをすると、255文字以降がコピーされない??    セルを範囲選択してコピーした場合は、コピーできる。 4、最後に「Sheet1」を削除 下記が現在のVBAです。 Sub Consolid03() Dim mb As Workbook, wb As Workbook Dim myfdr As String, fname As String, n As Integer Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.ActiveSheet.Copy After:=mb.Sheets(mb.Sheets.Count) '開いたシートをコピーしてmbの末尾に置く wb.Close (False) '有無を言わずに保存せず閉じる mb.Sheets(mb.Sheets.Count).Unprotect Password:="9" 'パスワード解除 For Each c In mb.Sheets(mb.Sheets.Count).UsedRange '取り込んだシートの使用範囲に If c.FormulaR1C1 Like "=*!*" Then '他シート参照があれば c.Value = c.Value '値に変更 End If Next mb.Sheets(mb.Sheets.Count).Protect Password:="9" 'パスワード保護 n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox UCase(Environ("UserName")) & "さん、" & n & "件のブックをコピーしましました。" _ + Chr(&HD) + Chr(&HA) + "他シートを参照する式だけは値にしておきましたよ。" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "取りこんだシートにパスワード保護もかけておきましたよ。", , "( ̄ー ̄)v " End Sub 以上、ご教示願います。。。

  • Excelマクロ 複数のシート検索・選択して新しいブックにコピー

    何方か、回答をお願いします。 下記のマクロは、任意のフォルダに有る全てのxlsファイルのシート名が”Data”のみ 新しいブックにコピー(シート名は、元のファイル名に変更)をしていくマクロですが、 条件が下記のように変更になりました。 シート名は、DataとAppend*(*は数字で1~99)(Appendの数は毎回ばらばらでAppend シートその物が無い場合も有ります。)を選択して新しいブックにコピー (元のシート名の前に元のファイル名を足して新しいシート名は”ファイル名Append2” こんな感じにしたいです。)したいのですがどの様なマクロを書けば良いのか教えて 下さい。 Sub test-xls版() Dim myPName As String Dim myKAKUCHOSI As String Dim myPATHNAME As String Dim myLName As String Dim wb As Workbook Dim wb_New As Workbook Dim N As Byte Dim ws As Worksheet Dim myFN As String myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv") If myPName = "False" Then Exit Sub Application.ScreenUpdating = False Set wb_New = Workbooks.Add myKAKUCHOSI = Right(myPName, 4) myPATHNAME = CurDir myLName = Dir("") N = Len(myLName) myFN = Left(myLName, N - 4) Do While myLName <> "" Workbooks.OpenText Filename:=myPATHNAME & "\" & myLName, DataType:=xlDelimited, Tab:=True, Comma:=True, Space:=True N = Len(myLName) myFN = Left(myLName, N - 4) Sheets("Data").Select 'csvの場合無し Set wb = ActiveWorkbook wb.ActiveSheet.Copy after:=wb_New.Sheets(wb_New.Worksheets.Count) Worksheets("Data").Name = myFN 'csvの場合無し wb.Close savechanges:=False myLName = Dir() Loop Application.ScreenUpdating = True Exit Sub