忙しい現代人の腰&肩のお悩み対策!

RS232Cで通信して、受信データをリアルタイムでグラフ表示するプログラムを作成しました。

受信した順番に1,2,3…と番号を振っていき、その数字をそのままX軸にしているのですが、
X軸を時間軸にしたく行き詰っております。

◆失敗策◆
データ受信と同時にNOW()で現在時刻を取得。
1つ目のデータ取得時刻を基準とし、各データ取得時刻との差を求めX軸とする。

上記の方法だと、NOW()で得られる時刻は1秒単位のためうまくいきませんでした。
少なくても1/100秒単位の時間を取得が必要です。


質問内容がうまく説明できたか不安ですが、もし説明不足でしたら補足させて頂きますので、どうかアドバイスを宜しくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
おかげさまで無事に解決できました!
himajin100000さま、本当にありがとうございました。

◆メモ◆
timeGetTime関数はそのままでは使えず、
Declare Function timeGetTime Lib "winmm.dll" () As Long
でDLLを呼び出すことで使用可能となりました。

お礼日時:2007/07/20 10:16

#1だ。


経過時間じゃなくて
現在時刻か・・・・
http://members3.jcom.home.ne.jp/daruma_kyo/info/ …
GetLocalTime APIってのがあるもよう
    • good
    • 0
この回答へのお礼

いえ、経過時間でいいんです…。
すいません。

経過時間を知りたかったのですが、経過時間を出すために
1個目のデータ受信当時の現在時刻と
n個目のデータ受信当時の現在時刻を取得して、
その差から経過時間を出そうと思っていたものですから・・・。

誤解を招く表現ですいませんでした。
ありがとうございました。

お礼日時:2007/07/20 10:21

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel コンマ以下の秒を表示したい

いつもお世話になっております。
エクセルでタイマーを作っているのですが、セルの書式設定の時刻だと何秒までしか表示できません。その次のコンマ以下(例 3.56秒)を表示させたいのですが
どうすればいいか教えて下さい。
よろしくお願いします。

Aベストアンサー

こんばんは。

>VBAでのGetTickCount関数等の使い方を具体的にご教授願えませんか?

実際は、以下のようにしても、動きが速くて何も見えません。今まで、同じような質問を受けましたが、せいぜい、1秒~2秒ぐらいの表示です。それに、セルに表示するときのロスが多少ありますので、100分の1のタイム自体をExcelで計るのは無理だと思います。

だから、
 If TimeDiff Mod 1000 = 0 Then  ~ End If
 
などを使って表示を遅らせたりします。以下は、標準数値です。時間表示ではありません。


Private Declare Function GetTickCount Lib "kernel32" () As Long

Sub TimeCountCheck()
Dim StarTime As Long
Dim TimeDiff As Long
Dim TimeLimit As Long

TimeLimit = 10 '10秒 間
TimeLimit = TimeLimit * 1000
 StartTime = GetTickCount
 Do
  DoEvents
  TimeDiff = GetTickCount - StartTime
  Cells(1, 1).Value = TimeDiff / 1000
 Loop While TimeDiff < TimeLimit
End Sub

こんばんは。

>VBAでのGetTickCount関数等の使い方を具体的にご教授願えませんか?

実際は、以下のようにしても、動きが速くて何も見えません。今まで、同じような質問を受けましたが、せいぜい、1秒~2秒ぐらいの表示です。それに、セルに表示するときのロスが多少ありますので、100分の1のタイム自体をExcelで計るのは無理だと思います。

だから、
 If TimeDiff Mod 1000 = 0 Then  ~ End If
 
などを使って表示を遅らせたりします。以下は、標準数値です。時間表示ではありません。


Pri...続きを読む

Q16進数を10進数に変換する方法...

お初にお目にかかります(^^)
簡潔に質問しますm(_ _)m

バージョン:MS-Visual Basic6.0
質問内容:
16進数を10進数に変換する方法がわかりません。
Hex(Text1.Text) や Oct(Text1.Text) のような方法で
16進数・8進数に変換できるんですが…
10進数に変換する方法がわかりません。

P.S できれば、16進数→10進数、16進数や10進数→2進数
…に、変換する方法も、よろしければ教えてくださいませ
m(_ _)m

Aベストアンサー

16進数→10進数は

Dim StrHex As String
Dim intVal As Integer
StrHex = "1A"
intVal = Val("&H" & StrHex)

で出来ます。


申し訳ありませんが2進数への変換はよく分かりません。

QExcelを使って読み取った時間(h:m:s)を(h:m:s:1/100)に表示する方法

電気抵抗をマルチメータで読み取ったデータをExcelに落として実験をしていたのですが、、、
時間データが秒までしか表示しなくて困っています。
設定では0.5秒ずつの時間で書き込んでいるはずなのですが、
17時10分50秒
17時10分51秒
17時10分51秒
17時10分51秒
17時10分52秒
17時10分52秒
17時10分53秒
17時10分53秒
17時10分53秒
という間隔で時間が表示されます。
この時間データ(↑)を標準データー(↓)
0.715856481
0.715868056
0.715868056
0.715868056
0.71587963
0.71587963
0.715891204
0.715891204
0.715891204
0.715902778
に変換に変換して、ここからどの様にして、秒の下の位を表示したらよいか検討が付きません。
ご指導の程よろしくお願いします。
長々説明してスミマセン。

Aベストアンサー

こんにちわ。
No.3のe10goです。

No.3で行数が足りないと回答しましたが誤りでした。
下の左の小数点9位までのデータをExcelで取り込むと、右のように小数点秒も表示できます。

0.875196759 = 21:00:17.00
0.875197917 = 21:00:17.10
0.875208333 = 21:00:18.00
0.916876157 = 22:00:18.10
0.958543981 = 23:00:18.20

申し訳ありませんでした。

なお、上の事からも、取り込み前のデータを工夫する必要がありそうです。

お詫びと言っては何ですが、No.4の補足にある質問に回答します。

>エクセルに測定値のデータが10msぐらいの間隔で入ってくるのですが、それをリアルタイム(測定中にグラフにプロットを打つ)様にしたいのですが、それは可能ですか?

エクセルにデータが追加される度に、グラフの系列要素(プロット点等)を自動で増やす方法があります。
日経パソコン2005/10/10号「Excel緊急対策室、自動追尾グラフを作れ」の記事にあった方法で、名前定義と関数を活用します。
内容をそのまま載せると、著作権の問題があるので、カスタマイズして記載します。

まず、シート「Sheet1」に下の例のデータがあり、A2~B5のデータでグラフができているものとします。

(行),「A列」,「B列」
(1),「時間」,「データ」
(2),「21:00:17.00」,「100」
(3),「21:00:17.10」,「102」
(4),「21:00:17.20」,「104」
(5),「21:00:17.30」,「106」

以下に、方法を説明します。
1.
A2を選択し、名前ボックスに「timetop」と入れて、「Enter」
または、A2を選択し、「挿入」メニュー →「名前」→「定義」→
「名前」欄に「timetop」と記入 →「OK」
2.
B2を選択し、名前ボックスに「datatop」と入れて、「Enter」
または、B2を選択し、「挿入」メニュー →「名前」→「定義」→
「名前」欄に「datatop」と記入 →「OK」
3.
「挿入」メニュー →「名前」→「定義」→「名前」欄に「timerange」と記入 →
「参照範囲」欄に「=OFFSET(timetop,0,0,COUNT(Sheet1!B:B))」と記入 →「追加」→
4.
「名前」欄に「datarange」と記入 →「参照範囲」欄に「=OFFSET(datatop,0,0,COUNT(Sheet1!B:B))」と記入 → 
「追加」→「OK」
5.
グラフを選択して、グラフウィザードボタンをクリック
6.
「次へ」ボタン →「グラフの元データ」の「系列」タブの「値」欄に「Sheet1!datarange」と記入 →
「項目軸ラベルに使用」欄に「Sheet1!timerange」と記入 →「完了」

これで、7行以下にデータが増えるとグラフも追加されるようになります。

こんにちわ。
No.3のe10goです。

No.3で行数が足りないと回答しましたが誤りでした。
下の左の小数点9位までのデータをExcelで取り込むと、右のように小数点秒も表示できます。

0.875196759 = 21:00:17.00
0.875197917 = 21:00:17.10
0.875208333 = 21:00:18.00
0.916876157 = 22:00:18.10
0.958543981 = 23:00:18.20

申し訳ありませんでした。

なお、上の事からも、取り込み前のデータを工夫する必要がありそうです。

お詫びと言っては何ですが、No.4の補足にある質問に回答しま...続きを読む

QEXCELのセルへ、デジタル時計を表示できますか?

excelのセルへリアルタイムの時計を表示することは
できるのでしょうか?
=now()では入力時の時刻が落ちるだけですよね・・・

HPではjavascriptなどで比較的簡単のようですが
エクセルでは難しいのでしょうか??

Aベストアンサー

以下の手順でやってみてください。
ワークシートを開き、

1.AltキーとF11キーをいっしょに押してVisualBasicEditorを呼び出します。
2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
With Sheets("Sheet1").Range("A1")
.Value = Time
.NumberFormatLocal = "h:mm:ss"
End With
Application.OnTime Now + TimeValue("0:00:01"), "test01"
End Sub

3.Alt+F11キーでワークシートへもどります.
4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行します。

これでSheets("Sheet1")のA1に毎秒ごとに時刻が表示されます。

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

QEXCELでミリ秒を計算する方法

ミリ秒単位まで入力された時刻表記のセルがあります。
このセルの値をミリ秒に換算する方法を教えてください。

【セル書式】hh:mm:ss.000 ※hhは00固定
【例】
値は、「00:01:02.123」
これを、1*60000+2*1000+123=62123(ミリ秒)
というように算出したいのです。
計算式は、「mm*60000+ss*10000+000(ミリ秒部分)」です。

VBAはやったことがないので、出来れば、関数等で出来る
方法をお願いします。

Aベストアンサー

A1が時間のセルとして
=A1*24*60*60*1000

Qエクセル マクロ実行時エラー’1004’

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
    ReDim Preserve 氏名(行)
    社員CD(行) = Cells(行 + 1, 1).Value
    氏名(行) = Cells(行 + 1, 2).Value
    行 = 行 + 1
  Loop Until Cells(行, 1) = ""
  人数 = 行 - 2
  For 回数 = 1 To 人数
    Sheets(評価シート).Select
    Sheets(評価シート).Copy after:=Sheets(評価シート)
    ActiveSheet.Name = 氏名(回数)
    Cells(4, 5) = 氏名(回数)
    Cells(4, 3) = 社員CD(回数)
  Next 回数
End Sub
*****************************
よろしくお願いします

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
   ...続きを読む

Aベストアンサー

ひょっとしてこれに該当するのかな?

Excel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生する
http://support.microsoft.com/kb/210684/ja


人気Q&Aランキング