• ベストアンサー

エクセルxpのVBA

VBA初心者です。下記を実行すると、「elseに対応するifがありません」と出ます。なぜかわからず困っています。 For hiniti = DateSerial(Range("A3"), Range("A4"), 21) To DateAdd("m", 1, DateSerial(Range("A3"), Range("a4"), 20)) ActiveCell.Value = hiniti ActiveCell.Offset(0, 1).Select If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select Else: ActiveCell.Offset(0, 1).Select End If next end sub

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

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select Else: ActiveCell.Offset(0, 1).Select End If の部分を If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select Else ActiveCell.Offset(0, 1).Select End If としてみたらどうでしょうか?

s-eight
質問者

お礼

ありがとうございます。 いけました。 thenのあとに、改行がいるんですね。

その他の回答 (2)

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

ELSE:の後の「:」は、文を1行に2つ以上並べるときの 区切りです。(マルチステートメント) If Then ELSE EndIFはIFからEndIfまでが1文であって その途中(Elseの直後)に別文が来るのは、If文では当然 予想しています。(複合文?) むしろElseの後はまだIF文の途中なのだから、ActiveCell.Offset(0, 1).Select が来るとしても  :は使わないで、改行で文の終わりを示します。 VBでは文の終わりに;など置きませんので、改行が文の終わりですよね。 If XXX Then (文の集まり) Else (文の集まり) End If

s-eight
質問者

お礼

ありがとうございました。

回答No.2

>If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select >Else: ActiveCell.Offset(0, 1).Select >End If この部分は、 If ActiveCell.Column = 7 Then  ActiveCell.Offset(1, -7).Select Else  ActiveCell.Offset(0, 1).Select End If とすべきでしょう。 要は、If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select でif文は終わりと見なされるので、それ以後はelseに対応するif条件が無い、ということになるわけです。

s-eight
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう