• ベストアンサー

Excelのファイルからシート毎にファイルを作成し、更新させる方法

同じような質問がありましたが もう少し作業を加えた方法を知りたいので 可能であれば、どなたか教えてください。 1つのエクセルファイルに10シートあります。 これをシート毎に分割してファイルを作成したいです。 なお ・作成したファイル名はシート名にしたい ・元エクセルファイルを更新する度に  シート毎に分割したファイルも更新されるようにしたい 以上です。 つたない文章で申し訳ございませんが よろしくお願いいたします。

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.5

ブックの各シートを新規作成したフォルダに別々のブックとして分割するサンプル です。 もし、元のブックで別シートを参照する式が入っていたら、分割後のブックを起動 した時点でリンクを更新するか聞いてくる可能性があります。 Sub test() Dim motowb As Workbook Dim newwb As Workbook Dim newfol As String Dim ws As Worksheet Set motowb = ThisWorkbook newfol = CreateObject("WScript.Shell").SpecialFolders("Desktop") _ & "\" & Format(Now, "yymmdd_hhmmss") If Dir(newfol, vbDirectory + vbReadOnly + vbHidden) <> "" Then MsgBox newfol & "は既に存在するフォルダ名です。" Exit Sub Else MkDir (newfol) End If Application.ScreenUpdating = False For Each ws In motowb.Worksheets ws.Copy Set newwb = ActiveWorkbook newwb.SaveAs newfol & "\" & kinsoku(ws.Name) & ".xls" newwb.Close Next ws Application.ScreenUpdating = True Set newwb = Nothing Set motowb = Nothing End Sub Function kinsoku(ByVal maestr As String) As String Dim mylen As Integer Dim i As Integer Dim j As Integer Dim s As String Dim beforearray As Variant Dim afterarray As Variant beforearray = Array("/", "\", "<", ">", "*", "?", """", "|", ":", ",", ";") afterarray = Array("/", "¥", "<", ">", "*", "?", StrConv("""", 4), "|", ":", ",", ";") mylen = Len(maestr) For i = 1 To mylen s = Left(Mid(maestr, i), 1) For j = 0 To 10 If s = beforearray(j) Then s = afterarray(j) Exit For End If Next kinsoku = kinsoku & s Next Erase beforearray Erase afterarray End Function

usamingolf
質問者

お礼

何度もアドバイス、ありがとうございます。 短時間でこんなコードを作成していただき、感謝しています。 さっそく使わせていただきます! 助かりました!!

その他の回答 (4)

noname#99913
noname#99913
回答No.4

データを更新するのであれば、分割というよりリンクといった方がいいですね。 単純に、新しく10のブックを作り、各シートからリンクを張ればいいのでは? 先にシート全体の書式をコピーしておけば、あとはリンク式を入力し、コピーするだけです。 それとも、分割作業自体を繰り返す、ということでしょうか。だったら、一度手作業でやって、それをマクロ記録するという方法もあります。

usamingolf
質問者

お礼

すみません。 補足欄にお礼をしてしまいました。

usamingolf
質問者

補足

ご回答ありがとうございます! VBAをちょっとかじったので 何でもできると思ってしまったのですが リンクの設定がありましたね! その後に作業する人が出てきた場合のことも考え、 この方法で作成したいと思います! ありがとうございました!

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

#2です。 リアルタイムで元のブックに反映する必要がないのなら、 定期的に分割後のブックを削除して元のブックのシートから 再度ブックを作成、でもいいですね。

usamingolf
質問者

お礼

迅速なご連絡ありがとうございます。 その方法が一番スムーズなのでしょうね。 さっそく、実践します。 ありがとうございました!

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

各シートを独立したブックに分割するのはわりあい簡単ですが、 元のブックの編集を分割したブックに反映させるには、全セルに リンクを埋め込むか、分割したブックのシートモジュールかブック モジュールのChangeイベントで元のブックを開いて編集箇所を転記、 とすることになると思います。 編集のたびにイベントが起動するので編集作業が遅くなる可能性は あります。 ですので、変種情報をどこかに蓄積しておいて、何らかのタイミング で一括で編集を反映、としてもいいですね。

usamingolf
質問者

お礼

さっそくのご回答ありがとうございます! おっしゃるとおり、何らかのタイミングで 一括更新されるようにしたいと思っております。 もし、更新する作業が複雑であれば 各シートを独立したブックに分割する方法を教えてください! VBAに関しては初心者なので 複雑なコードになると、混乱してしまいそうなので。。

  • itigo555
  • ベストアンサー率25% (1/4)
回答No.1

http://kiyopon.sakura.ne.jp/soft/bunkatu.html こちらの、「シート名毎のファイルに分割」アドインソフト を使用されてはどうでしょうか?結構簡単そうです。 使ったことはありませんが。。。

usamingolf
質問者

お礼

さっそくのご回答ありがとうございます! 残念ですが、会社でソフトのダウンロードを禁止しているため 今回は使用できません。。 ただ、とても便利そうなソフトでかなり魅力的なので 最終手段として、とっておきます! 情報ありがとうございました^^

関連するQ&A

専門家に質問してみよう