• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロを教えてください。(初心者です)その2)

エクセルで期間限定のソフトを作成するためのマクロの作成方法

このQ&Aのポイント
  • エクセルで期間限定のソフトを作成するためには、マクロを使用します。まず、有効期限の日付を設定し、その日が来るとマクロが実行されるようにします。また、マクロでシートを削除し、上書き保存する方法も学ぶ必要があります。さらに、マクロを見れなくする方法や、パソコンの日付の操作による問題への対処方法も考慮する必要があります。
  • マクロを使用してエクセルで期間限定のソフトを作成する方法について教えてください。有効期限の日付を設定し、その日が来るとマクロが実行されるようにします。また、マクロでシートを削除し、上書き保存する方法も学ぶ必要があります。さらに、マクロを見れなくする方法や、パソコンの日付の操作による問題への対処方法も考慮する必要があります。
  • エクセルで期間限定のソフトを作成するためには、マクロを使用します。有効期限の日付を設定し、その日が来るとマクロが実行されるようにします。マクロでシートを削除し、上書き保存する方法を学びます。また、マクロを見れなくする方法や、パソコンの日付の操作による問題への対処方法も考慮する必要があります。

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

  • ベストアンサー
  • argument
  • ベストアンサー率63% (21/33)
回答No.5

おひさしぶりです himinana さん 今回の件は少々処理が長いのである程度小分けにしています。 まず事前の説明をします。 (1)有効期限の日付を入力しておいて、その日が来るとマクロが実行される方法 まずこれはマクロ内記述した方が良いでしょう。 わざわざこれのためにシートロックする必要はありません。 VBAのプロジェクトのロックは後で記述します。 (2)有効期限が来たら自動的にマクロが実行される方法 Thinworkbookからopenイベントを使用します。 開くたびに特定の関数でチェックします。 (3)マクロでシートを削除する方法 VBAで普通に削除できます。マクロの記録でもマクロは生成されるはずですが…? 何かシート再生する必要があるのでしょうか?あれば言ってください。 フォーマットシートをマクロ上から生成するなど方法はいくらでもあると思います。 ちなみに全てのシートを削除はしません。またその必要も無いでしょう。 (4)上書き保存するマクロ これもVBAで普通に保存できます。マクロの記録でもマクロは生成されるはずですが…? (5)シートを表示させるマクロ 事前にそのシートがないのであれば生成すればいい。ただそれだけです。 もしもそのシートがあるならばそのシートに切り替えるだけです。 まぁ事前にこんなシートあっても困るので今回は作成の方向でいきます。 (6)マクロを見れないようにする方法 -------------------------------------------------------------------------------- VBE(Microsoft Visual Basic)を開く -------------------------------------------------------------------------------- ツール(T) VBAProjectのプロパティ(E) 保護 タブを選択する プロジェクトのロック[プロジェクトの表示を用にロックす(V)]の部分にチェックを入れる プロジェクトのプロパティ表示のためのパスワード を入力 -------------------------------------------------------------------------------- 上記を行えばパスワードがわからない限りマクロを削除されると事はおろか 読まれることすらありません。 (7)パソコンの日付の操作の対処 システム日付変更への対処は正直面倒です。 仮に私がその方法を書いたところで理解は難しいでしょう。 レジストリとAPIをマスターしましたと言うのなら考えます。 多少悪質ならば外部ファイルを相手のわかりづらい所に設置しタイムスタンプを作成し しておく方法もあります。指定日以降以外の日付がくればタイムスタンプを作成しておく ことで使用できなくなります。 ですが根本対策ではなく、またいい使い方とも言いがたいでしょう。 では以下を回答として提示します。 ※以下は必ずVBE上のThinworkbookの中に書き込んでください。 Private Sub Workbook_Open() endsheetname = "有効期限切れ" '#有効期限切れ時のシート名 If Date >= "2008/09/10" Then '#有効期限切れの日付 Application.DisplayAlerts = False '#有効期限切れの作成 If Sheets.Count = 1 Then If Sheets(1).Name <> endsheetname Then Sheets.Add(After:=ActiveSheet).Name = endsheetname End If Else On Error Resume Next Sheets(endsheetname).Delete On Error GoTo 0 Sheets.Add(After:=ActiveSheet).Name = endsheetname End If '#有効期限切れのシート以外削除 sheetnumber = Sheets.Count For i = 1 To sheetnumber For j = 1 To 2 If Sheets.Count = 1 Then Exit For If Sheets(j).Name <> endsheetname Then Sheets(Sheets(j).Name).Delete: Exit For Next Next Range("a" & 1).Value = "有効期限が来ましたので、再度お申し込みください。" ActiveWorkbook.Save Application.DisplayAlerts = True End If End Sub どうですか?動かしてみましたか?条件は満たされたはずです。 有効期限以外の場合「有効期限が来ました」シートを除き全てのシートが削除されたでしょう? 追加処理・処理違い・補足等あればいってください。

その他の回答 (4)

  • kuma56
  • ベストアンサー率31% (1423/4528)
回答No.4

(1)有効期限の日付を入力しておいて、その日が来るとマクロが実行される方法 >TODAY関数と有効期限の引き算でゼロになったら実行でしょうか。 方法はいくつかあると思いますが、お考えの方法でも十分可能だと思います。 ただ、ゼロになったら・・・よりもゼロ以下になったら・・・の方がいいかもしれません。 >該当セルの数値がゼロになったらマクロが実行されるという方法をお教え頂けませんか。 マクロは基本的にエクセルのファイルを開いた状態で実行されると考えておいていいので、 実行する方法としては、 メニューバーからマクロを選んで実行 フォームやオートシェイプなどでボタンを作って(そこにマクロを登録しておき)マウスでクリックして実行 任意の特定のセルを(入力など)編集した時に実行 任意のセルを選択(クリック)したときに実行 ファイルを開いた時に自動実行・・・・・・などがあります。 したがって、該当セルの数値がゼロになる状況になっても、ファイルを開かないことにはマクロは実行されません。 TODAY関数も、ファイルを開いたときに当日の値を取得しているようです。 (2)有効期限が来たら自動的にマクロが実行される方法 >上記(1)の方法でやれば、ファイルを開いたとたんマクロが実行されるのでしょうか。 ファイルを開いた時に自動実行するマクロを設定しておき、その中に有効期限云々の条件を付けておけばそういう事も可能です。 "有効期限が来たら"っと言う条件でマクロの実行を変化させる場合は、VBAの記述の中に、IF・・・Then.....End IF という書き方で指定します。 IFの後に条件(TODAY関数と有効期限の引き算でゼロ)Then メッセージを表示して、不要シートを削除して保存する End IF こういった内容で、VBAの記述方法に従って指定します。 IF・・・Then.....End IF はマクロの記録では記録出来ませんので、VBEを使ってご自身で入力・編集することになります。 IF・・・Then.....End IFについては、VBEのヘルプファイルや、WEB上のエクセル関連のサイトを検索して情報を探してみてください。 (3)マクロでシートを削除する方法 >これは、通常のマクロの記録でやろうとすると・・・・シートがなくなっちゃった状態でしか保存できない気がするのですが・・・。 マクロで削除してそのまま上書き保存すれば、当然そういう結果になります。 (4)上書き保存するマクロ >上記(3)と同様、マクロの記録ではできないので、これ以外のやり方をお教え頂けませんか。 ワークシートの削除や上書き保存はマクロの記録でも可能だと思います。 ・・・・っが!質問者の言いたいことは、こうでしょうか? マスターファイル(例えば"今月の記録"という名前)に必要なデータを入力していき、月末が来たらその旨マクロで表示した上で、不要シートを削除して九月分・十月分・・・・・・と各月ごとに保存していく。 ファイルを保存したら翌月分は又マスターに記録していき・・・・・・・これを繰り返していく。 この場合はマスターファイルのワークシートを削除して上書きしたら、翌月分は記録出来なくなるでしょう。 なので、ワークシートを削除するなどの処理をしたファイルは、別の名前を付けて保存することになるでしょう。 これをマクロでやることも可能だと思いますが、作業の性格上はマスターファイルに翌月分を入力する段階ですでに保存用の名前に変更しておく方がいいでしょう。 とりあえずそれは手作業で名前を付けてやることにして、現状では次への課題としてだけ考えておいた方がいいかもしれません。 しいて言えば、ワークシート関数でファイル名を取得することは可能ですので、期限を過ぎたらマクロを実行という条件のほかに、マスターファイルと違うファイル名なら実行するという条件を付けておけば何とかなると思います。 (5)シートを表示させるマクロ >マクロを実行した時点で「有効期限が来ました・・」と入力されたシートを表示させたいのです。 マクロで表示させる方法をお教え頂けますでしょうか。 任意のシートの任意のセルにそのように表示しておき、マクロの記録でそのシートの表示範囲を選んでやれば記録されます。 要は不要シートの削除と同じで、その削除の部分を記録しなければいいのです。 (6)マクロを見れないようにする方法 (7)パソコンの日付の操作の対処 当然、そのような可能性はあります。 それを防ぐには、まず相手よりも質問者がエクセルに精通しなくてはならないでしょう。 簡易的に防止効果がありそうなストッパー的なものなら、なんとかなるかもしれませんが、それでも現状の質問者のスキルを推測するとそこまでは今対処出来なのではないかと思います。 将来を見据えたファイル設計は必要なことだとは思いますが、一度にアレも!コレも!では、前に進めなくなるだけだと思います。 今は、マクロについて基本から学んでいき。"期限が来たら自動的にメッセージを表示"の部分を実現させることを考えてやって、それが出来たら次の段階へ・・・・・・として、最終的にはマクロの削除や日付の変更に対応できるような所を目指すようにしてはいかがでしょうか? VBEのヘルプファイルや、WEB上のエクセル/マクロの解説サイトをチェックしていけば、ある程度のことまでは出来るようになると思います。 まずは、IF・・・Then.....End IF と MsgBox について調べてみてください。 この二つがわかるようになって、組み合わせてもできるようになれば、期限がきてメッセージを表示→ワークシートを削除する までは難しくなくなるでしょう。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

耳が痛いでしょうが・・・ あえて書かせていただきます。 基本的にご自分の思う機能のマクロを作成するための技量が、まだ不充分であろうと思われます。 まずはマクロを勉強することから始めましょう。 ご質問のテーマを完成させることを目標に、題材設定するのもよろしいかと思いますが、まずは基本的なことを覚えなければ、現状のままではまともなものを『完成』させることは難しいと想像されます。(勝手な想像ですので、まったくのはずれだったら申し訳ありません) VBA(MS関連ソフトのマクロ)に関しては、ネットのいろいろなサイトでも情報が得られますし、とりあえずの解説はエクセルのマクロのヘルプにも相当の情報があります。(もちろんマクロの例も相当量あります) もう少しとっつきやすいものでしたら、書籍にも多くのものがあるでしょうから、基本的なしくみ(マクロをどうやって作成するのか)や構文、文法などの概念を理解することをお薦めします。 1)期限日に実行するというものを作るのは大変です。(その日に電源が入っていなかったら動きません)通常はあるタイミングで(例えばブックを開いたらなど)日付をチェックして期限日を過ぎていたら実行するという考え方をとるでしょう。 2)期限日ではありませんが、イベントを利用することで1)のようなことは可能です。 3)Deleteメソッドで可能です。 Worksheets(シート名).Delete など 4)質問の意味が不明ですが、保存はSaveメソッドで。 Workbook.Save など  (マクロを編集する方法は下に記します。) 5)表示させるだけならActivateで。 非表示にしている場合はその前に表示状態に戻す手順が必要。 6)マクロをコンパイルしておく、VB化するなどが考えられますが、ファイルである以上エディターなどでは開くことが可能です。 7)正しい時間を得る方法として、NTPなどでネットワークを介して確認する方法がありそうですが、エクセルマクロの域を越えているような気がします。 回答をしてみたものの、どこまで参考になるかは不明です。 (ANo1様がご指摘の根本的な疑問をどうするかという問題も残りますね) エクセルをご使用のようなので、「ツール」-「マクロ」-「Visual Basic Editor」を開いて、適当なモジュール(Module1かな?)を見てみると、そこに自動記録されたマクロが記されているはずです。 ここに書かれている文章(?)が処理の内容を記したもので、これを適切に記すことにより、実行した時に目的の処理がなされることになります。 Editorとはこの命令群(コード)を編集するためのソフトですので、自由にマクロを編集することが可能です。 いろいろ実験して、理解を深めてください。

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.2

調べ方を覚えたほうがよいです。 (3)~(6)はこのあたりで解決できると思います。 思い通りの結果になるかはわかりませんが。 http://www.happy2-island.com/excelsmile/smile03/capter00303.shtml http://www.happy2-island.com/access/gogo01/capter00500.shtml (1),(2),(7)は日付関数とシリアル値を覚えて工夫しましょう。 http://excelvba.pc-users.net/func/func4.html http://exinfo.biz/func/func_datehour.shtml なぜ有効期限が必要なのかはわかりかねますけど。。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Bookを開いた時にマクロを無効にされてしまったら? と言う疑問が。。。

関連するQ&A