• 締切済み

ブックの共有をしているexcelファイルの複製

ブックの共有を設定しているbook1.xlsというexcelファイルがあります。 ブックの共有を行なっているとだんだんデータサイズが肥大化してくるので、その対策として 【1】"book1.xls"のシート単位で全て新しい"book2.xls"にコピーする。 【2】"book1.xls"を別のフォルダへ移動。 【3】"book2.xls"の名前を"book1.xls"に変え、ブックの共有設定を行う。 ということをしています。 これらの作業を自動で行えたらと思うのですが、 タスクスケジューラー?.batファイル?VBA?など、何をどう組み合わせたらよいのかがよくわかりません。 アドバイスよろしくお願いします。

noname#242311
noname#242311

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

私のレスが長くて解かり難いのは申し訳ないですが、 もう少し、読み込んでみて頂ければ幸いです。 >『(共有化のままだとマクロ編集できませんから)一旦共有化解除して』 >という部分は手動ということになりますでしょうか。 はい。その通りです。 マクロ実行するためのマクロを作成してマクロ実行するまでの手順を説明したものです。 end-u>必要なら、それをマクロ処理する事もできます。 ここから end-u>: end-u>この場合、サイズが肥大化した時に必要に応じて任意で実行するような運用ですね。 ここまでの文章です。 >全て自動で実行ファイルの肥大化を解消する方法がないかと考えているのですが、 >何か良いアドバイスがありましたらよろしくお願いします。 そのニーズに応えるために end-u>これを定期的に自動実行するようにできなくもないですが。 end-u>例えば.. この文章の後に、タスクスケジュールとVBScriptを使ってExcelを操作する方法を提案しました。 この方法以外に、となるとVBScriptではなくて、Workbook_Openイベントを使う事も考えられますが Workbook_Openイベントの内容はほぼ<test.vbs>と変わりません。 そのxlsブックをタスクスケジューラに登録するだけですが、 そちらのほうが良いでしょうか。 そうだとしても、提案された内容を一度試してみるというのが普通の対応だと思います。 試してみてどうだったのか、何かエラーが出てうまくいかなかったのか、 または実行環境を考慮するとこの方法は採用できそうもない、とか。 そもそも試し方がわからない、とか。 そういう反応があると前に進み易いのですが。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

ファイルを複製するという事は、その時点での共有Bookの変更履歴を破棄しても構わないという事ですね? そうであれば、一旦Book共有化を解除して、再共有化をする事で変更履歴が破棄されます。 それだけでも肥大したBookサイズはある程度解消すると思います。 まずはそれで試してみられたらどうでしょう。 必要なら、それをマクロ処理する事もできます。 (共有化のままだとマクロ編集できませんから)一旦共有化解除して [Alt]+[F11]キー同時押し[VisualBasicEditor]を起動し[Alt]→[i]→[m]キー順押し。 標準モジュールが挿入されますから、そこに下記コードをコピーペーストします。 Sub reShare()   Const copyName = "C:\mydoc\book2.xls" 'CopyBookのフルパス   Application.DisplayAlerts = False   With ThisWorkbook     .SaveCopyAs copyName     If .MultiUserEditing Then       .ExclusiveAccess     End If     .SaveAs .FullName, accessmode:=xlShared   End With   Application.DisplayAlerts = True End Sub マクロ実行はExcel画面から[Alt]+[F8]キーでマクロを選択して[実行]します。 この場合、サイズが肥大化した時に必要に応じて任意で実行するような運用ですね。 これを定期的に自動実行するようにできなくもないですが。 例えば.. '<test.vbs>--------------------------------------- Option Explicit Const thisName = "C:\mydoc\book1.xls" '元のBookのフルパス Const copyName = "C:\mydoc\book2.xls" 'CopyBookのフルパス Const xlShared = 2 Dim LogName Dim XL Dim wb Dim msg Call Main '------------------------------------------------- Sub Main() On Error Resume Next 'LogはTEMP環境変数のフォルダに保存。 LogName = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\log.log" If Len(LogName) > 0 Then Call XLsub With Err If .Number <> 0 Then If Not XL Is Nothing Then If Not wb Is Nothing Then wb.Close Set wb = Nothing End If XL.Quit Set XL = Nothing End If msg = .Number & "::" & .Description .Clear End If End With With CreateObject("scripting.filesystemobject") If Err.Number = 0 Then With .OpenTextFile(LogName, 8, True, -1) .WriteLine Now & vbTab & msg .Close End With End If End With End If End Sub '------------------------------------------------- Sub XLsub() Dim n Set XL = CreateObject("excel.application") XL.Visible = True XL.ScreenUpdating = False Set wb = XL.Workbooks.Open(thisName) If Not wb.MultiUserEditing Then msg = "MultiUserEditing: False" Else '他のユーザーが開いていたら処理中止。 n = UBound(wb.UserStatus) If n <> 1 Then msg = "UserStatusError: " & n Else XL.DisplayAlerts = False wb.SaveCopyAs copyName wb.ExclusiveAccess wb.SaveAs thisName, , , , , , xlShared XL.DisplayAlerts = True msg = "Success" End If End If wb.Close False Set wb = Nothing XL.Quit Set XL = Nothing End Sub '------------------------------------------------- '# Call Main をコメントアウトすれば、一応ExcelVBAでも試せるようにはしてます。 以上をテキストファイルで保存して拡張子含め test.vbs という名前に変更します。 この test.vbs をタスクスケジューラに登録すれば良いです。 コード内で、UserStatusプロパティを見て、他ユーザーが使用中だったら中止するようにしてます。 ただ、このUserStatusプロパティに不正値が残って、正確には取れない場合があるかもしれません。 その場合は状況に応じてこのチェックを外すなど、修正してください。 また、タスク登録の際、環境によっては cscript.exe から指定しないといけないかもしれません。 C:\WINDOWS\system32\cscript.exe "C:\mydoc\test.vbs"

noname#242311
質問者

お礼

詳細にありがとうございます。 『一旦Book共有化を解除して、再共有化をする事で変更履歴が破棄されます。』 この動きは理解しているのですが、昼間は多くの人が開いているいるため、誰もいない深夜に自動実行したいです。 『(共有化のままだとマクロ編集できませんから)一旦共有化解除して』 という部分は手動ということになりますでしょうか。 全て自動で実行ファイルの肥大化を解消する方法がないかと考えているのですが、何か良いアドバイスがありましたらよろしくお願いします。

関連するQ&A

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • 複数のブックのデータを一つのブックにまとめたい

    http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page1.htm ↑の 7. 指定したフォルダ内にあるExcelファイルを検索して開く の部分のマクロを利用して、集計.xlsというブックで、複数のブックを開くようにしましたが、そのブックを開いた時にそのブックのSheet2の中のデータのみコピーして、集計.xlsに貼り付けたいのですが、どのようにすればよいのか困っています。 指定したフォルダの中には、回答01.xls 回答02.xls ・・・と16個のブックがあります。順番に開いてコピーをするときに、どのようにブック名とシート名を指定すればよいのかわからず困っています。 何か参考になるものがあれば教えてください。 よろしくお願いします。

  • bookからbookへの数式のコピーについて教えてください

    bookからbookへの数式のコピーについて ??BookのSheet1のセルにSheet2を参照にした数式が入っています =2+Sheet2!$A8 これを!!BookのSheet1のセルにコピーすると =2+[Book1.xls]Sheet2!$A8 こうなりました コピーしたセルは11,475セルあります [Book1.xls]をすべて消したいのですが、簡単な方法はありますか?

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • 他のブックから任意のシートをコピーするVBA

    以下についてお手数ですがご教示いただけませんでしょうか。 【前提条件】  BOOK1.xlsとBOOK2.xlsが同じフォルダにあります。 【行いたいこと】  BOOK1.xlsで、  1.BOOK2.xlsを選んで、  2.BOOK2.xlsに存在するするシート名を選択させ、  3.選択したBOOK2.xlsの任意のシートをBOOK1.xlsにコピーする  

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

    マクロ初心者です。 フォーマットの同じ複数のブックのセルをコピーし、 新しいブックに羅列したいのですが、 ブック数が多く、手作業では効率が悪く、困っています。 例えば・・・Book001.xls、Book002.xls、二つのブックがあります BooK001.xls  ABCD 1  * 2  * 3  * 4  * Book002.xls  ABCD 1  + 2  + 3  + 4  + これを、新しいブック(All.xls)に  ABCD 1 *+ 2 *+ 3 *+ 4 *+ といったように、コピーしたいのですが、マクロ初心者のため、お手上げ状態です。 条件は、 ・フォルダにBookXXX.xls(XXXは001~の連続した番号)という名のブックが入っている ・BookXXX.xlsは全て同じフォーマット マクロの構文はもちろん、設定の仕方も教えていただけないでしょうか? よろしくお願いします。

  • Excelで、異なるブック間での同一シートの共有?

    こちらのカテゴリーでは初めてお世話になるかと思います、 r_belと申します。どうぞよろしくお願いいたします。 フォルダA │ ├─ フォルダ1 │├─ ExcelBook1.xls │├─ linked_email1.msg │└─ linked_doc1.pdf │ ├─ フォルダ2 │├─ ExcelBook2.xls │├─ linked_email2.msg │└─ linked_doc2.pdf │ ├─ フォルダ3 │├─ ExcelBook3.xls │├─ linked_email3.msg │└─ linked_doc3.pdf │ └ SummaryBook.xls このような構成のファイルとフォルダがあります。 それぞれのフォルダの中には、その中にある エクセルファイル(例:ExcelBook1.xls)上から ハイパーリンク機能を使って、相対パスでemailやpptやpdfなどの 参考資料を指定してあるので、このように整理しています。 (相対パスだと各フォルダを動かしたり、 名前を変更してもリンクに支障がでないので。) このとき、ExcelBook1.xls ~ ExcelBook3.xls を一つずつ開くのではなく、SummaryBook.xlsの中で まとめて閲覧するなんてことはできますでしょうか? 初心者なので、できればVBAやマクロは使わずにすめば大変ありがたいのですが・・・。 ExcelBook1.xls ~ ExcelBook3.xlsは結構頻繁に更新するものなので、 シート全体をリンク貼り付けする、あるいは複数のブックで 同一のシートを共有するようなイメージでいるのですが、 このようなことは可能でしょうか? どうぞよろしくお願いいたします。

  • 他のブックファイルのセルの参照が上手く行きません

    こんにちはよろしくお願いいたします。 エクセルのブックファイル(Book1.xlsx)に,他のブックファイル(Book2.xls)のセルの値を参照しようと思い”=”を入力し参照するブックファイルのセルをクリックし,「 =[Book2]Sheet1!$A$1 」のような参照を行いました。こうしてきちんと表示されました。 しかし,この参照の式を「 =[Book3]Sheet1!$A$1 」のように,他のブックファイル(Book3.xls)のセルに変更したところ,参照できなくなりました。ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となっています。式は,キーボードを使って変更しました。もちろん,(Book3.xls)は,(Book2.xls)と同様のシート形式をもち,データも入力されています。 このような状態になると,先に挙げたように,”=”を入力して参照するブックファイル(Book3.xls)のセルをクリックしても,ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となったままで,(Book3.xls)のデータは表示されません。 (Book2.xls)と(Book3.xls)のセルのデータは,文字列です。 気になるのは,(Book1.xlsx)はoffice2010で作成されたファイルであること,(Book2.xls)と(Book3.xls)は,互換モードと表示されるファイルであること,また表示されているファイルを見ると,フルパスで参照している点です。「 ='C:\aaa\bbb\・・・・・[Book3]Sheet1'!$A$1 」という参照式になっています。3つのファイルはすべて同一ファイルに入っています。 何が,参照を阻んでいるのでしょうか?教えてください。よろしくお願いします。

  • EXCELのブック間リンクの自動変更について

    EXCELのブック間リンクの自動変更について C:\aaa に2つのブックがあります。  book1.xls  book2.xls それで  book1.xls のあるセルに以下の計算式があります  ='C:\aaa\[book2.xls]Sheet1'!A1 この2つのファイルを別のPCの任意のフォルダ(例えばD:\eee\)移動した場合、 移動後の上記のbook1.xlsを開くと計算式が  ='D:\eee\[book2.xls]Sheet1'!A1  に自動で変わってます。 これはどういう仕組みでしょうか? 常にこうなるのかどこかの設定で 自動or手動など変えられるのでしょうか? 先方にメールで送るのですが、先方側でパスが自動で変わってくれるのか が心配です。どなたか教えて頂けませんか?  

  • Book1.xlsとBook2.xlsのエクセルファイルが有ります。

    Book1.xlsとBook2.xlsのエクセルファイルが有ります。 VBAを作成しているのはBook2.xlsで操作しています。 Book1 Sheet1 A B C 1 6 4 2 2 8 5 3 3 5 1 4 . Book1のシートのB列とC列には整数が入力されています。 A列には計算式が入ります。 例)A1の計算式 =B1+C1 A2の計算式 =B2+C2 A列の結果をBook2 Sheet1 のA列に反映しようとした場合に、 以下のVBAだと、計算式のコピーになってしまうので、計算結果の値を反映する事が出来ません。 A列の計算結果(上記の例だと、6,8,5)をまとめて反映させる方法はありますか? Sub tashizan() Dim thisBook As Workbook Dim workBook1 As Workbook Set thisBook = ThisWorkbook Set workBook1 = Workbooks.Open("C:\Documents and Settings\Book2.xls") thisBook.Worksheets("Sheet1").Range("A1:A100").Copy workBook1.Worksheets("Sheet1").Range("A1") workBook1.Close End Sub 初心者ですので、宜しくお願いします。

専門家に質問してみよう