アプリ版:「スタンプのみでお礼する」機能のリリースについて

すいませんEXCEL VBAで教えていただきたいことがあります。

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

A 回答 (2件)

どうしても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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/16 18:37

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
でもよいでしょう。試してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/16 18:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!