• 締切済み

ある列のリアルタイム数値を3分毎に列をずらしながら記録するEXCELマクロを作りたい

EXECL2002 SP3を使っています。 B2からB99まで数式が入力されています。 この数式の結果はリアルタイムで変わります。 このリアルタイムデータを、 記録するマクロを作成したいと考えています。 9時1分から20時1分まで3分毎にデータを取得し、 C列、D列、E列、と列をずらしながら記録していきます。 以下のようなイメージになります。 ☆数式の状態     A   B 1        =now 2    東京  =tokyo.temperature 3    千葉  =kanagawa.temperature 4    埼玉  =saitama.temperature ☆9時1分のシートの状態     A   B   C 1        9:01  9:01 2    東京  11.5  11.5 3    千葉  11.9  11.9 4    埼玉  10.8  10.8 ☆9時4分のシートの状態     A   B   C   D 1        9:04  9:01  9:04 2    東京  11.6  11.5  11.6 3    千葉  12.1  11.9  12.1 4    埼玉  11.0  10.8  11.0 ☆9時7分のシートの状態     A   B   C   D   E 1        9:07  9:01  9:04  9:07 2    東京  11.8  11.5  11.6  11.8 3    千葉  12.4  11.9  12.1  12.4 4    埼玉  11.1  10.8  11.0  11.1 上記の作業を実現できるマクロを 教えていただけませんでしょうか。 よろしくお願いいたします。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

分かりにくそうな所の一例です 現在時から t_str = Now 3秒ごとに"test_01"を実行 t_str = t_str + TimeValue("00:00:03") 1分過ぎると終了 t_end = Now + TimeValue("00:01:00") のマクロです #1さんの回答も参考にしてアレンジしてください '----------------------------------------------------------- Sub test_00() Dim t_str, t_end As Date t_str = Now t_end = Now + TimeValue("00:01:00") Do Application.OnTime EarliestTime:=t_str, Procedure:="test_01" t_str = t_str + TimeValue("00:00:03") Loop Until t_str > t_end End Sub '----------------------------------------------------------- '----------------------------------------------------------- Sub test_01() MsgBox "コピー処理" End Sub '----------------------------------------------------------- 質問の仕方に一言 一般的ではないものや、紛らわしいものにはコメントをつける等の心遣いを >=now 関数で()を忘れたのかVBAで書き出しているのか紛らわしい >=tokyo.temperature この数式は標準でEXCELにない 表の数値ですが、temperature=気温が一般的ではないので、単位を付ける等、説明が必要では 最後に >この数式の結果はリアルタイムで変わります がちょっと気になります OnTimeはEXCELで何か処理をしていると、待機しますのでデータの更新の方法によっては、処理されない?可能性があります

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

何分間隔で実行など、VBAでも上級の課題だ。エクセル本来の処理を超えている。それを課題を丸投げしていて、回答者にコードを書いてくれということになるが、それは規約違反。 ただしこの課題は有名なものなので、 「何分間隔で実行」のコードは、「何分間隔で実行 VBA」でWEB照会すれば載っている。調べてみること。 1例 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv214.html タイマーを使った制御 あるいはOnTimeで照会。 ーー 右の列に順次追加していくのだけ載せておく。手始めにはコマンドボタンをシートに1つ貼り付け、そのクリックで実行されるコードをテストで確かめるべきだ。 Private Sub CommandButton1_Click() c = Range("iv3").End(xlToLeft).Column MsgBox c d = Range("A65536").End(xlUp).Row MsgBox d Range(Cells(1, "A"), Cells(d, "A")).Copy Cells(1, c + 1) End Sub A列にデータを入れて、ボタンをクリック、次にA列のデータを変えてクリックで、右端列の次に追加される様子が納得できるでしょう。後は Private Sub CommandButton1_Click()  をSub Test01() などに変えて、タイマーのコードから実行するマクロとして書けばよい。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

今現在は手作業で行っているのでしょうか。 マクロの記録でほとんど作成されると思います。 B列は関数で準備します。マクロの記録開始して 3分たったら、C列をコピィ D列に数式をコピィ、C列へ値でコピィ 再計算 上記で作成されたマクロを3分単位で繰り返すには ONTIMEコマンドで実現できます Application.OnTime Now + TimeValue("00:03:00"), "Macro1" こんな感じで使用します。 http://www.moug.net/faq/viewtopic.php?t=34886

kana2hiro2
質問者

補足

ありがとうございます。マクロの記録を使って、以下の検証マクロを作ってみました。 ただこれでは逆おくりになりますので、他の方の意見も参考にして、手を加えてみます。 Private Sub Macro1() Range("B2:B96").Select Selection.Copy Range("C2").Select Selection.Insert Shift:=xlToRight Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("C:C").Select Application.CutCopyMode = False nextTime = Now() + TimeValue("00:03:00") Application.OnTime nextTime, "Macro1" End Sub

関連するQ&A

  • エクセル マクロ 対象列をコピーする

    エクセル マクロについて質問です。 下記のようなデータがありますが、【商品名】ごとにまとめたものを 別のシートへ行ごとコピーをして、商品名毎にまとめたいと思っています。 マクロの構文が思いつかず、よい方法はないでしょうか。 初歩的な質問かも知れませんがおしえてください。 マクロ実施前 【県名】  【商品名】 【売り上げ日】 【その1】 【その2】 埼玉県   A 東京都   B 神奈川県  B 千葉県 A 栃木県   C 群馬県   D マクロ実施後↓↓ Aシート 【県名】  【商品名】 埼玉県   A 千葉県 A Bシート 【県名】  【商品名】 東京都   B 神奈川県  B Cシート 【県名】  【商品名】 栃木県   C 群馬県   D Dシート 【県名】  【商品名】 群馬県   D

  • エクセル 重複する文字列からピックアップしたい

    A列に県名が並んでいます。 B列にA列の中で重複している物に上から番号を振りました。  B1=IF(A1="","",A1&COUNTIF($A$1:A1,A1)) C列に末尾に1とあるものだけをピックアップしました。  C1=IF(COUNTIF(B1,"*1"),(LEFT(B1,LEN(B1)-1)),"") ですが、21、31もピックアップされてしまいます。当然ですが・・・。 県名を一種類ずつピックアップするにはどのようにしたら良いですか?    A B C _______________________________________________ 1 | 東京    東京1   東京 2 | 神奈川  神奈川1  神奈川 3 | 千葉    千葉1   千葉 4 | 神奈川  神奈川2 5 | 埼玉    埼玉1   埼玉 6 | 東京    東京2 7 | 群馬    群馬1   群馬   21| 東京    東京21 東京2 22| 神奈川  神奈川31  神奈川3 23| 東京    東京22 24| 東京    東京23

  • VLOOKで『0』を返す

    【シート1】   【シート2】 A   B     A   B 埼玉 100   茨城  100 東京 200   埼玉  0 千葉 150   千葉  0 長野 200   東京  200  茨城 100   長野  200 (数式)=VLOOKUP($A1,Sheet1!$A$1:$B$5,2,0) シート1のA列に"県名"、B列に"数値"があります。シート2のA列にはシート1と同じ県名があり、B列にはシート1からVlookupで数値を検索しました。結果、埼玉・千葉のみ『0』を返しました。空白の確認もしましたが大丈夫でした。 また、シート1・2の埼玉・千葉の文字の後ろに適当に文字を入れて(埼玉A←の様にです。)検索した場合は正しい値を返しました。この原因が分れば教えて頂きたいです。 お願いします。

  • エクセルマクロで条件に該当する数値を探す

    エクセル初心者です。 シート1のA1~A18に1~18の数値がランダムに入っています。(重複した値は無し) シート2の3行目C3~T3にも1~18の数値がランダムに入っています。(空欄あり、重複した数値は無し) シート2の2行目C2~T2までは左から順に1~18の数値が入っています。(順位表示) 以上の条件下で下記の作業をマクロで実行させる式を教えてください。 シート1のA1~A18の値と同じ値を、 シート2の3行目C3~T3の中からどのセル(列)に入っているかを確認して、さらに該当する列の2行目C2~T2の値を、シート3の1行目A1~R1に表示させる。 例:シート1のA1=3、A2=2、A3=1の時、 シート2のC3=3、D3=1、E3=2でした。 シート2のC2=1、D2=2、E2=3です(この行の数値は毎回同じ) 上記の時シート3にはA1=1、B1=3、C1=2となります。 *シート1のA列A1~A18とシート3の1行目A1~R1の位置関係はリンクしています。(列→行) シート1 A列 1 3 2 シート2   A列 B列 C列 D列 E列 2行見出し見出し1  2  3 3行見出し見出し3  1  2 シート3 A列 B列 C列  2  1  3 ご理解頂けたでしょうか? 初心者ですので分かりやすい回答を宜しくお願いいたします。

  • エクセルの行にあるものを列にする数式

    エクセルの数式を使って、行に入っているものを別のシートの列に入力することについて質問です。 例(シートA)    A  B  C  D 1  月 火 水 木 2  10 20 30 40 ABCDが列番号、1,2が行番号です。 このように入力したシートがあります。 そして、違うシートには下のように入力したいのです。 例(シートB)    A  B  C  D 1  月 10 2  火 20  3  水 30 4 木 40 (ずれてしまってすみません) シートBの『10,20,30,40』のところに数式を入れたいのですが、シートAに入力した時に、シートBにそのまま反映されるようにしたいのです。 ちなみに、シートBのB1(10となっているところ)に『=シートA!A2』と入力して、それをシートBのB列全体にコピーすると、シートAのA列部分を縦によんでしまうので、反映されません。 シートAでは横によんでいって、それをシートBでは縦に表示する、というところです。 このような説明でわかりましたでしょうか? $マークも使って絶対値もやりましたが、それでもダメでした。 いい方法をご存知のかた、よろしくお願いいたします。

  • 1分ごとの数値のマクロ

    エクセルのVBAで、楽天RSSから1分ごとに株価が入るようにするマクロを作りたいのですが、初心者なので手が出ません。 作成したいものは以下のようなものです。 1分ごとに、1001行のA列に時間が入り、1001行のB列からIV列に、1行上の1000行の数値(この数値はあらかじめ入っていて変化します)が入るようにします。 新しい株価が1001行に入るようにして、時間が前の株価は1分ごとに1行ずつ下に下がっていくことになります。 10時に最初の株価が入ったのが例1でして、1分経ちますと例2のように1行繰り下がり、もう1分経ちますと例3のようにまた1行繰り下がります。 どうぞよろしくお願いします。 例1        A         B        C ・・・・ 1000            100       50 1001  10:00:00     100      50 1002    1003 例2        A         B        C ・・・・ 1000             105      45 1001  10:01:00     105      45 1002  10:00:00     100      50 1003 例3        A         B        C ・・・・ 1000             110      40 1001  10:02:00     110      40 1002  10:01:00     105      45 1003  10:00:00     100      50

  • エクセルの立ち上げ時とマクロ実行時の再計算について

    なぜ同じ形式のファイルで同じようなことをマクロで実行させているだけなのに 一つだけ立ち上げ時と再計算時に時間がかかるか教えてください。 各フォルダ(東京・神奈川・千葉・埼玉)にアクセスからエクスポートしたExcelファイル(A・B・C・D)と、それを集計する合計.xlsがあります。 合計.xlsのマクロボタンを押下することによって A・B・C・Dが立ち上がり、それぞれが合計.xlsのsheet2~5に貼りつき、A・B・C・Dを閉じます。 合計.xlsのSheet1にはマクロボタンとSheet2~5を集計するための表があり、Sheet2~5からvlookupで数値を引っ張ってきています。 ●各フォルダに入ってるファイルは同じ形です。 ●フォルダ(東京・神奈川・千葉)は立ち上げもマクロ実行時も数秒で計算が完了します。 フォルダ(埼玉)だけは立ち上げ時に3分以上かかり、どこかクリックする度に再計算(これも3分以上)されてしまいます。 3分位待ってればいいのですが、なぜ(埼玉)の合計.xlsだけがそうなってしまうのか、わかる方がいらっしゃれば教えてください。 マクロ作成時、確認をしたときは他と同じでした。 今日他の人が合計.xlsを何度か強制終了したとのことですが、これが原因になったりしますか? ちなみに他フォルダ(東京)からファイルをコピーしマクロ&関数を修正してみましたがダメでした。 フォルダ(埼玉)に問題があったりするのでしょうか?

  • エクセル 同じ内容行削除マクロ

    シート1、シート2のB列を比較して同じ内容の行を削除したいと思います。(シート1な内容は300行程度です。) シート2  A列  B列     栃木県3     茨城県2     福島県5 シート1  A列  B列   C列  D列  11  埼玉県1  あ  い  12  栃木県3  か  き  13  群馬県1  た  ち  14  福島県5  さ  し  15  茨城県2  な  に     上記のような例があったとします。出来上がりはシートを変えずシート1で構いません。 シート1  A列  B列   C列  D列  11  埼玉県1  あ  い  13  群馬県1  た  ち となるようなマクロをご教授お願い致します。

  • 【エクセル】2列間で、同じ組み合わせのものを抽出したい。

    A列には地名、B列にはお店が書いてあるような表で A列とB列の組み合わせが他の行でもあった場合それを表示しないよう にさせたいんです。 たとえば以下な表を、(A,B列は元から記入されています) │A   │B     │C│D│││││ 1│東京  │ラーメン屋│ │││││ 2│東京  │花屋    │ │││││ 3│神奈川│花屋    │ │││││ 4│東京  │ラーメン屋│ │││││ 5│神奈川│自転車屋 │ │││││ 6│埼玉  │ラーメン屋│ │││││ 7│神奈川│花屋     │ │││││ を・・ │A   │B      │C  │D │E│ 1│東京  │ラーメン屋│東京 │ラーメン屋│2│ 2│東京  │花屋    │東京 │花屋 │2│ 3│神奈川│花屋    │神奈川│花屋 │1│ 4│東京  │ラーメン屋│神奈川│自転車屋 │2│ 5│神奈川│自転車屋 │埼玉 │ラーメン屋│1│ 6│埼玉  │ラーメン屋│    │ │ │ 7│神奈川│自転車屋 │     │ │ │ というように、C列、D列、E列に、A,B列の元データで共に重複している 部分を表示させないようにするには、どうしたらよいでしょうか? ちなみに、マクロはなるべく使わず、関数で教えてもらえると有難いです。 よろしくお願いします。

  • エクセルマクロでVLOOKUPのよう列を貼る

    初めましてよろしくお願いします。 シート2に       A     B     ・・・・・・・・・   Z 1   900     5               5 ・   903     40              60 ・    ・       ・               ・ 300 220     1     ・・・        100 301 210     10    ・・・        1000   302 200     15    ・・・         20 ・ ・ ・ が有ります。シート1のE10に210と入力されている場合、マクロを実行するとA列を検索し、シート2のA301の値と一致する301行をシート1のE11から列に変換しコピーされるようにしたいと思います。 シート1結果    A     B     C     D     E 1 2 ・ ・ 10                        210 11                         10 ・                           ・ ・                           ・ 35                        1000  解る方、よろしくお願いします。

専門家に質問してみよう