• ベストアンサー

EXCEL VBAでセルの値が数値のときに2を掛ける方法について

すいませんEXCEL VBAで教えていただきたいことがあります。 A1:H3000に数値及び文字列が入っている。 この範囲で値が数値のときは当該セルの値に*2の処理を行う (文字列の場合はそのまま) Dim i as Variant For Each i in Range("A1:H3000") IF ~ Next i というような流れでしょうか。 IFの後がテキスト本を見てもよくわかりませんでした。 よろしくお願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

どうしてもIF文で判定したければ Sub test01() Dim i As Range For Each i In Range("A1:H3000") If i.Value <> "" And IsNumeric(i.Value) Then i.Value = i.Value * 2 End If Next i End Sub でも、これじゃ全セルを判定するので非効率では? 最初から範囲内の数値だけを対象にすればIFは不要です。 ただし、ひとつも数値がなければエラーになると思いますが。 Sub test02() Dim i As Range For Each i In Range("A1:H3000").SpecialCells(xlCellTypeConstants, 1) i.Value = i.Value * 2 Next i End Sub 数値がなくともエラーがでないようにするなら Sub test03() Dim i As Range On Error GoTo line For Each i In Range("A1:H3000").SpecialCells(xlCellTypeConstants, 1) On Error GoTo 0 i.Value = i.Value * 2 Next i Exit Sub line: MsgBox "指定範囲内に数値がありません。" End Sub

takohasisa
質問者

お礼

出来ました!!ありがとうございます! 特にIFでやりたいわけではなく、IFしか思い浮かばなかっただけですので、下の式を使わせていただきました。 For Each i In Range("A1:H3000").SpecialCells(xlCellTypeConstants, 1) のやり方は知らなかったのでとても勉強になりました。 数値が入ってないことはまずないのですが、 せっかくですのでエラー処理も一応入れておきます(笑) また何かありましたらお願いいたします。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

Dim r As Range  For Each r In Range("A1:H3000")   If r.Value <> "" And IsNumeric(r.Value) Then  '    2をかける処理 r.offset(0,1).Value = r.Value * 2   End If  Next r もし数値が入力されているセルに限定するなら  For Each r In Range("A1:H3000").SpecialCells(xlCellTypeConstants, 1)  '    2をかける処理 r.offset(0,1).Value = r.Value * 2  Next r でもよいでしょう。試してみてください。

takohasisa
質問者

お礼

できました。ありがとうございます。 SpecialCells(xlCellTypeConstants, 1)という式を自分は知らなかったので、とても勉強になりました。 またよろしくお願いいたします。

関連するQ&A