• ベストアンサー

EXCELでマクロを初めて実行してみたんですがぁ・・・・

初めてマクロというものをやってみました。 ただ、動作を記憶させただけです。プログラムは全然知りません。 sheet1の株価4本値と日付を1日だけ繰り上げる 単純な動きです。一番最後のセルにその日の 日付と4本値と入れて、マクロを実行させて、1日だけ繰り上げる 作業です。 それを、Sheet2が「=Sheet1!B2」このような形で参照するように してあるのですが、実行させると、 Sheet2B2のセルが#REF!とかなんとか表示されて B3からしか正しく表示されません。 以後同じことを繰り返すと、どんどん1つずつセルがエラーして 正しく表示されるセルが下がりながら、減っていってしまいます??? なぜなんでしょうか?? また回避策というか、正しい方法はありますでしょうか?? 何卒、初めてなので、わかりやすくお教えいただけると ありがたいです。 よろしくお願いを致します。

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

  • ベストアンサー
  • cmc32000
  • ベストアンサー率41% (103/251)
回答No.1

オートマクロで作ったのでしょうが、うまく動かないのは、「絶対参照」と「相対参照」の区別を指定しないからだと思います。 参照するセルの場所が、固定されている場合は「絶対参照」で、現在のカーソル位置からの相対位置で指定する場合は「相対参照」にします。 これが必要なマクロは、基本的にはオートマクロでは作れません。作った後で、修正が必要です。 「プログラムは全然知りません。」という状況を変えないと、思い通りに動くマクロは作れません。 先ずは、「絶対参照」と「相対参照」を勉強してみてください。今後、エクセルのマクロが使えるかどうかの、大きな関門です。

welovekobe
質問者

お礼

早々にどうも有り難うございます。 ハイ。勉強しますぅ~ 感謝!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#79209
noname#79209
回答No.2

余計なお世話とは思いますが、 私はエクセルではマクロを極力使用しないようにしています。 ご自分だけで使用する分には良いのですが、職場など他の人も使うエクセルファイルへのマクロの導入はお勧めしません。 1.マクロのメンテナンスに忙殺されてしまう。 2.マクロが入っているときに表示される「ウイルス云々」のメッセージに過剰反応する人が必ずいる。 また、安易にマクロに走るクセがつき、表のレイアウト改善やワークシート関数で事足りるものまでマクロで処理しようとします。 案外「ハエ」一匹落とすために「レーザー砲」を製作するようなことになっているかもしれません。 とは言っても別に「マクロを習得するな」と言っているわけではなく、上記を踏まえた上で習得していただきたいのです。 老婆心ながら...

welovekobe
質問者

お礼

どうもアドバイス感謝です。 気をつけて利用します・・・!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルマクロで日付検索について

    エクセルのマクロで日付を検索するマクロについて質問です。 ブックAのシート1のA列に A1 2017/3/13 A2 2017/4/1 A3 2017/4/19 A4 2017/5/16 A5 2017/7/17 A6 2017/9/5 というような日付が入っています。 ブックBのシート1のA1セルに2017/6/3と入力してマクロを実行した際に その日付に一番近い一つ前の日付を探し、見つけた日付のB列のセルを ブックBのシート1のA2セルに表示したいです。 今回の例であれば2017/6/3に対してブックAのシート1のA列はA4セルが当てはまり その当てはまったA4セルの1つ横のB4セルの内容をブックBのシート1のA2セルに表示するということです。 よろしくお願いします。

  • エクセル マクロ 参照データのコピー

    エクセル2010を使っています。 A1セルに 山田 と入っています。 A5セルに =A1と入っていて 山田 が表示されています。 その状態でマクロ Sub ボタン1_Click() Worksheets("sheet1").Range("A5").Copy Worksheets("sheet2").Range("A5") End Sub を実行すると、コピーは出来るのですが、表示が #REF となってしまいます。 おそらくコピーしたA5セルが他セルを参照しているからだと思いますが、これを正しく表示させるにはどういった方法があるでしょうか? 実際の範囲はすごく広いので、あくまでも 他セルを参照しているセルをマクロでコピーしても、見えている数値を表示させる方法を知りたいです。 詳しい方、よろしくお願いいたします。

  • エクセルのマクロを教えてください。(初心者です)その2

    エクセルで期間限定で使えるソフトを作ろうと思っています。 簡単に申し上げると、 使用期限を設けて、期限の日がくると、 エクセルのセルに 「有効期限が来ましたので、再度お申し込みください。」 という文章が表示され(ポップアップでなくていいです)、 このシート以外は片っ端からシートが削除され、 上書き保存され、これ以上使えないというものを作りたいのです。 ツールバーのマクロの記録を利用した 極度に簡単なマクロしかやったことがないので、 以下の点を中心にマクロの作成の仕方を お教え頂けますと幸甚です。 (1)有効期限の日付を入力しておいて、その日が来るとマクロが実行される方法 TODAY関数と有効期限の引き算でゼロになったら実行でしょうか。 該当セルの数値がゼロになったらマクロが実行されるという方法を お教え頂けませんか。 ちなみに、有効期限の日付は、非表示にしてシートの保護で開けないようにしておこうと思います。 (2)有効期限が来たら自動的にマクロが実行される方法 上記(1)の方法でやれば、ファイルを開いたとたんマクロが実行されるのでしょうか。 (3)マクロでシートを削除する方法 これは、通常のマクロの記録でやろうとすると、 シートを削除すると「やり直し」でもシートを復活させられないので、 シートがなくなっちゃった状態でしか保存できない気がするのですが・・・。 (4)上書き保存するマクロ 上記(3)と同様、マクロの記録では できないので、これ以外のやり方をお教え頂けませんか。 (5)シートを表示させるマクロ マクロを実行した時点で「有効期限が来ました・・」と入力された シートを表示させたいのです。 マクロで表示させる方法をお教え頂けますでしょうか。 (6)マクロを見れないようにする方法 マクロを自由自在に操れる人が 私の作ろうとするエクセルファイルを手にしたら、 「有効期限になる前にマクロを削除しちゃえ」と やられないかが心配です。 うまい対処方法ございませんでしょうか。 (7)パソコンの日付の操作の対処 上記の(6)と絡むのですが、 パソコンの日付とプロパティーから パソコンの日付をいじって 有効期限より前の日付にしたら ずっと使われてしまうのではないか心配です。 うまい対処方法ございませんでしょうか。 ずぶの素人の私にどなたか この方法をご教示頂けませんでしょうか。

  • エクセルのマクロについて質問です。

    エクセルのマクロについて質問です。 マクロを発動した時に、あるセルに入力してある数値を参照し、その行のX列目に数値を張り付けるものを作成しようとしています。 例えば シート「1」の A1に日付を入力 B1にある数字を入力 シート「2」の A列にA1→1~A31→31の日付が入力されている時 マクロ発動時にシート「1」A1の日付と一致する シート「2」のB列にシート「1」のB1の値を貼り付け ↑たとえばシート「1」のA1が1日でB1が500だった場合 シート「2」の1日(A1)と同じ行でB列(B1に500を 貼り付けるものです。 かなり下手な説明だと自覚しておりますが、解読できる方 どうかご教授ねがいます。

  • エクセル:マクロを実行しているときの、めまぐるしい画面の動きを

    マクロを実行しているとき、実際のアクティブシートで処理されている動きがディスプレイ上でめまぐるしく動きますが、 (1)例えば、マクロの実行中の間中、「しばらくお待ちください!」だけを表示したい。 (2)可能ならば、あと約何分で終了という表示をしたい。 せめて、(1)だけでもしたいのですが、お願いします。

  • エクセルのマクロについて

    QNo.3421130で質問させて頂いた件の続きなのですが 入力シート(1)のA1に入力された値を、シート2のB1に表示(つまりB列の同じ行数のセルに表示)するというマクロをお教え頂き、早速実践してみましたが、入力シートA1に入っている値が入力シートA10から算出された値(例:A11に日付の2007/10/18と入っていて、A10にはMONTH関数で10だけを抽出している。そのA10の値10をA1が参照している状態やIF関数で反映された値等)がシート2に表示されません。 また本マクロは入力シート(1)とシート2の同じ行列のセルの表示しか出来ませんが、たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 以下、お教え頂いたマクロです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 1 Then    Sheets("Sheet2").Cells(Target.Row, "B").Value = Target.Value  End If End Sub 続きの質問であることと、説明が分りにくく大変申し訳ありません。 非常に困っております。よろしくお願いします。

  • Excelシートの自動コピーでマクロを使いたい

    表題通り、Excelシートの自動コピーをマクロを使って行いたいのですが、 マクロやVBAの知識が全くないため、どなたかコードを教えていただけないでしょうか。 まず今現在、B1セルに9月1日と日付を入れ、シート名を1日としたものがあります。 これを自動で複製して、B1セルの日付を9月2日 9月3日… シート名を2日 3日…となるように、日毎ごとの一ヶ月分のシートを作り ひとつのbookにしたいと考えております。 また、その際に、B1セルとシート名の日付が日曜・祭日に当たる場合、 シート名に色を付けたいと思っています。 (因みにB1セルの日付はシリアル値で入れていて、 書式で○月○日となるように表示していて、日付が日曜・祭日に当たる場合は 赤文字になるよう、別シートに祝日リストも作って 条件付き書式で設定してあります。) Excelの関数は使えても、マクロは全く分からないので どうかよろしくお願い致します。

  • Excelマクロで任意の項目の数値を自動コピー

    【要望】 Excelのマクロを使用して、任意の項目の数値を、任意のセルへ自動的にコピーしたいです。 さらに、マクロを実行した日付を判別して、データの抽出するセルを自動的に変えるようにしたいです。 【具体例】 マクロを組むことで、Sheet1の「*」の部分にSheet2の数字を参照して、自動的にコピーをするようにしたいのです。 さらに、実際に1月1日の日時にマクロの実行を行えば「1月1日」のデータをコピーし、 次の日、1月2日にマクロの実行を行えば「1月2日」のデータをコピーするようにしたいのです。 ////////////////////////// <Sheet1>         1月1日 1月2日   A社実績    *     *   B社実績    *     * <Sheet2>         1月1日 1月2日   B社       目標    1     1     実績    1     1   A社     目標     1     1     実績     1      1 ////////////////////////// 【問題点】 (1)Sheet2はSheet1とフォーマットが違うため、単純なセル番地の参照では、思い通りに行かない。 (2)マクロを実行する日時によって、異なる作業を行うマクロにしたいが、思い通りに行かない。 【ヒント】 教えて頂く側の立場がヒントを出すなんて大変恐縮ですが、TODAY関数をうまく利用すればできるのでしょうか...?? 以上です。 よろしくお願いします。

  • 非表示シートのマクロ実行

    マクロ処理をさせたいAシートを非表示にしてBシートにマクロボタンを置いて実行させたいのですが 非表示にすると実行できません。 Aシートは 計算処理を行い Bシートには 値だけを出したいので BシートからAシートのマクロ処理を実行したいと思っています。 非表示にしても別シートから実行出来る方法を教えてください。

  • マクロを実行した日付をセルに表示させたい

    あるマクロを実行したとき、実行した日付をA1セルに表示させたいのですが、どうやったらいいでしょうか。 いろいろやってみましたが上手くいかないようです。 どなたか、教えていただけると助かりますので、宜しくお願いします。

専門家に質問してみよう