• 締切済み

エクセル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

  • エクセル:シートの全コピー貼り付けでオートシェイプを除いて実行

    エクセルのシート(Cells)の全データをコピー&(別のシートへ)貼りつける(マクロを使用して貼りつけています)とき、「オートシェイプ」だけを除いた全データを貼り付けることは可能でしょうか? そのオートシェイプはマクロボタンとしているのですが、マクロを実行するたびにオートシェイプの貼付けが繰替えされるため、どんどん重なっていくのを防ぎたいのです。よろしくご指導ください。 ※このオートシェイプの貼付の繰返しによりファイルが重くなることはないでしょうか?ないのなら無視してもよいかとは思っています。

  • エクセル2007でのオートシェイプのマクロ記録

    エクセル2007でのオートシェイプのマクロ記録ができません。 エクセル2000、エクセル2003では、可能です(テスト済)。 2007でのオートシェイプのマクロ記録のやり方は何か特殊なのでしょうか。 たとえば、エクセル2007の開発タブから「マクロの記録」を選び、楕円を描いてマクロ記録を終了し、VBEでそのマクロを開いても、題名等はあるものの sub 題名()から End Sub までの間にコードはなく空白になります。 おわかりの方にお尋ねします。 検索してみましたが、件数が多く閲覧した範囲では、見当たりませんでしたので、よろしくお願いします。

  • 【EXCEL VBA】オートシェイプをクリックした時にそのオートシェイプの名前を取得したい

    ワークシートに多数(60個程度)のオートシェイプが配置されています。それらにはひとつひとつ「名前」をつけています。(オートシェイプ1とかを1日とかに変更しました) これらのオートシェイプをボタン代わりにマクロを割り当てて実行しようとしています。 そこで、例えば”1日”と名前を定義したオートシェイプがクリックされた時にその名前”1日”を取得する方法が解りません。 説明が下手でうまく伝わっているか心配ですがよろしくお願いします。

  • オートシェイプに関するマクロ

    エクセルのオートシェイプの書式設定のサイズの倍率(縦横比を固定)を、120%にするマクロって可能でしょうか? 沢山の図形の大きさを調節する作業があるのですが、その都度オートシェイプの書式設定を開いて値を入力すると大変な手間になってしまいます。 図形をセレクトしてマクロを実行するだけで、大きさを変化させるようにしたいのですが。 ご存知の方がいましたら、よろしくお願いします。

  • WORD VBA オートシェイプにマクロを登録したい

    オートシェイプ(四角)をクリックする度に 塗りつぶしの色が白→黒→白というように変わるように したいのですが。(チェックボックス代わりに使いたい) EXCELのオートシェイプには「マクロを登録する」と いう項目がありますが、WORDにはありません。 何かの方法でマクロを登録したいのですが 方法はありますか。 よろしくお願い致します。

  • エクセル2002マクロ オートシェイプの消去方法を教えて下さい

    エクセルでB5~F18に掛けて表があります。 この表は毎日1表ずつ分あり、使わない日は右上から左下に向かって斜線を引きます。 オートシェイプで引いた線をマクロで記録して引いているのですが、誤って引いてしまった時の消去マクロが作れないかな、と考えているのですが、可能でしょうか? マクロの記録で、オートシェイプをクリックしてDeleteとやってみたのですが、うまくいきません。 どうやら線を引くたびに番号がつくらしく、その番号の線を消す、という風に記録してしまう為、エラーになってしまうようです。 表に斜線が引ければ良い訳で、他に方法があるのならそれで構いませんし、表は印刷してペーパーで保管しています。 何か良い方法がありましたら、宜しくお願い致します。 ちなみに今、描写の為に使っているマクロは下記の通りです。 Sub Macro2() ActiveSheet.Shapes.AddLine(15.75, 59.25, 323.25, 475.5).Select Selection.ShapeRange.Flip msoFlipHorizontal End Sub

  • Excelでマクロを消すには

    マクロが組み込まれているExcel2003のファイルがあります。 マクロについて詳しくわからないのですが、複数の伝票シートを一括印刷するボタンがあったり、 チェックボックスに応じてオートシェープや文字が切り替わる機能があります。 この伝票のひな形だけを使いたく、枠や文字だけを新しいシートに値でコピーし、 別名で保存しました。 ボタンやオートシェープはありません。 また、ツール→マクロを選んでも特に何も見当たりませんでした。 しかし、このファイルを開くたびに このファイルにはマクロが…  [マクロを有効にする][マクロを無効にする] というダイアログが表示されてしまいます。 マクロを消すといいますか、このダイアログが表示されないようにする方法がありましたら 教えてください。 よろしくお願いいたします。

  • Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

    Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。 オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。 マクロ記録をすると以下のようになりました。 Sub Macro1() ActiveSheet.Shapes("AutoShape 1").Select Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45 Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid End Sub このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。 ・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう? ・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか? よろしくお願いします。

  • Excel2000でマクロの「ツール」から実行を出来なくする方法

    VBAをシートの「ツール」-「マクロ」-「実行」を出来なくする方法を教えて下さい。 ただ、VBA自体を動かなくさせるのではなく、あくまでもシート上に「ツール」から実行させない方法です。 ボタンに登録してあるマクロは、押す事で実行させたいです。 「ツール」-「マクロ」へ行くのをパスワード管理で制御する方法でも良いです。 Excel2000使用の初心者です。よろしくお願いします。

  • Excel マクロ登録されたシェイプをクリックした際にシェイプ名取得する方法

    エクセルのシートの毎行にオートシェイプを貼りつけて、それぞれにマクロを登録します(例えば「行削除」「行挿入」など) シェイプをクリックして起動されるマクロの中で、どのシェイプからマクロが起動されたか(もしくはクリックされたシェイプがあるセルアドレス)を取得する方法があればお教え下さい。よろしくお願いします。 シェイプ名が取得できればIntersectメソッドで行のアドレスが取得できると考えておりますが、色々調べてもどのようにしたらイベントが拾えるかわかりません。 フォームのコマンドボタンを使用すればClickイベントは発生するのですが、コマンドボタンでは行挿入(他のシートから行コピー&行の挿入)を行ったときに一緒に貼り付いてくれないので、可能であればシェイプで実現したいと思っています。

専門家に質問してみよう