• ベストアンサー

エクセルVBAで質問です

あるブックのシートに入力するようにしています。そこには関数や、 リストなどさまざまな設定がされています。そのブックにコードを書いてマクロ実行ボタンもそのシートに付けたいと思っています。 このシートをデスクトップにコピーして別ブックとして作成したいのですが、コードを教えていただけないでしょうか。できるかわかりませんが、関数が設定されてある箇所は関数としてではなく、値としてコピーされると都合がいいです。 また、作成されたブック(コピーしたシート)には、マクロのボタンなんかが残らない形ではできないものでしょうか?

  • newme
  • お礼率54% (218/400)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ご指摘のものは、フォームツールのボタンですね。 フォームツールのボタンでしたら、簡単に変更するには、標準モジュールに貼り付けたコードから、 "Private" を取ればよいのです。本来は、そのプロシージャの名称がヘンですが、「Sub CommandButton1_Click()」 とすれば、選択できますし、「Sub ボタン1_Click」でもよいです。 コントロールツールのコマンドボタンは、 コントロールツールボックスを、ワークシート画面の-表示メニュー-ツールバーから出します。(メニューバーのところを右クリックしても可能です。) 次に、コントロールツールボックスの中のコマンドボタンをワークシートに貼り付けます。 その[コマンドボタン]は、編集可能状態ですから、それを「ダブルクリックする」と、VB Editr 画面が自動的に現れます。 そうすると、 ---------------------------------- Private Sub CommandButton1_Click() End Sub ---------------------------------- という中身のコードのない文字が出ているはずです。 そこに、私の書いた中身を入れてあげます。 それを、Alt + Q で、画面を閉じます。 今は、コントロールツール-ボックスの先頭の青い三角定規▲(直角の二等辺三角形)が、[オン]になっていますから、それをクリックして、[オフ]にして、コントロールツールボックスを非表示にしたら、出来上がりです。 p.s. 余計な知識ですが、Excelの一般のマクロは、標準モジュールに入れますが、シートに直結したコントロールツールは、シートモジュール-左側のプロジェクト・エクスプローラの、Sheet1, Sheet2, Sheet3 に入れることになります。しかし、フォームツールのコントロールは、一般的に、標準モジュールに入ります。なぜ違うかというと、Excelのプログラム・オブジェクトの管理する場所が違うからです。 一応、Excel2000以降は、これらボタン等のツールは、コントロールツール側が主流になりました。フォーム側は簡単ですが、Ver.5 を主に使われてきたもので、若干、使い方が違います。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 そのマクロは、比較的良く知られたものだと思います。 ただし、人によって解釈の差はありますから、若干違いはあります。 コントロールツールのコマンドボタン-ダブルクリックして、VBEを開いたら、中身をのみを登録してください。 ファイル名は、日付型にしましたので、071118.xls というものになります。同名がある場合は、07118a ~z .xls までとなります。 '-------------------------------------------- Private Sub CommandButton1_Click()   Dim fname As String   Dim mDeskTop As String   Dim i As Integer   Dim OrgSh As Worksheet   mDeskTop = "C:\Documents and Settings\[ユーザー名]\デスクトップ\"   'または、   'mDeskTop = "C:\Documents and Settings\All Users\デスクトップ\"   Set OrgSh = ActiveSheet   fname = mDeskTop & Format$(Date, "yymmdd")   With Workbooks.Add     OrgSh.Cells.Copy     ActiveSheet.Cells.PasteSpecial xlPasteValues     ActiveSheet.Cells(1, 1).Select          '同名のファイルがある場合     Do Until Dir(fname & ".xls") = "" Or i > 25       fname = Mid$(fname, 1, Len(fname) - 1) & Chr(97 + i)       i = i + 1     Loop     If i < 27 Then       .SaveAs fname & ".xls"     Else       MsgBox "デスクトップに同名ファイルがあります。", 48       Exit Sub     End If   End With   Set OrgSh = Nothing End Sub

newme
質問者

お礼

大変詳しくご説明いただきありがとうございました。コピーできました。教えていただき助かりました。本当にありがとうございます。

newme
質問者

補足

ご回答ありがとうございます。早速登録させてもらおうと思ってやってみたのですが、登録がうまくできませんでした。 いつもはBVEの標準モジュールを開いて、そこに入力またはコピーしています。そして閉じて、ボタンを配置すると、自動で登録するマクロを指定するウィンドウが現れるので、指定する。というようにボタンを利用できるようにしています。Wendy02さんが仰る、 >コントロールツールのコマンドボタン-ダブルクリックして、VBEを開いたら、中身をのみを登録してください。 この「コントロールツールのコマンドボタン-ダブルクリック」がどういうことなのか理解できませんでした。勉強不足でスミマセン、もう一度お教え願えないでしょうか。

関連するQ&A

  • VBAのハイパーリンクについて質問です

    こんばんわ。 VBA初心者です。調べてみて分からない箇所がありましたので教えてください m(_ _)m マクロを作成しているブックを、リスト.xls とします。 リストのマクロを実行して、別のブックを開く動作を行います。 開くブックは毎回違い、シートも複数あります。 条件にあてはまるシートをリスト.xls のシート2にハイパーリンクを追加したいと思っています。 ブック、シート名を指定すればリンクを追加できるのですが、毎回ブックもシート名も違うので 変数を使用しなければならないと思うのですがどのように書いていいのかわかりません。 出来れば簡単な解説付きだと嬉しいです。 よろしくお願いします。

  • エクセル内でのVBAの質問です。

    閲覧ありがとうございます。 エクセルの作業ファイルにてVBAのコードを作成しているのですが、中々思う通りに実行できないので、ご教授願います。 実行したい内容については以下の通りです。 ボタン1を押すと(添付画像上段のブック)、マイドキュメント内にある「データ転送ソフト2」という名前のブックを開き、そのブックのシート「A」内(添付画像下段)の、ボタン1を押したシートのF1セル(添付画像上段のブック)と同じ文字(日付)の列と"う"と入力された行の交差したセルの数値(添付画像下段の紫色のセル)をコピーして、ボタン1を押したシートのT4のセル(転送値1:の右隣にある薄緑のセル)に貼り付ける作業が行えるコードをご教授願いたいです。 要約しますと、作業しているシートのボタン1を押すと、別の場所にあるブックを開き、そのシート内の条件に沿った数値をコピーして、作業しているシートの指定されたセルに貼り付ける作業が行いたいです。 とても分かりにくい文章で申し訳ございませんが、お願いします。 可能ならば、コードの解説もつけてくださると嬉しいです。

  • エクセルVBA初心者です

    参考書籍を教えてください 質問1 会社でエクセルマクロを使う機会が増えました。大抵のことはマクロの記録で対応してますが、細かいファイル操作が出来ません。VBAを勉強する必要があると思ってます。何か良い参考書はありませんか? 質問2 ブックAでマクロAを作りました。マクロAの中で、ブックBのマクロBを実行させてます。マクロBは、計算結果としてブックB上に新シートを作成し、終了します。その後、マクロAに戻りブックBの新シート上のセル2個を選択しコピーし、ブックAにてペーストさせようとしてます。 マクロAはブックA上で「マクロの記録」で作成しました。 実行させると、マクロBの終了時点でストップするようです。 何がマズイのでしょうか?

  • excelでマクロシートをコピーしたとき

    excelでbook1のsheet1のセルA1に「1」を入力→プリントアウト→A1に「11」を入力→プリントアウト・・・以下「31」まで繰り返し。 というマクロが組んであります。 (ボタンにマクロが登録されています。) このシートをbook2にコピーをしたときに マクロを実行する(ボタンを押す)とbook1が開いてしまいます。 これをbook1を開かずにbook2でマクロを実行するには どのようにしたらよいでしょうか。 book2でマクロを作成し直して さらにボタンにマクロを登録していますが、 bookの数が多いのでけっこうな手間になります。 簡単な方法があれば教えて下さい。

  • Excel 違うBookのシートをコピーする

    Excelでわからないことがあり質問させていただきました。 原紙のBookに 資料のBookのシートをコピーさせたいのですが 資料Bookには シートが sheet1~sheet50まであり 原紙のBookにマクロのボタンやフォームを作成し 毎回資料のBookの違うシート名を選択しコピーをさせることは可能なのでしょうか? たとえば 原紙のシートに入力フォームを作り sheet名を入力 → 「コピー」のボタンを押すとコピーができる。 といった感じに・・・ フォームでなくてもリストなんかでもいいのですが・・・

  • Excel コマンドボタンにマクロ設定!

    皆さんに色々教えて頂き、「コマンドボタンにマクロを設定→実行」まではなんとか出来るようになりました。^^ しかし。。。 (Windows XP) 「Sheet1」でコマンドボタンを作成し、マクロを設定 マクロ内容:「Sheet1」のコピー(「Sheet1」に作成した表の雛形を繰り返し使いたい為) マクロの設定を終え、ボタンを押すと「Sheet1」のコピーは作成されるのですが、 コピーされた全てのSheetに、コマンドボタンも一緒にコピーされてきます。(T_T) 1.マクロを設定したコマンドボタンは、最初のSheetにだけあればいいような気がするのですが、どうなのでしょうか? 2.どうすればコマンドボタンは張り付いてこなくなるのでしょうか? 宜しくお願いします。 P.S マクロ・コマンドボタンについてもあまり詳しくない為、質問の内容が分かりづらくてすみません。m(__)m

  • VBA セルの値を別セルにコピーするには

    VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _                  Paste:=xlPasteValues, _                  Operation:=xlNone, _                  SkipBlanks:=False, _                  Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。

  • エクセルについて質問。

    マクロを設定してあるシートを、コピーして同じものをいくつか作りたいのですが、シートをコピーすると、コピーはできても、マクロの設定は消えてしまいます。 マクロの保存先は、『開いているすべてのブック』になっているのですが、このような場合どうすればよいのでしょうか。 よいアドバイスお願いします。

  • EXCEL VBA シートの名前を指定してコピー

    EXCEL VBA 初心者です。 とても困っています。 助けてください。 excel2010を使っています。 今,「原本」というシートがあり,それをマクロを使って同じブック内にコピーしたいと思っています。 コピーして新しく作られたシートの名前は「A1」のセルに入力されている値にしたいです。 コピーされた後のシートにはマクロボタンは削除したいと考えています。 また,コピーした後のアクティブシートは「原本」のシートにしたいのですが これを全部いれたコマンドはどのようになるのでしょうか。 似たような質問だったり,回答があるのですが, どのように組み合わせたらいいのかよく分かりません。 どなたかお助けいただけないでしょうか。 よろしくお願いします。

  • エクセルVBAでコピー

    エクセルVBAでのコピーについての質問です。 ブック1 とブック2があります。 ブック1 のSheet1 内にマクロ含むワークシートを 新規ブックにファイル名を指定して 下記のようなプログラムでコピーしようとすると (標準モジュール1の内容) Sub newfilesave() MsgBox "デスクトップの「○○」フォルダに控え○○_日付時間.xlsxファイルを生成します。" Sheets("受付仕分リスト").Copy ActiveSheet.Cells.Copy ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveSheet.Range("A1").Select 'マクロなしのエクセルデータとして名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 ActiveWorkbook.SaveAs _ Filename:="C:\Users\user\Desktop\○○\○○_" & Format(Now(), "yyyymmdd_hhmm"), _ FileFormat:=xlOpenXMLWorkbook End Sub Sheet1 内にマクロの内容までコピーされてしまいます。 ブック1のレイアウトや書式などはそのままに マクロ部分だけを取り除いてコピーするには どのような流れでプログラムすればいいでしょうか? よろしくお願いします。

専門家に質問してみよう