[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでマクロ有効ブックからマクロのない新規ブックにマクロをコピーしたい。』(ふじこ)
お世話になります。 エクセルとは違うソフトで出来上がってくるエクセルの マクロのない新規ブックなのですが 中身は複数枚のシートで、同じ形式の表が入っています。
他のマクロ有効ブックに、その複数のシートの表を 新しいシートを挿入したものに全部コピーして一つにまとめた シートを作り、それ以外を削除するマクロを作ったのですが そのマクロを新規ブックにコピーして使っているのですが 毎回手入力でマクロをコピーして処理するのは結構厄介で…。
何とかそのマクロ有効ブックから、上記の処理を自動で 出来るようになりませんでしょうか?
説明が下手で申し訳ありません。 どうぞよろしくお願いいたします。
エクセル2007で、OSはXPです。
>新しいシートを挿入したものに全部コピーして一つにまとめた シートを作り
が終了した段階で、そのまとめたシートを Copy 保存 すればいいだけじゃないの? (seiya) 2013/10/24(木) 17:26
seiya様 早速にありごとうございます。 その処理をするマクロが新規ブックに入っていないので 入っている他ブックからマクロをVBAで移せないものかと思案しております。
他ブックから、他ブックの既存のマクロを動かす事はApplication.Runで可能な様ですが…。
まだまだ初心者なもので…。 どうぞよろしくお願いいたします。
(ふじこ) 2013/10/25(金) 09:51
こんにちは
そのマクロ有効ブックに、マクロのない新規ブックを開くコードを追加して開いた新規ブックの 複数のシートの表を新しいシートを挿入したものに全部コピーして一つにまとめたシートを作り、 それ以外を削除する処理を実行するようにしてはどうですか?
(ウッシ) 2013/10/25(金) 09:55
新しく纏めたシートをそのマクロ付きで保存したい ってことですか?
もしそうだとすると、そうすることの意味が理解できません。
Sheets("纏めたシート").Copy ActiveWorkboook.SaveAs .....
で保存するってことではないの? (seiya) 2013/10/25(金) 10:12
こんにちは。
マクロ有効ブックには、 「その複数のシートの表を 新しいシートを挿入したものに全部コピーして 一つにまとめたシートを作り、それ以外を削除するマクロ」 があるんですよね。 でもそのマクロは、自ブックのシートを対象にして処理するように作られている。 だから、わざわざ「エクセルとは違うソフトで出来上がってくるエクセルの マクロのない新規ブック」にマクロを手でコピーしてから処理をしている。 マクロを手でコピーするのが面倒なので、マクロ有効ブックからマクロを実行して 処理するように出来ないか?
と、こういう質問ですよね?
現在のマクロに、「処理したいブックを指定して開く処理」と、 「加工後のブックを保存する処理」を追加すれば良さそうですが、 現在のマクロにもブックの指定を追加するなどの修正が必要そうですね。
現在のマクロをアップした方が、分かりやすいアドバイスがもらえると思います。 (めいぷる) 2013/10/25(金) 11:14
皆さま、本当にありがとうございます。 内容はめいぷる様のおっしゃる通りです。
結局、マクロ有効ブックに、マクロのない新規ブックを開くコードを追加して 全てのシートをマクロ有効ブックにコピーしてきて処理すれば良いのかな?という気がしています。
全てのシートをコピーしてくるコードが、まだわからないのですが…。 とりあえず、マクロ有効ブックの中にあるコードは下記の状態です。
ヒントをどうぞよろしくお願いいたします。
ub 自動実行マクロ() Call sh_check Call まとめ Call 他のシートをすべて削除する End Sub
Sub sh_check() Dim newSh As String Dim Sh As Worksheet, myFlag As Boolean newSh = "全データ" myFlag = False For Each Sh In ThisWorkbook.Worksheets If Sh.Name = newSh Then myFlag = True '----全データシートのデータをクリアし、先頭へ移動します Worksheets(newSh).Cells.ClearContents Worksheets(newSh).Move Before:=Sheets(1) Exit For End If Next Sh '----全データシートを先頭へ追加します If myFlag = False Then ActiveWorkbook.Worksheets.Add(Before:=Worksheets(1)).Name = newSh End If End Sub Sub まとめ() Dim LastR As Long, TgtR As Long Dim Sh As Worksheet, TgtSh As Worksheet Set TgtSh = Sheets("全データ") Application.ScreenUpdating = False TgtR = 1 TgtSh.Rows("1:" & TgtSh.Range("A65536").End(xlUp).Row).Delete For Each Sh In ThisWorkbook.Worksheets If Sh.Name <> TgtSh.Name Then With Sh LastR = .Range("A65536").End(xlUp).Row If LastR > 1 Then .Rows("1:" & LastR).Copy TgtSh.Rows(TgtR) End If End With TgtR = TgtSh.Range("A65536").End(xlUp).Row + 1 End If Next Application.ScreenUpdating = True End Sub
Sub 他のシートをすべて削除する()
Dim lp As Long
If Sheets.Count < 2 Then Exit Sub If MsgBox( _ "他のシートをすべて削除してもいいですか?", _ vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub
ActiveSheet.Move Before:=Sheets(1)
Application.DisplayAlerts = False For lp = Sheets.Count To 2 Step -1 Sheets(lp).Delete Next lp Application.DisplayAlerts = True
End Sub
(ふじこ) 2013/10/25(金) 11:59
なるほど、現在の状況はわかりました。
> エクセルとは違うソフトで出来上がってくるエクセルの > マクロのない新規ブックなのですが > 中身は複数枚のシートで、同じ形式の表が入っています。
1) そのブックはそのままの状態にしておいて、纏めシートのみの新規ブックを作成 2) そのブックを纏めシートだけにして保存
の二通りの選択肢があると思いますが? (seiya) 2013/10/25(金) 12:14
seiya様 ありがとうございます。
確かに二通りの選択肢があると思います。
(ふじこ) 2013/10/25(金) 15:13
そのコードを自分で書いたなら、すぐできると思うけど? (seiya) 2013/10/25(金) 15:34
仕事場のパソコンを使用して書き込んでいる為 忙しくてなかなか開けずにおりました。
調べに調べて、ここまでコードを書いたのですが おかげさまで方向性が見えた気がします。
頑張って仕上げたいと思います。
皆様本当にありがとうございました。 (ふじこ) 2013/10/30(水) 17:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.