• 締切済み

エクセル2000(EXCEL)で日毎で実行させるマクロをひとつのオートシェイプに登録する方法

エクセル2000(EXCEL)でツール→マクロ→マクロの新しい記録(マクロの自動記録)を使用して日によって実行する内容の違うマクロ31個、つまり31日分のマクロを作ったとします。ひとつのオートシェイプを実行ボタンとして使いこれに日毎によって実行するマクロを変える様に登録する事ってできるのでしょうか?日付が変わっている条件としてはNOW関数で拾えるとしてこの条件を元にひとつのオートシェイプで日ごとに実行するマクロを変えるということはできますか?やっぱり実行ボタンとしてのオートシェイプを31個作りひとつづつマクロを登録していくしかないのでしょうか?またできない場合は他にどんな方法があるでしょうか?分かる方宜しくお願いいたします。

みんなの回答

回答No.5

こんにちは。kobouzuです。 >1列ずれるのではなくて3列づつずれていく様にするには Application.Goto Cells(3, Target.Value + 1), True の、Target.Value + 1 を Target.Value*3 - 1 にして Application.Goto Cells(3, Target.Value*3 - 1), True とするだけです。 >また例えば25日なら25日の表データ入力箇所にデータ入力後一旦他のシートにあるデータを入力した後、また25日の表データ入力箇所に戻る場合、kobouzu_suさんのやり方の場合、$A$1に再度25と入力しなければなりませんよね。 これは次のようなことをする時ですか? 例えば該当シートがSheet1にあり、 25日を入れ、列をずらし、25日の列にデータを入力 【別なシート、例えば、Sheet2】に移動してデータを入力 そしてまたSheet1に戻って、データ入力 もしこういうことであれば、再質問の件は杞憂です。 別なシートに移動する前に、Sheet1の表の25日の列を手動で移動させない限り、Sheet1はそのままの状態ですから。   ただ、こういったことを再質問しているということは 【ちゃんと確認してから】のことでしょうから、 たぶん、こちらの受け取り方が違っているのでしょう。 実際どういうことをしたのか、するのか、具体的に提示して頂く方がベターだと思います。 【例えば】、と例を出して質問するときは、寄せられた回答を自分で変更出来るときにするものです。 今回のように変更が出来ないのであれば、実際の作業、レイアウトに沿った詳しい情報をアップしなければいけませんね。 何回も遣り取りするのは質問者にとっても大変でしょうから。 特に、1日、3列がセットになってる、などということは非常に重要なことですよね。   以上です。  

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#1です。 > シートタブのコードの表示で出てきたウィンドウに貼り付けて見た > のですが何も起こりませんでした。 #1~#2ともにシートのイベントマクロではありませんので、標準モジュール(記録マクロが書き込まれるモジュール)にコピペしてツール-マクロから実行します。

回答No.3

こんにちは。 質問の件は、papayukaさんにお任せすれば安心してみていられますから、 別な角度からこんなんもあるよ、ということで。 新しいブックの Sheet1 で下記をお試しください。 (1)2行目は見出しとして、結果が分かり易いように、B2~AF2に日にち1~31を入力 (2)A列は縦項目として、A3~A???(適当な行まで)項目名を入力 (3)B3を選択して、ウィンドウメニューからウィンドウ枠の固定をする    (これで、1,2行目、A列が固定される)B3からデータ (4)Sheet1のシート名タブを右クリック (5)表示されるメニューの「コードの表示」をクリック (6)表示されるVBEの画面の右のコードウィンドウに下記のコードをコピペ    念のためVBE画面のタイトルバーに、Sheet1(コード)と表示されてるか確認 '---------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Address <> "$A$1" Then Exit Sub   If Target.Value < 1 Or Target.Value > 31 Then Exit Sub   Application.Goto Cells(3, Target.Value + 1), True End Sub '----------------------------------------------------------- (6)VBEの画面を閉じる (使い方) セルA1 に、日にちを入力する、例えば、25日だったら、25 と入力 どうなるかは試してみれば分かります。 以上です。  

tendo12
質問者

お礼

kobouzu_suさん ご回答有難うございます。Private Sub Worksheet_Change(ByVal Target As Range)以下の分を説明道理にコードの表示に貼り付けしてみた所、行が一列($A$1に1と入れるとアクティブセルが右に1列づつずれて行く事が確認されました。これを1列ずれるのではなくて3列づつずれていく様にするにはどこを変えたらよいのでしょうか。(1日当りの表のデータ入力項目が3セル有り横に長い表となっている為)。また例えば25日なら25日の表データ入力箇所にデータ入力後、一旦他のシートにあるデータを入力した後、また25日の表データ入力箇所に戻る場合、kobouzu_suさんのやり方の場合、$A$1に再度25と入力しなければなりませんよね。このような作業を10回繰り返す必要がある場合、10回$A$1に25と入力するには手間がかかる為、初回に25と入力後、簡単な操作で繰り返す事ができる手段はないのでしょうか。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1です。 先の例はあくまでサンプルです。 Msgbox 部分を好きな記述に変更するだけでも質問の回答に合致すると思いますが、、、 仮に セル B1 が「1日」で セル AF1 が「31日」の表として「17日に実行したら R列 最終行」を「25日に実行したら Z列 最終行」を選択したいって意味なら、Caseで条件分岐する必要すら無いと思います。 Sub Test1() Dim myCol As Integer, myRow As Long  myCol = Val(Format(Date, "d")) + 1  With ActiveSheet     myRow = .Cells(65536, myCol).End(xlUp).Offset(1, 0).Row     .Cells(myRow, myCol).Select  End With End Sub

tendo12
質問者

お礼

papayukaさん 再度、回答有難うございます。当方はビジュアルベーシックの知識がなく該当シートにsub TEST()以下の分をシートタブのコードの表示で出てきたウィンドウに貼り付けて見たのですが何も起こりませんでした。MSGBOXの条件文をやはり専門的な知識で書き直さなければいけないのですね。まあ、最初からここの部分が分かれば苦労はしないのですが・・・。急に質問文のような条件を含んだエクセルファイルの表を作らなければいけない状態になり、自動マクロの記録しか知識のない状態ではそもそも無理な課題だったのでしょうか。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

普通に考えれば31個のマクロへ割当を切り替えるのでは無く内部で分岐させます。 やりたい内容によっては分岐そのものも不要かも知れません。 Sub Test() Dim s As Byte  s = Val(Format(Date, "d"))  Select Case s   Case 1: MsgBox "初日です"   Case 15: MsgBox "15日です"   Case 16: MsgBox "16日です"   Case 31: MsgBox "月末です"  End Select End Sub

tendo12
質問者

お礼

papayukaさん、早速、ご回答いただきまして有難うございます。 私が考えるにこの記述ですと各日ごとにmsgboxを表示させるプログラムだと思います。当方の説明が足りず申し訳ありませんがやりたい事は1日~31日までの横に長い表があり各日ごとに(例えば蛇口10個の各蛇口の日ごとの水道の使用量)を入れるとします。(この場合、10個のシートに分けて各シートごとに管理すれば良いのではないかという考えは無しとして考えます。都合により書式が決められており変更できないのです。)自動マクロでは3日のマクロを実行させると表の3日のデータ入力箇所にセルが移動する、31日のマクロを実行すると表の31日のデータ入力箇所にセルが移動するといったものです。(いずれも同シート) 表が横に長い為に一日や二日、三日といった場合はデータ入力箇所を探す時に横にスクロールするのにあまり手間が掛からないのですが30日や31日の様に月末となるといちいち表の後ろまで横スクロールさせなければいけない為にとても手間が掛かるのです。その手間分をマクロで自動的に一瞬でできないかなと考えております。回答して頂きまして大変有難うございます。以上の内容で宜しければ再度回答して頂けるようお願いいたします。

関連するQ&A