Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


321 / 13645 ツリー ←次へ | 前へ→

【80996】VBAによる電圧自動測定 ムズロウ 19/7/5(金) 0:18 質問[未読]
【81000】Re:VBAによる電圧自動測定 よろずや 19/7/5(金) 21:18 発言[未読]
【81001】Re:VBAによる電圧自動測定 ムズロウ 19/7/6(土) 12:57 お礼[未読]
【81010】Re:VBAによる電圧自動測定 ムズロウ 19/7/8(月) 19:32 質問[未読]
【81011】Re:VBAによる電圧自動測定 よろずや 19/7/8(月) 19:58 回答[未読]
【81013】Re:VBAによる電圧自動測定 ムズロウ 19/7/8(月) 22:21 お礼[未読]
【81021】Re:VBAによる電圧自動測定 ムズロウ 19/7/10(水) 14:37 質問[未読]
【81022】Re:VBAによる電圧自動測定 ムズロウ 19/7/10(水) 17:02 質問[未読]
【81023】Re:VBAによる電圧自動測定 よろずや 19/7/10(水) 19:42 発言[未読]
【81025】Re:VBAによる電圧自動測定 ムズロウ 19/7/12(金) 16:49 回答[未読]

【80996】VBAによる電圧自動測定
質問  ムズロウ E-MAIL  - 19/7/5(金) 0:18 -

引用なし
パスワード
   Agilent Technologies社の6 1/2 Degit Multimeter2台による電圧自動測定で、エラー9が出てしまい困っています。
コードの概略としましては1測定温度に対し、2出力の電圧を500回測定し、その平均を出しSheet1に記述していくというものです。

以下コード

Private Sub let_mesurement_Click()
  Dim i As Integer
  Dim j As Integer
  Dim DATA As Variant
  Dim TOTAL As Single
  Dim AVERAGE As Single
  Dim temp As Integer
  Dim count As Integer
  
  count = Sheet1.Cells(5, 11)
  
  temp = InputBox("測定温度は何℃ですか?", "温度確認")
  
  Dim new_Worksheets As Variant
  Set new_Worksheets = Worksheets.Add()
  new_Worksheets.Name = Str(temp) & "℃"
  
  Worksheets(new_Worksheets.Name).Cells(1, 1) = temp & "℃"
  Worksheets(new_Worksheets.Name).Cells(2, 3) = "平均出力電圧[V]"
  Worksheets(new_Worksheets.Name).Cells(1, 4) = "電圧1"
  Worksheets(new_Worksheets.Name).Cells(1, 5) = "電圧2"

  Dim RM As New VisaComLib.ResourceManager
  Dim DMM As New VisaComLib.FormattedIO488
    
  For i = 23 To 24
  
    Set DMM.IO = RM.Open("GPIB0::" & i & "::INSTR") '入力されたVISAアド                        レスにてセッションオープン
  
    DMM.IO.Timeout = 120000   'タイムアウト時間120秒に設定
    TOTAL = 0
    AVERAGE = 0
  
    With DMM
      .WriteString "*RST;*CLS" 'リセット、クリア
      .WriteString "CONF:VOLT:DC AUTO" ', 1E-5"  'DCV測定
      .WriteString "SENS:VOLT:DC:NPLC 0.5"  '積分時間を0.5PPLに設定
      .WriteString "TRIG:COUN 500"  'トリガカウント500回 34401Aの                       内部メモリの限界512回
      .WriteString "INIT"   '測定開始
      .WriteString "*OPC?"  '動作完了確認(ここでは測定の完了を確                       認)
      .ReadString        '測定が完了すると1 が返る
      .WriteString "FETC?"
      
      DATA = .ReadList(ASCIIType_R4, ",")
  
      For j = 0 To 499
       Worksheets(new_Worksheets.Name).Cells(j + 4, i - 19) = DATA(j)
        TOTAL = TOTAL + DATA(j)
      Next j
  
      .IO.Close
  
  End With
  
  Set DMM = Nothing
  Set RM = Nothing
  
  AVERAGE = TOTAL / 500
    
  Worksheets(new_Worksheets.Name).Cells(2, i - 19) = AVERAGE
  
  Next i
  
  Sheet1.Cells(count + 2, 1) = temp
  
  Sheet1.Cells(count + 2, 2) = Worksheets(new_Worksheets.Name).Cells(2, 4)
  Sheet1.Cells(count + 2, 3) = Worksheets(new_Worksheets.Name).Cells(2, 5)
  
  Sheet1.Cells(5, 11) = count + 1
  
  Set new_Worksheets = Nothing
  
  MsgBox "測定完了!"
  
End Sub

コード以上

変数iはGPIBのアドレスです
Worksheets(new_Worksheets.Name).Cells(j + 4, i - 19) = DATA(j)
の部分でエラーが出るようですが、うまく機能するときもあり原因が分かりません
当方VBAの知識はあまりなくコード自体も元あったものを少し書き換えた形になります。自分の勉強不足ではありますが、こちらに質問したほうが早いかと思い投稿させていただいた次第です。
自分でも調べてみますがどうぞよろしくお願いします。

【81000】Re:VBAによる電圧自動測定
発言  よろずや  - 19/7/5(金) 21:18 -

引用なし
パスワード
   500回と指定したら必ず500個のデータが返ることは、保証されているのでしょうか?

Worksheets(new_Worksheets.Name).Cells(j + 4, i - 19) = DATA(j)

エラーで止まった時の j の値を確認しましょう。

【81001】Re:VBAによる電圧自動測定
お礼  ムズロウ  - 19/7/6(土) 12:57 -

引用なし
パスワード
   返信ありがとうございます
確認してみます

【81010】Re:VBAによる電圧自動測定
質問  ムズロウ  - 19/7/8(月) 19:32 -

引用なし
パスワード
   ▼ムズロウ さん:
>返信ありがとうございます
>確認してみます

エラーになる時のjの値ですが様々な値をとり、特にエラーにどう影響してるのか分かりません、2,17の時にエラーが出たことは確認しました
それよりもDATA(j)がインデックスが有効範囲にないという表示があり気になりました

【81011】Re:VBAによる電圧自動測定
回答  よろずや  - 19/7/8(月) 19:58 -

引用なし
パスワード
   For j = 0 To UBound(DATA)
  new_Worksheets.Cells(j + 4, i - 19) = DATA(j)
  TOTAL = TOTAL + DATA(j)
  COUNT = COUNT + 1
Next j
   :
<途中省略>
   :
AVERAGE = TOTAL / COUNT

ってことかな?

【81013】Re:VBAによる電圧自動測定
お礼  ムズロウ E-MAIL  - 19/7/8(月) 22:21 -

引用なし
パスワード
   返信ありがとうございます

UBoundで上限を指定しているのですね
明日試してみます

【81021】Re:VBAによる電圧自動測定
質問  ムズロウ  - 19/7/10(水) 14:37 -

引用なし
パスワード
   よろずやさんの方法で試してみたのですがエラーは出なくなったのですが
500回ちゃんと測らなくなるようです

【81022】Re:VBAによる電圧自動測定
質問  ムズロウ  - 19/7/10(水) 17:02 -

引用なし
パスワード
   ▼ムズロウ さん:
>よろずやさんの方法で試してみたのですがエラーは出なくなったのですが
>500回ちゃんと測らなくなるようです

追記でi = 23のときのUBound(DATA)の値は1でi = 24のときのUBound(DATA)の値は11でした
DATAを参照しても500カウントはされないようです

【81023】Re:VBAによる電圧自動測定
発言  よろずや  - 19/7/10(水) 19:42 -

引用なし
パスワード
   ▼ムズロウ さん:
>▼ムズロウ さん:
>>よろずやさんの方法で試してみたのですがエラーは出なくなったのですが
>>500回ちゃんと測らなくなるようです
>
>追記でi = 23のときのUBound(DATA)の値は1でi = 24のときのUBound(DATA)の値は11でした
>DATAを参照しても500カウントはされないようです

いや、500回ちゃんと測られていないからエラーになるんであって
UBound(DATA)を使ったせいではありません。

500回ちゃんと測られる保証はないということ。

【81025】Re:VBAによる電圧自動測定
回答  ムズロウ  - 19/7/12(金) 16:49 -

引用なし
パスワード
   ▼よろずや さん:
>▼ムズロウ さん:
>>▼ムズロウ さん:
>>>よろずやさんの方法で試してみたのですがエラーは出なくなったのですが
>>>500回ちゃんと測らなくなるようです
>>
>>追記でi = 23のときのUBound(DATA)の値は1でi = 24のときのUBound(DATA)の値は11でした
>>DATAを参照しても500カウントはされないようです
>
>いや、500回ちゃんと測られていないからエラーになるんであって
>UBound(DATA)を使ったせいではありません。


USB/GPIBのケーブルを新しいものに変えたら前のコードでうまく動きました、、
回答ありがとうございました
とても勉強になりました
500回測定に関しては
.WriteString “TRIG:COUN 500” で行い、
.WriteString “FETC?” でPCにデータを返しているようです
>
>500回ちゃんと測られる保証はないということ。

321 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free