VBAでウェイトの値を変数化する時の型は?

このQ&Aのポイント
  • Excel VBAで制御のプログラムを書いています。ウェイトに関して質問なのですが、今、たとえば0.12秒のウェイトを入れる場合、Application.Wait [Now() + "0:00:00.12"] という形で、1/100秒単位の待ちを入れています。(正確かどうかは置いておいて…) "0:00:00.12"の部分を変数、例えば"wait_time"にして、 たとえば、wait_time = ThisWorkbook.Sheets("Sheets1").Range("A1").Value みたいな感じで、セルに記述された時間を待つようにしたいのですが、 "0:00:00.12"はそもそも何型なのでしょうか? 文字列でもないようで、上記の方法ではうまく行きません。また、セルの書式も何型にすればよいのでしょう。
  • "0:00:00.12"の部分を変数化してセルに記述された時間を待つようにしたい場合、どのような型を使用すればよいか疑問です。この問題を解決するためには、変数の型を正確に認識する必要があります。
  • ウェイトの値を変数化する際に使用する型について質問があります。具体的には、"0:00:00.12"の部分を変数として扱いたい場合、どの型を使用すればよいのか知りたいです。また、セルに記述された時間を待つためにはどのセルの書式を設定すればよいのかも教えてください。
回答を見る
  • ベストアンサー

VBAでウェイトの値を変数化する時の型は?

Excel VBAで制御のプログラムを書いています。 ウェイトに関して質問なのですが、 今、たとえば0.12秒のウェイトを入れる場合 Application.Wait [Now() + "0:00:00.12"] という形で、1/100秒単位の待ちを入れています。(正確かどうかは置いておいて…) "0:00:00.12"の部分を変数、例えば"wait_time"にして、 たとえば、 wait_time = ThisWorkbook.Sheets("Sheets1").Range("A1").Value みたいな感じで、セルに記述された時間を待つようにしたいのですが、 "0:00:00.12"はそもそも何型なのでしょうか? 文字列でもないようで、上記の方法ではうまく行きません。 また、セルの書式も何型にすればよいのでしょう。 ご指南いただきたく思います。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8011/17119)
回答No.2

"0:00:00.12" は文字列型ですよ。でも [Now() + "0:00:00.12"] はVariant型だよね。 結局やりたいことは Application.Wait [Now() + Sheets1!A1] とするか、 wait_time = ThisWorkbook.Sheets("Sheets1").Range("A1").Value Application.Wait Now() + wait_time とする。 > セルの書式も何型にすればよいのでしょう。 適当でいいんじゃないの。

hmhm39
質問者

お礼

Application.Wait [Now() + Sheets1!A1] で上手く行きました!!ありがとうございます。

その他の回答 (1)

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

型については省略します。 セルにはそのまま時刻形式で入力します 0:00:00.12 Application.Wait Now() + Range("A1").Value 上記がいいですが、どうしてもというなら テキスト形式だとエラーになりますので  "0:00:00.12"ではなく '0:00:00.12 で入力しテキストとして扱います。 Application.Wait Now() + TimeValue(Range("A1").Value) なおApplication.Waitも含め単発での秒未満の動作はできませんし、時間に関してWindows自身の制約があります。timer関数を使っても0.016秒以上、またはときどきそれよりもずっと長いインターバルになります。

hmhm39
質問者

補足

Application.Wait Now() + TimeValue(Range("A1").Value) では、「型が一致しません」と起こられました。 うーん。 ちなみにApplication.Waitで1秒未満測れています。

関連するQ&A

  • Excel-VBA rangeプロパティの使い方について

    Excel-VBA rangeプロパティの使い方について VBA初心者です。いろいろ調べたのですが、分からないので教えてください。 ThisWorkbookのSheet1のA1セルに、aというファイルのaというシートの特定のセルの値をコピーしたいです。 コピーする値のセルは、ThisWorkbookで入力した値を基に変数で記述したいです。 例えば、ThisWorkbookのSheet1のC2セルに「D1」と記載していたとして、その値を変数として設定して、最終的にaというファイルのaというシートの「D1」セルをThisWorkbookのA1セルに貼り付けるのが目的です。 この場合の、下記のhensuu = の設定方法について、ご教授願います。 hensuu = ThisWorkbook.Sheets("Sheet1").Range(“A1”)= Workbooks(a).Sheets(a).Range(hensuu)

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • VBAのTextBox表示について質問します。

    実は、MicrosoftのExcel内にありますVBAを使ってシート内に記載られている内容を Userform内にあるTextBoxに表示させたいと考えています。 UserformにあるTextBoxは、シートのセルに対してTextBoxを1個配置させています。 例えば・・・セルA1に入力されている文字をTextBox1に表示 セルB1に入力されている文字をTextBox2に表示 セルC1に入力されている文字をTextBox3に表示 セルD1に入力されている文字をTextBox4に表示 セルE1に入力されている文字をTextBox5に表示と言う様な感じで表示したいです。 セル表示範囲は、A1~E24までのセルでTextBoxもTextBox24まで存在します。 TextBox1.Text = ThisWorkbook.Sheets("Sheet1").Range("A1") TextBox2.Text = ThisWorkbook.Sheets("Sheet1").Range("B1") TextBox3.Text = ThisWorkbook.Sheets("Sheet1").Range("C1") TextBox4.Text = ThisWorkbook.Sheets("Sheet1").Range("D1") TextBox5.Text = ThisWorkbook.Sheets("Sheet1").Range("E1") TextBox6.Text = ThisWorkbook.Sheets("Sheet1").Range("A2") TextBox7.Text = ThisWorkbook.Sheets("Sheet1").Range("B2") TextBox8.Text = ThisWorkbook.Sheets("Sheet1").Range("C2") TextBox9.Text = ThisWorkbook.Sheets("Sheet1").Range("D2") TextBox10.Text = ThisWorkbook.Sheets("Sheet1").Range("E2") 以降~途中省略 TextBox120.Text = ThisWorkbook.Sheets("Sheet1").Range("E24") と言う様な・・・ 上記の、この様なコードでして行くと事は可能なんですが・・・ もっと短く出来ないでしょうか?

  • エクセルVBA

    VBAの素人です。 以下のようなVBAを実行しようと、何とか形にしました。 単独のBOOKではうまくいくのですが、同時に他のBOOKを開くと 「インデックスが有効範囲にありません」とエラーになります。 エラー箇所は、With Sheets("Sheet1").Range("B1")部分です。 修正をご教示頂ける方、何卒よろしくお願い致します。 全くVBA無知なのにすみません。 Private Sub Workbook_Open() test01 test02 Application.OnTime Now + TimeValue("00:10:00"), "終了" End Sub Sub 終了() Application.OnTime Now + TimeValue("0:00:02"), "test01", , False ThisWorkbook.Close Savechanges:=False Application.Quit End Sub Sub test01() With Sheets("Sheet1").Range("B1") .Value = Time .NumberFormatLocal = "mm:ss" End With Application.OnTime Now + TimeValue("0:00:02"), "test01" End Sub Sub test02() With Sheets("Sheet1").Range("B2") .Value = Time .NumberFormatLocal = "mm:ss" End With End Sub

  • エクセルVBAで選択していないシートのセルコピー

    エクセルVBAで質問させてください。 現在選択していないシートから、セルの書式ごとコピーして貼り付けたいのです。 たとえば Sheets(1).Range(Cells(1, 1), Cells(4, 1)).Copy Sheets(2).Range("A1") 等とすると、Sheets(2)が選択されている状態だとエラーになってしまいます。 おそらく、Copyメソッドというのは、選択されているシートにのみ有効だからなのではないか、と思いますが、セルの値だけでなくフォントその他の書式を、別のシート(現在アクティブでない)から持ってくる方法はありますか?

  • オブジェクト変数または With ブロック変数が設定されていません。

    下記の様に組みましたが、下記の★印の所で止まる様な事があります。 毎回止まるわけではないのですが、止まる時に「オブジェクト変数または With ブロック変数が設定されていません。」と表示されますが、 原因は何か?どの様にすればいいのか?など詳しく教えてください。 よろしくお願いします。 Sub test() Dim objIE As Object Dim strCOMMENT As String Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'データをセットする 'htmlドキュメント フォーム(0番目) アイテムに転記(代入)する objIE.Document.forms(0).Item("username").Value = "11111" objIE.Document.forms(0).Item("password").Value = "11111" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.subm.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'タイトル・コメントの読み込み strtitle = Sheets("sheet1").Range("k7") strCOMMENT = Sheets("sheet1").Range("k9") Application.WindowState = xlMinimized While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.forms(0).Item("title").Value = strtitle objIE.Document.forms(0).Item("comment").Value = strCOMMENT While objIE.readystate <> 4 While objIE.busy = True DoEvents ' Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.submit.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'フォーム(0番目)を .Submit(確認) する objIE.Document.forms(0).getElementsByTagName("input")(11).Click '←★この部分で止まる時があります。 While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 7, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Quit '.Quitで閉じる End Sub

  • <excel:VBA>変数を使って簡略化したい

    google検索してなんとか自力で作ったVBAを下記に貼りました。 きちんと動作はするのですが、せっかくなので変数を使って簡素化し、 データが多くても動作が速くなるようにしたいのです。 いろいろ試しましたが、変数の使い方の知識が乏しく、うまくいきませんでした。 変数としたいのは■マークの2箇所になると思います。 詳しい方、力を貸していただけないでしょうか。 どうぞよろしくお願いいたします。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Sub オートフィルタ貼付作業() With Sheets("データ").Range("A3") Application.ScreenUpdating = False Range("AA3:EK3").AutoFilter .AutoFilter Field:=1, Criteria1:="1" ’■Fieldが1ずつ増えていく Range("AA3").Copy Range("Z3") ’■AA3が1列ずつ右へずれていく .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter Range("AA3:EK3").AutoFilter .AutoFilter Field:=2, Criteria1:="1" Range("AB3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter ~~~~~~~~~~~~ 115列分のデータがあり 下記まで同じようにつづきます ~~~~~~~~~~~~ Range("AA3:EK3").AutoFilter .AutoFilter Field:=115, Criteria1:="1" Range("ek3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter End With Application.ScreenUpdating = True Sheets("貼付").Activate Cells.Columns.AutoFit End Sub ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

  • エクセルVBAで範囲を変数で設定する方法?

    Dim i As Integer For i = 1 to 50 とした場合、 セルであれば Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(i, 2) のように変数を使えますが、範囲に使う場合にはどう書けばいいのでしょうか? 例えば、 Sheets("Sheet2").Range("A1:G1").Value = Sheets("Sheet1").Range("A1:G1") のような式で、行数を変数にする場合です。 よろしくお願いします。

  • EXCEL/VBA 変数の値をクリップボードにコピーする方法

    EXCEL/VBAで、変数Xの値をクリップボードにコピーする方法を教えて貰えませんか。下記のように変数Xを一度セルに代入すると出来ますが、変数Xを直接クリップボードにコピーする方法が分かりません。 宜しく、お願いします。 Range("a1") = X Range("a1").Copy

  • Function 構文のなかに変数をいれたい(VBA)

    お願いします。 エクセルVBAにて 下記のようなFunction構文内に変数を設定する方法を 教えてください。 この中で k以外にも a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27") この変数を扱いたいのですが。 もしかして他にもfunction構文が必要でしょうか。 Function data(k As Double) Dim sum As Double Dim ct As Integer Dim keisu As Integer Dim a As Double Dim b As Double a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27")  以下 略

専門家に質問してみよう