[[20131024144931]] 『VBAでマクロ有効ブックからマクロのない新規ブッメx(ふじこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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.