• 締切済み

セルデータをマクロ機能でSheet2に自動記録する方法を教えてください。

質問(1) エクセル Sheet1のリアルタイムで変化している J8,K8,L8,各セルデータをマクロ機能でSheet2に自動記録する方法を教えてください。 記録方法&仕様 (1)Am9:00から記録開始しAm11:00で記録終了 (2)Pm12:30から記録開始しPm15:10で記録終了 (3)Pm16:30から記録開始しPm20:00で記録終了 Sheet2に記録 セル(J8)の値を10分間隔で (J8の開始値)、(J8の最大値)、(J8の最小値)、(J8の終値) に振分けて記録する。 セル(K8) の値を10分ごとに記録 セル(L8) の値を10分間隔で 開始値と終値を記録する 記録順序は添付図のようにお願いします。 参考→・(年月日と時間)・(J8開始値) (J8最大値) (J8最小値) (J8終値)・(K8重量)・(L8開始値) (L8終値)・ 質問(2) Sheet1のセル(M8)のデータは開始直後からリアルタイムでその数値が変化してます。 セル(M8)データとセル(G8)データを比較して、その数値に変化があった場合、セル(G8)の値をセル(M8)の値で書き換える、更新する。 ※セル(G8)の自動更新のみで、記録はしない、無し。 よろしくお願い致します。

この投稿のマルチメディアは削除されているためご覧いただけません。

みんなの回答

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

やりたいことを文章にして、回答者にコードを書いてくれ、という丸投げ質問ではないか。これを許せば質問者は回答者を無料下請け的に 使えて便利だか、回答者側からするとやってられない。 この辺になるとVBAの解説書にも半分の本位は、載ってない上級分野だ。 Googleででも「vba 時間間隔 実行」で照会し(相当数出てくる)、記事を読んで勉強すべきだ。 ーー http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv214.html を参考に Sub 一定間隔で実行するマクロ() 終了時刻 = TimeValue("9:55:00") If TimeValue(Now) >= 終了時刻 Then '終了時刻になったら終わる MsgBox "終了時刻になりました。" Exit Sub End If Call 必要な作業を行うマクロ 反復時刻 = TimeValue(Now) + TimeValue("00:00:05") Application.OnTime 反復時刻, "一定間隔で実行するマクロ" End Sub Sub 必要な作業を行うマクロ() Static i i = i + 1 Cells(i, "A") = Time End Sub ーー 今回はテストのためなので、終了時刻 = TimeValue("9:55:00")を、実行時の2-3分先に設定すること。 反復時刻 = TimeValue(Now) + TimeValue("00:00:05") 5秒おきを設定した例。長いとまどろっこしいため。 シートのA列の変化を見ていてください。 ーー 上記には精度などの面で限界があると言われている。上記では、質問者の課題に合わないときは、別の仕組みを勉強のこと。

kj74hvjasi
質問者

補足

imogasiさん ご指摘、参考文面ありがとうございます。 VBAは初心者で勉強を始めたばかりです。 言われてみれば、まるなげ、に見られて当然の質問でした。 こういうことが出来ればいいなーと、 自分のやりたいことを早く実現させたいとの思いから質問をしてしまいました。 すみませんでした。 ネットで検索してVBAを勉強しようとやっているのですが、参考になるのが見つけられなくて・・・・ >Googleででも「vba 時間間隔 実行」で照会し(相当数出てくる)、>記事を読んで勉強すべきだ。 >http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv214.html​ >を参考に 上記は教えていただきありがとうございます。 前回の質問で教えてもらった下記記述aaaaaの最大値と最小値を自分なりに組み込もうとして 半月も奮闘しているのですが、エラーばっかりで、なかなか答えが出せず、 前に進めない状態で苦しんでいます。 また、下記記述bbbbbのマクロはG7の自動記録は出来るので満足していますが、 さらに追加でセル(J8)、セル(K8)、セル(L8)も記録させようと自分でやっているのですが、 これもまた前に進まない状態です。 素人なのに、いきなり高等なVBAを使いこなそうとしていることは、 はなはだ暴走している感に思われますが、自分としては、即、実践の方が早く 身につくと思っています。 今回の質問のことをどうしても完成させたいのです。 すみませんが、教えていただけないでしょうか。 よろしくお願いします。 ************ aaaaa ************** 最大値 C4 =MAX(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) 最小値 D4 =MIN(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) と ************ bbbbb ************** G7の自動記録 OnTime メソッドを使用します。 '-------------------------------------- '別の標準モジュールにおいてください。 '実行は、フォームボタンを付けるとよいです。 Dim myTime As Date Dim flg As Boolean Sub Ontime_Set()  'トグルになっている  If flg = False Then   flg = True   myTime = Now + TimeSerial(0, 0, 10)  ElseIf flg = True Then   flg = False  Else   Exit Sub  End If  If Range("A1").Value = "" Then    Range("A1").Value = Format(Now, "hh:mm:ss") '時間記録(スタート)    Range("A1").Offset(, 1).Value = Range("G7").Value 'G7 の値  End If Application.OnTime EarliestTime:=myTime, _   Procedure:="my_Procedure", Schedule:=flg  If flg = False Then   myTime = 0  End If End Sub Sub my_Procedure()   With Range("A65536").End(xlUp).Offset(1)     .Value = Format(Now, "hh:mm:ss") '時間記録     .Offset(, 1).Value = Range("G7").Value 'G7 の値     flg = False     myTime = 0   End With   Call Ontime_Set End Sub Sub Ontime_Reset() 'タイマーリセット On Error Resume Next Application.OnTime EarliestTime:=myTime, _   Procedure:="my_Procedure", Schedule:=False If Err.Number > 0 Then  MsgBox "OnTime設定はされていません。", 64  Err.Clear  flg = False Else  MsgBox myTime & "の設定は解除されました。", 64  flg = False  myTime = Empty End If End Sub

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

このままだと「丸投げ」に見えるので… 質問(1) 「リアルタイムで変化」ということになっていますが、記録は10分間隔のようなので、その間に何回値が変わろうとも無視しても良いということであるなら、10分毎に実行されるマクロを組めば足りるでしょう。 OnTime メソッドなどで、定期的に実行すればよいでしょう。 記録すべき時間帯か、そうでない時間帯かをそのなかで判別して実行仕分ければよいです。 最大、最小を取る場合(前回の続きという概念があるのか不明ですが)、最初に記録をクリアしておくとか、あるいは、初回の記入時は最大、最小値ともその時の値を入れておくなど、要求している内容によって、若干初期処理の内容が変わってくるでしょうから、ご注意。 質問(2) 質問を読むと、結局のところ、常にG8⇐M8ということのように読めます。 わざわざマクロで行わなくても良いのでは? マクロでやるなら、セルデータの値の変わり方が不明ですが、その発生の仕方によって、ワークシートのChangeイベントやCalculateイベントを取得して処理する方法をとればよいでしょう。

kj74hvjasi
質問者

補足

fujillinさん >このままだと「丸投げ」に見えるので… すみません! 自分なりに二週間も毎日8時間ほど没頭してトライしてみたのですが まったく解決の糸口がつかめず、ああいう形で質問をしてしまいました。 マクロを始めて二ヶ月目の素人です。 誤解を与えてしまうような質問で申し訳ありません。 マクロはまったくの初心者なのでワークシートのChangeイベントやCalculateイベントの使い方の見本は無いでしょうか? セルM8のデータは1から800000まで増えていきます。 M8のデータが増えるたびごとにG8のデータをM8のデータで 書き換えたいのですがIFでG8を参照しているため ループになりうまくいきません。 やり方が間違えていると思います。 マクロを使わなくても出来るのであれば、そのやり方を教えてください。 出来たらマクロの勉強中なので、マクロで出来る方法もありましたら教えてください。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう