• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロの保存先(マクロ初心者))

エクセルのマクロの使い方について

このQ&Aのポイント
  • エクセル2010を使用している初心者がマクロの使い方について悩んでいます。マクロを使うことで手作業が簡単になることを実感していますが、保存先や実行範囲の設定がうまくできません。
  • 起動時に特定の範囲のセルを削除して新たに入力できる状態で起動させたいと思っていますが、他のシートやブックに影響が出てしまうため、設定方法を知りたいです。
  • マクロの保存場所や使用するシートを使い分ける方法も気になっています。初心者には汎用性のある設定よりも、特定のシートでのみ使える設定方法を教えてほしいです。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.7

>Sub Auto_Open() >Range("A6:D9").ClearContents >End Sub >これだと開いてきたSheetが対象になってしまう事に気付いたので >質問させていただきました。 その通りです。 ご呈示のコードではRangeの値を削除しているだけですので、 シートの指定が省略されています。 エクセルVBAではシートの指定を省略した場合に、 アクティブ(選択中)なシートが対象となります。 Worksheets("シート名").Range ~~  →シート名を指定してセル範囲を指定 Workbooks("ブック名").Worksheets("シート名").Range ~~  →ブックとシート名を指定してセル範囲を指定 など、ほかのブックやシートがある場合に意図しない動作を する可能性があるのであれば適切に支持してあげる必要があります。 >自動マクロは下の3行(正確には1行)です。 >他にも3行程度の自動マクロも試しているのですが、 >危ないのでTESTのみで止めています。 >更には開いている .xlsm Bookにマクロにウッカリ感染?しないか >等々心配になってきています。 ご自身で作られたものなので、ブラックボックス化しないように コードのコピペだけではなくコードの意味を調べ、 作成したマクロの動作を把握して使用することが大切です。 VBAにはマクロの挙動を1行1行確認する方法として「ステップアップ実行」が ありますので、活用してみてください。 http://plus1excel.web.fc2.com/learning/l301/t405.html

akira0723
質問者

お礼

ありがとうございました。 上記非常に参考になります。 少しずつマクロに慣れていこうと思います。 また宜しくお願い致します。

akira0723
質問者

補足

>Workbooks("ブック名").Worksheets("シート名").Range ~~ ありがとうございます。 先ずは上記から始めてみて、マクロに慣れたいと思います。 助かりました。

その他の回答 (7)

回答No.8

Auto_Open は使い勝手がどうでしょう、とも思いますし、 その他にも色々あるんですが・・ま、置いといて本題。 Sub Auto_Open()     Worksheets("シート名").Range("A6:D9").ClearContents End Sub あるいは Sub Auto_Open()     Worksheets("シート名").Select     Range("A6:D9").ClearContents End Sub で「当面は」解消できると思いますよ。 > そこで、他のBookやシートに影響しないような設定の仕方を教えて頂きたいのです。 > マクロに汎用性を要求するのは次の段階だと思います。 いえ、シートの指定は基本中の基本です。 多分、Auto_Openは「次の段階」のそのまた次の段階以降の話でしょうね。 > 「個人Book」とか、「開いている・・・」とか「作業中の・・・」とか 記録機能の話でしょうか? 現段階では特に深く考える必要も無いのでは?が正直なところ。 「このブックだけで使えたらいいや」⇒作業中のブック 「あ、これは他の何かに応用できるかも」⇒個人用マクロブック 程度のものですよ。 他人に配布してマクロを生かしたい場合は必然「作業中のブック」です。 > ウッカリ意図しない動作されると非常に困ります。 シート・ブックの保護機能はご存知ですか? マクロを使うより手軽ですから、調べてみると良いかもしれません。 例えば   https://support.office.com/ja-jp/article/%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E4%BF%9D%E8%AD%B7%E3%81%99%E3%82%8B-7e365a4d-3e89-4616-84ca-1931257c1517 こんな感じで情報が出てきます。 マクロに手を出す前に「エクセルで出来ること」を覚えておいた方が良いですよ。 何でもかんでもマクロ・・というのは正直オススメしません。 マクロを怖がるユーザーもいますからね。 まぁ、私見ですけどね。

akira0723
質問者

お礼

本当にありがとうございました。 次の機会にも是非とも宜しくお願い致します。 他のご回答者様にも多くのお手数をおかけしました。

akira0723
質問者

補足

>「このブックだけで使えたらいいや」⇒作業中のブック >「あ、これは他の何かに応用できるかも」⇒個人用マクロブック >程度のものですよ。 ご回答ありがとうございます。 当方の悩みの種(何となく不安)が上記の回答でスッキリしました。 Auto_Openが他のシートにも影響することから、「作業中のブック」=その時に作業している(=開いている)全てのブックが対象に動作してしまうのではないかと・・・ テストで実行してみても今一確信が持てなかったので「これは危ない」と思い質問させていただきました。 当方の知識が乏しいばかりに多くの皆様にお手数をおかけしてしまいました。 当面は教えて頂いたように、作業中のブック、さらにはSheetを指定して、マクロに慣れようと思います。 次の機会にも何卒宜しくお願い致します。 尚、当方はエクセルへの入力ミス防止に取り組みだしており、ブックやセルの保護機能やリンク参照、ワードへの(自動転記)等は既にいたるところで使用しているのですが、最近マクロの必要性を感じて勉強し始めたばかりの超初心者ゆえの質問でした。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.6

質問者さんはこんがらがっているようですね。 (1)該当のブックを開く (2)エクセルメニューより「表示」→「マクロ」と選択 (3)マクロ名「auto_open」を入力し「作成」を選択  ・マクロの保存先は「作業中のブック」としてください (4)以下のコードを記述(すでにSub auto_open()~End Sub)は記述済み Sub auto_open() Worksheets("Sheet1").Range("A1:C5").ClearContents End Sub (5)コードの入力画面(VBE)を右上の「×」で終了 (6)ブックをxlsmまたはxls形式で名前を付けて保存(これらはマクロがブックに保存できる形式) この手順で作成すれば(3)の作成時に、(1)で開いたブックの標準モジュール(自動作成)のauto_openプロシージャ(一部自動記入)にご自身の追加されたコードが記録されて保存されます。 ブックには標準モジュール以外にもシートモジュール、thisWorkbookモジュールなど、マクロのコード(VBA)を記述する場所が複数あります。 今回のauto_openプロシージャは「標準モジュール」に記述することで、マクロが保存されたブック(=標準モジュールにauto_openプロシージャが記述されたブック)が開くと実行されます。 この時、(4)で記述したコードが実行されますので、シート名が「Sheet1」のセル範囲「A1:C5」の値が削除(ClearContents)されます。 ですので、たとえSheet2があろうが、ほかのブックが同時に開いていようが、Sheet1という名前のシートがほかのブックにあろうが、プロシージャ名「auto_open」が記述されたブックを開けば、同ブックのSheet1のA1:C5が値削除されます。 なお、こちらのコードでは単にシート名を指定して範囲の値削除をしていますが、 ・シート名がSheet1からSheet3に代わる可能性がある   →シート名の指定ではなくて、左から何番目のシートのような指定方法にする ・シートの並びが変わる可能性がある   →シート名や順番の指定ではなくて、特定のセルに特定の文字が入っているシートのような指定方法にする など、条件や用途によってコードは適切に変更しないといけない場合があります。 現在記述されているコードのサンプルを記載していただき、シートの要件、問題になっている事柄を具体的に記載していただければより適格な回答が得られるかと思います。 先ずは、マクロの記述する場所やその挙動、ブック、シートの指定方法、などを勉強してみてください。 http://officetanaka.net/excel/vba/beginner/10.htm

akira0723
質問者

お礼

ありがとうございます。 当方の無知のせいで、お手数をおかけしましたが、皆様のおかげでようやく全貌?が理解できました。 本当に助かりました。 これから、コツコツとマクロを使い慣れていきたいと思います。 次の機会にも何卒宜しくお願い致します。

akira0723
質問者

補足

ご回答ありがとうございます。 上からザァと読ませていただいて出来そうな感じがします。 尚、当方が苦労して作成した、自動マクロは下の3行(正確には1行)です。 他にも3行程度の自動マクロも試しているのですが、危ないのでTESTのみで止めています。 Sub Auto_Open() Range("A6:D9").ClearContents End Sub これだと開いてきたSheetが対象になってしまう事に気付いたので質問させていただきました。 更には開いている .xlsm Bookにマクロにウッカリ感染?しないか等々心配になってきています。 主目的は作業の簡略化ではなく、誰もが意識しなくても間違わないような仕掛けを自動化することです。 すでに手動ではいくつかの簡単な作業のマクロが出来ているのですが現在は封印しています。 当方の現在の状況を考慮すると、同じマクロをBookごとに作成しても良いので他のBookやシートに影響しないような方法(式)が先ずは知りたいのですが。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.5

改めて、考えた の、ですが VBA の、ソースコードは 何処に、入れてます? ソースコードの、入ってない ブックを、開けても AutoOpenの、コードは 動作、しない 筈 よく、解らない の、ですが 取り、敢えず 指定法を、示します フックを フルパスで、オープンした 其の、後 Sheetを、指定します、 フルパスで、オープン http://shuhho.hatenablog.com/entry/excelvba-25 Sheetを、指定する http://officetanaka.net/excel/vba/sheet/sheet01.htm

akira0723
質問者

お礼

重ねてのご回答に感謝いたします。 ようやく理解できました。 本当にありがとうございました。 次も宜しくお願い致します。

akira0723
質問者

補足

当方のレベルゆえのお手間を取らせて申し訳ありませんが、もう少し教えて頂きたく。 使い始めたのは、下記のような本当に単純なマクロ(とも呼べないような)レベルの話です。 先ず「マクロの記録」で試して、その中身を確認しながら、ここで教わりながら・・・・何とかかんとか、ファイル立ち上げ時の削除がうまく行った次第です。最終的にはAuto_Openというマクロ名+1行で出来ました。 よって、ソースコードの意味が分かりませんが、 「ソースコードは何処に、」も有りません。←この答が間違っていないことを祈ります。 トホホ・・・ Sub Auto_Open() Range("A6:D9").ClearContents End Sub ちなみに「ファイルのフルパス」は、¥から始まってxlsmまでのルートの事ですよね? このルートやSheet名を上のマクロの何処にどのように追加するのかが分かりません。 というレベルですので、更に分かりにくくしていたら御免なさい。

  • osahune
  • ベストアンサー率47% (288/609)
回答No.4

>同時に漢字混じりのファイル名も固定する式 上記の言わんとすることが理解できないんですが・・・ 下記のような感じ(しゃれじゃありません^^;)ですか? ’例-漢字ファイル名+作成日とか Dim Save_File, Save_Filename As String '名前を付けて保存するファイル名の初期設定 Save_Filename = "漢字" & Format(Date, "YYYYMMDD") & "-#" & ".xlsx" '-#は同じ日に作成した場合に保存時に任意に(ハンドで)連番付けします '「名前を付けて保存する」ダイアログボックスの表示 Save_File = Application.GetSaveAsFilename(Save_Filename, _ FileFilter:="Excelファイル,*.xlsx") '名前を付けて保存する ActiveWorkbook.SaveAs Filename:= _ Save_File, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

akira0723
質問者

お礼

ありがとうございました。 皆様のおかげでようやく理解できました。 本当に助かりました。 また宜しくお願い致します。

akira0723
質問者

補足

早々のご回答ありがとうござます。 質問が悪く、誠に申し訳なく。。。。 当方の追加事項は恐らく、ご回答のような高度な要求ではなく、既存のファイル(ファイル名が「ABC123   結果入力表」)のSheet1でのみ動くAuto_Openマクロです。 最初は対象をファイル名が「・・・ 結果入力表」のファイル名の全ファイルにしようとしたのですが、これは当方の力量では無理、との判断で、まずは使用頻度の高いBookからコツコツやるかと思い、始めたのですが今回質問のリクスに気付きました。 恐らく普通にマクロを使用している方にとっては当方のレベルが理解しにくいとは思いますが、重ねて宜しくお願い致します。

  • osahune
  • ベストアンサー率47% (288/609)
回答No.3

いつもシート1の特定セルを削除したいならシート1を指定すればよいのでは? 例・・・ Dim sheet1 As Worksheet Set sheet1 = Worksheets(1) sheet1.Activate

akira0723
質問者

お礼

ようやく全貌?が理解できました。 マクロの保存先と実行シートの区別がゴッチャになっていました。 ありがとうございました。

akira0723
質問者

補足

ご回答ありがとうございます。 動作するシートを固定するには、保存先ではなく(ここが勘違いでした)コードで特定すれば良いのですね? 申し訳ありませんが、同時に漢字混じりのファイル名も固定する式を教えていただけないでしょうか? お手数をおかけしますが、仕事で使いたいので宜しくお願い致します。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

削除する のでは、なく 何度も、流用せず テンプレートから 新規オープン、しては 如何、ですか? 例えば フルパスで Sheet名も、含めて 全て 指定する、方法 も、考えられますが が、 運用が大変、 名が、変えられない、 等 利便性が、損なわれます 削除、 其の、ものを 諦めた、方が 良い で、しょうか? ね

akira0723
質問者

お礼

>フルパスでシート名も含めて指定する方法でマクロに慣れていきます。 ありがとうございました。

akira0723
質問者

補足

ご回答ありがとうございます。 お手数をおかけしますが、 「フルパスでSheet名も、含めて全て指定する」方法 を教えて頂けませんか? 仰る通り最初は自分の都合の良いように動くイメージしかなく、便利だと思っていましたが、今は多少利便性を犠牲にしてもやりたいファイルが有るので。 お手数をおかけしますが宜しくお願い致します。

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

「ウッカリ意図しない動作されると非常に困ります」というのならAuto_Open などを使うのはやめたほうがよい。マクロを普通に標準モジュールに書いて,実行したいときに手動で実行させれば,意図しないときにマクロが動くことはありません。 Sub ClearContents_A1C5_Sheet1() Worksheets("Sheet1").Range("A1:C5").ClearContents End Sub

akira0723
質問者

お礼

いつもお世話になっております。 ご回答の方法で当面慣れていきたいと思います。 ありがとうございました。 また宜しくお願い致します。

akira0723
質問者

補足

F727-さん いつも大変お世話になっております。 早々のご回答ありがとうございます。 当方も今はAuto_Openは使用しない方が良いと思い、一旦中止しています。 が、使っていきたい背景としては、自分が使用するのではなく、入力作業以外にはエクセルを使用しない複数の人が間違えないためのミスオペ防止策としての活用です。 前回の入力が残っていると、ウッカリデータを更新するのを忘れて前回の数値のまま報告書が作成されてしまう、という問題がたまに発生します。 よって、現在は報告書作成後は、「入力セルは削除してから保存」というルールにしていますが、やはり気配り対策なので、使用後は自動で削除したい、が要求として有ります。ちなみに入力セル以外には保護をかけて有ります。 先ずは、ファイル名(製品名)とシート(Sheet1)を特定して、マクロを実行させられれば良いのですが。 ご回答をみて気付いたのですが、マクロの保存先ではなく、コードで指定すれば良いのでしょうか? ならば どこに、どのようにファイル名(製品名なので、漢字もあり)+Sheet名を入れるのか、式を教えて頂けませんでしょうか? お手数をおかけしますが、よろしくお願い致します。

関連するQ&A