ママのスキンケアのお悩みにおすすめアイテム

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

No2です。


サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub
    • good
    • 3
この回答へのお礼

サンプルコードまでどうもありがとうございました!
すごーく助かりました。
今日の午後は仕事がここで止まっていたのですが、すっきりしました!!

お礼日時:2006/05/22 17:35

エクセル2003以降はセキュリティの問題からVBAでVBAのモジュールをいじれなくなったと聞いています。


なので、現在は「シートの移動またはコピー」を使って複製しているのでしょうから、それを、新しいブックのワークシートにコピー&ペーストする方法に変えればいいと思います。単に数値や文字データだけであれば「値」貼り付けでボタン等も排除できます。数式や書式もコピペしたければ「数式貼り付け」と「書式貼り付け」でOKです。
    • good
    • 0

保存するマクロをそのブックではなくPERSONALブックに


保存すればシートのコピーするブックを開いても
確認メッセージは出ないのでそうすればどうでしょう?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【Excel VBA】シートコピー時、マクロコードはコピーしたくない

ws.copy Before:=Workbooks(File).Sheets(1)
Windows(File).Activate
Cells.Select
Selection.copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

上記コードで、シートのコピー・貼付を行っていますが、
コピー元シートのコードも引き継がれてしまいます。
引き継がれないようにコピーしたいのですが、可能でしょうか?

可不可について、
可能ならばそのやり方(コード)を教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんにちは

ご質問で求められている結果に対する理解が不充分かも知れませんが、
  シート(ws)のコピーを、ブック(file)Sheet1の直前に 挿入
  作成したシートの、数式の戻り値を 値に 直す
  シートモジュールのコピーを除いたコード、、、
というお話だと理解しました。


#2さんと殆ど同じなのですが、
元のシート(ws)の書式が新しいシートに反映されるようになってます。
コメントはコピーされますが、他のShapeは残りません。
もし、Shapeまでコピーするのでしたら、別途、ご質問されるとよいと思います。

#3も禁じ手と仰っていますが、
VBAのコードそのものを書き換える方法は、
それ以外に方法がない場合の非常手段だとしても、
余程パーソナルな用途でしか考えない方が良いです。
仕事で使うことが内規違反になる可能性もあるし、
使えない環境もありますので、
私も回答には書きたくないですね。

  ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇

Sub TEST()
Const sFile As String = "ファイル名.xls" ' ※
Dim ws As Worksheet ' ※

  Application.ScreenUpdating = False ' ※

  Set ws = ThisWorkbook.Sheets(1) ' ※

  With Workbooks(sFile).Worksheets
  With .Add(Before:=.Item(1))

    ws.Cells.Copy .Cells

    .UsedRange.Value = .UsedRange.Value

    .Activate

  Application.ScreenUpdating = True ' ※
'    MsgBox "Done" ' ※
'    .Delete ' ※
  End With
  End With
End Sub

  ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
     ' ※ の行は、便宜的な記述です。


ご質問と関係ないことを書くことを、お許し下さい。
どうしても書いておきたいので、、、

Wendy02 さん
あなたがいないと、困ります。
出来れば、考え直して頂きたいけれど、
多く学ばせて頂いた一人として、感謝しています。
ありがとう ござい ます!!

こんにちは

ご質問で求められている結果に対する理解が不充分かも知れませんが、
  シート(ws)のコピーを、ブック(file)Sheet1の直前に 挿入
  作成したシートの、数式の戻り値を 値に 直す
  シートモジュールのコピーを除いたコード、、、
というお話だと理解しました。


#2さんと殆ど同じなのですが、
元のシート(ws)の書式が新しいシートに反映されるようになってます。
コメントはコピーされますが、他のShapeは残りません。
もし、Shapeまでコピーするのでしたら、別途、ご質問されるとよ...続きを読む

Q(Excel VBA)シートコピー時マクロはコピーしたくない

教えていただけますでしょうか?

マクロでシートをコピーしています。
しかし、コピー元にマクロ記述があるのですが(これは消さない)、
シートをコピーした後このマクロ記述まで一緒にくっついてきます。

・あるシートのマクロ記述を消すには、どうマクロを組めばよいか?

よろしくお願いします。

Aベストアンサー

こんにちは。Wendy02です。

>まず新規ブックにシートをコピーしてブック内でコピー→値貼り付けという流れになっています。そうするとどうしてもマクロまで持ってきちゃうんですよね……。

それは、ありえないと思いますね。

>→標準モジュール自体ありませんし、
> シートのモジュールもThisWorkBookにも一行も存在しません。
> なぜでしょうか?

もし、本当に、プロジェクト・エクスプローラのすべてのVBE を開いても分からないというなら、コンパイル型マクロのウィルス感染しかありません。

ただ、セキュリティの警告が出たときに、そのメッセージの内容をチェックしてください。必要ならメモをしてもよいです。(ちゃんと出てきてはいませんが、ある程度は分かります)

最初に、セキュリティ警告ダイアログで、
---------------------------------------------
"C:\.................."  ←ここを良くみてほしいです。
(省略されていますが、なんとか分かるはずです)

以下の発行者によるマクロが含まれています。
(ないばあいもある)
---------------------------------------------
とか出てきます。

次に、セキュリティの「信頼出来る発行元[タブ]」の部分で、
少なくとも、

組み込み済みのアドインテンプレートをすべて信頼する
にはチェックが入っているのでしょうか?

他にも、まだあります。私は、あまりこういう質問は得意でないというか、あれもこれも、と考えてしまうので、一般の回答者さんのように、「キメウチ」的に回答することが出来ません。もともと、セキュリティのオプション自体が、極論的には、一般のVBAプログラマ(CA認証を持たない製作者)が不要だという発想にあるものだと思っていますので、一旦は解決したと思っても、次期バージョンでは別の設定が発生したりします。なお、「低」でも、ウィルス感染自体は、アンチウィルスがあれば、本来は関係ありません。アドイン・プログラムの種類によっては、MS自身が「低」を勧めていたりするのですから、いかに、その設定は「不毛」なのか分かります。単に、マクロが入っています、程度のものしかないのです。

なお、#2のコードの

Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues)
   ↓
Worksheets("Sheet1").Range("A1").PasteSpecial
に変えていただければ、データ全部をコピーします。
シートのローカルマクロまでは、オブジェクトの単位が違いますので、コピーはされません。

こんにちは。Wendy02です。

>まず新規ブックにシートをコピーしてブック内でコピー→値貼り付けという流れになっています。そうするとどうしてもマクロまで持ってきちゃうんですよね……。

それは、ありえないと思いますね。

>→標準モジュール自体ありませんし、
> シートのモジュールもThisWorkBookにも一行も存在しません。
> なぜでしょうか?

もし、本当に、プロジェクト・エクスプローラのすべてのVBE を開いても分からないというなら、コンパイル型マクロのウィルス感染しかありません。

た...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcel VBAで複数シートをコピーする

Excel VBAで複数のシートを新たらしいブックにコピーする方法が分かりません。

一応、Selectで全てのシートを選択し
コピーする方法は分かるのですが
出来ればSelectなどの画面遷移をプログラム内に含ませたくありません

シートは n件存在します。
ご存知の方がおられましたら
ぜひ、教えて頂けないでしょうか?

Aベストアンサー

すいません、勉強不足でした。
ただ単純に「全てのシートを選択」し「新規ファイルにコピー」という動作であれば、
sheets.Select
sheets.Copy
だけでできました。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QExcel:VBAブック保存時にマクロをはずずには

すでにマクロが組まれているファイルを、名前をつけて別のファイルに保存するときに、
新しく保存するファイルからはマクロをはずして保存させるにはどの様にしたら良いのでしょうか。

名前をつけて保存することも、VBAで動作させます。

ファイル保存時ではなくとも、マクロをはずずVBAを教えてください。

何卒アドバイスを下さいますよう宜しくお願いいたします。

Aベストアンサー

こちらを参考にされては?
井上治氏の
マクロを除いた配布用ブックを作成する。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_200.html

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング