• ベストアンサー

VBAでIf~Thenに条件をもう1つ

 以下のようにExcelのVBAでタイムスタンプを比較するところがあるのですが、比較ファイルがないものがありますその場合もthen以降を実行するには、どうすれば良いのでしょうか? If FileDateTime(Mydoc) > FileDateTime(Mydoc2) Then MsgBox "Mydoc" End If   ここで、Mydoc2が存在しないときも、MsgBox "Mydoc" を実行したいのですが。  ちなみに、Mydoc2のタイムスタンプが新しいときは、飛ばして次の命令文に進みます。  wかりにくい質問ですが、よろしくお願いします。

  • dogs59
  • お礼率77% (279/359)

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

> この場合でも、Mydocが新しい場合も、Mydocに当てはまるファイルがない場合も、Mydocと表示されるわけですね。 そうですね。 エラーになった場合は強行されてしまうので、 if dir(Mydoc) <> "" then ~処理 end if などとすると良いと思います。

dogs59
質問者

お礼

 ありがとうございます。  下のお礼の欄が誤記でした。  Mydoc2がない場合でもですね。  教えていただいたもので、テストしてみます。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>Mydoc2が存在しないときも ファイルの有無はDir関数でチェックできます。 If FileDateTime(Mydoc) > FileDateTime(Mydoc2) or dir(Mydoc2) = "" Then ただし、このままでは FileDateTime(Mydoc2) がエラーになるので、おまじないです。 On Error Resume Next If FileDateTime(Mydoc) > FileDateTime(Mydoc2) or dir(Mydoc2) = "" Then MsgBox "Mydoc" end if

dogs59
質問者

お礼

 早速の回答ありがとうございます。  この場合でも、Mydocが新しい場合も、Mydocに当てはまるファイルがない場合も、Mydocと表示されるわけですね。  今、手元にテストできる環境がないもので。

関連するQ&A

  • エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?

    ワークシート関数で書けば =IF(OR(F18=0,AND(F15>0,F16>0)),TRUE)です。 これをVBAで書こうとして If Sheet1.Range("F18") = 0 Or Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then MsgBox True Else MsgBox False End If とやってみたのですが、正しくないようです。 どのように書けばいいのでしょうか?

  • #If Then ~ #Else ~ #End If(エクセルVBA)

    #If Then ~ #Else ~ #End If って何ですか? また、VBAのヘルプで検索する方法ってどうすればいいのですか? どなたか?宜しくお願い致します。

  • IF文の分岐が正しく動きません

    Access VBAについて教えてください。いまオプショングループの中にテキストボックスがあります。オプショングループをoption1、テキストボックスをtextbox1とします。テキストボックスは空の状態で、ロックをかけているので入力はできません。 実行ボタンを押したときに、テキストボックスの中が空ならMsgboxをだしなさいという文をかきました。 If txtbox1.value = "" Then msgbox "nothing" end if また .value=NULL とも書き換えて実行しましたが、なぜかmsgboxを表示せずにend ifにいってしまいます。何が原因と考えられるでしょうか?

  • 指定した時間より前なら(Time If)

    Sub Macro6() if time < 13:00:00 then MsgBox "1時より前です" End If End Sub これを実行したいのですが 構文エラーとなります。 どうすればいいでしょう? よろしくお願いします。

  • VBA 単純なIF文ですが?

    以下のような文を書いたときに、If文の後の変数を「set_s」にした場合イコールが実行されません。 「set_s」を単純な数字(この場合16)にするとIf文が機能します。 なぜでしょうか。 Do set_s = 16 Cells(1, 1) = Time h = Left(Time, 2) m = Mid(Time, 4, 2) s = Right(Time, 2) If set_s = s Then Cells(8, 2) = "時間です。" Exit Do Else Cells(8, 2) = "まだです。" End If Loop

  • VBAでセル範囲条件の指定

    下記のようなことを行いたいのですが、VBAの記述でうまくいかなくて困っています。 ----------------------- もし、現在選択中のセルがA1からA5の範囲にあるならば→「実行1」を行う もし、A1からA5の範囲内にないなら「実行2」を行う ------------------------ たったのこれだけのことなのですが、「A1からA5の範囲」を指定する方法がよくわかりません。 ------------------------ Sub セル範囲判定() If ActiveCell = Range("A1:A5") Then MsgBox "A1:A5がアクティブです" Else MsgBox "A1:A5がアクティブではありません" End If End Sub ------------------------- などとしてもうまくいきません。 構文が良くわかっていないので困っています。 「アクティブセルが○○なら」という部分を教えていただけると助かります。

  • VBA条件分岐で教えてください。

    以下のプログラムは一つのセルに複数行のデータがあるとき それぞれの行を独立したデータとして取り出すように計画しています。 それぞれのセルは一行のもの、二行のもの、三行のものとバラバラです。 行のデータが無くなったら次のNEXTを実行させたいのですがうまくいきません。 (現在はメッセージボックスを表示させていますが) 以下のプログラムを実行するとデータがある行は表示しますがデータの無い行に行くと「インデックスが有効範囲にありません」とエラーが出ます。 For n = 4 To 6 A1 = Cells(n, 1) '連番 A2 = Cells(n, 2) 'タイム A3 = Cells(n, 3) '日本語 A4 = Cells(n, 4) Dim tmp As Variant tmp = Split((A4), vbLf) MsgBox tmp(0) If tmp(1) <> "" Then MsgBox tmp(1) End If If tmp(2) <> "" Then MsgBox tmp(2) End If A5 = Cells(n, 5) 'オプション 'テキスト出力 Open "G:\Data.txt" For Append As #1 Print #1, A1; Chr(9); A2; Chr(9); A4 ' Chr(9)はTABスペースのことです。 Close #1 Next VBA初心者です。 よろしくお願いします。

  • Excel VBA の if elseについて

     以下は与えられた自然数が素数であるかどうかを判定する、Excel VBA による素朴なコードです。  自然数が2 とそれ以上の場合で処理を分けていますが、5 行目のelseで   対応するifがないという というコンパイルエラーが出ます。私はプログラミング言語は、Pascal しか経験がなく、Pascal の場合 5 行目の else から後の処理したい複数の構文を begin end で囲めば問題なく動きます。  Excel VBA で同じ処理をさせるにはどうしたらいいのでしょうか?  Worksheets("素数").Activate  '"素数"シートをアクティブにする  Flg = 0  Target = Range("D5").Value  if Target = 2 then MsgBox ("2 は素数です。")  else  'else 対応するifがないというエラーが出る  'begin ・・・・・ Pascalの場合    K = Int(Target / 2)    ' 2 以外の素数は奇数なので偶数で割ることを確認する必要はない。    For I = 3 To K Step 2     If Target Mod I = 0 Then      Flg = 1      Exit For     End If    Next I       Snum = Format(Target)    If Flg = 0 Then     MsgBox (Snum + " は素数です。")    Else     MsgBox (Snum + " は素数ではありません。")    End If  'end ・・・・・ Pascalの場合  End If

  • アクセスVBA If式

    早速ですが、質問させて頂きます。 ACCESS VBAで、各ボックスに入力された数字に対し、論理式が立てられており、全項目ボックスに入力をし『チェック』ボタンを押すと基準を超えるものに『再チェックが必要な項目があります』というメッセージを出した上に、それを赤で反転させる、というのを作成中です。 簡単な図で表すと []はボックスだと思ってください 高さ[   ]   横[    ]   縦[    ] 体積[   ]      [チェック]←ボタン 高さが20を超えた場合、要再チェック 横が10以下の場合、要再チェック 縦が5未満又は15を超える場合、要再チェック 体積 高さ*横*縦 が3000以下の場合、要再チェック Private Sub コマンド1_Click() ← チェックボタンをクリック '要チェックか調べます 要チェック = Y If 高さ >= 20 Then Y = Y + 1 End If   If 横 <= 10 Then Y = Y + 1 End If   If 縦 < 5 Then Y = Y + 1 End If If 縦 >= 15 Then Y = Y + 1 End If ~中略 If Y >= 1 Then Msg = MsgBox("要再チェック項目があります。 ", vbOKOnly + vbExclamation, "確認してください") End If If Y = 0 Then Msg = MsgBox("再チェックは必要ありません。 ", vbOKOnly + vbInformation, "確認してください") End If 体積に関しては、式マクロを組んでいます。 以上です。赤に反転させる方法は分かりませんでした・・・。 このように1つずつIf式でやるのは、あまり綺麗じゃないと思いますし、たったこれだけの簡単な式でも、うまく機能してくれません(涙) どうかお助けいただけませんでしょうか。よろしくお願いしたします。

  • VBAのIF分で時間指定の条件式の書き方

    VBAのIF分で時間指定の条件式の書き方を教えてください。 9:00~14:00で実行する下記のマクロはうまく機能しています。 If Time >= TimeValue("9:00:00") And Time <= TimeValue("14:00:00") Then 下記をご教授願います。 16:00~翌日の4:00までの、日をまたがっての12時間後の条件式の書き方を教えてください。 よろしくお願いします。

専門家に質問してみよう