- ベストアンサー
excelで、数値か文字列かで処理を分岐できる?
cells(7,8)に数値を入力したときは、 cells(7,8)×cells(7,9)×cells(7,10)とし、 cells(7,8)に文字列を入力したときは、 cells(7,9)×cells(7,10)としたいのです。 いい方法ありませんか? よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
'確認する場合は、わたしが良く使う方法は、VarTypeを使用します。あくまでも私がする方法です。 '書式が文字列の数字もはじきます。 If VarType(Cells(7, 7)) <> vbDouble Then MsgBox "その値は数値ではありません", vbCritical End If '------------------------------------ '短く書くのでしたら、このようにすればよいです。 'Excel独特の使い方ですね。RangeやCellsを使うと長くなってしまいます。 Sub Test2() If Application.ReferenceStyle = xlA1 Then answer = Application.Evaluate("Product(G7,H7,J7)") Else answer = Application.Evaluate("Product(R7C7,R7C8,R7C10)") End If If Not IsError(answer) Then '-----処理 ------- End If End Sub '------------------------------------ こちらは、ループの仕方で、MyArray を基点とし、Offsetを使えば、違う場所の計算ができますね。 Sub TestProduct() Dim MyArray As Variant Dim Answer As Double Dim i As Long MyArray = Array("G7", "H7", "J7") Answer = 1 For i = LBound(MyArray) To UBound(MyArray) If VarType(Range(MyArray(i))) = vbDouble Then Answer = Answer * Range(MyArray(i)).Value End If Next End Sub
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
そのセルにエラー値が入らなければ、以下のようにすればよいですね。 ちょっと試してみてください。 answer = Application.Product(Cells(7, 8).Resize(, 3).Value)
- shkwta
- ベストアンサー率52% (966/1825)
VBAの場合: IsNumeric(Cells(7,8)) この関数は、数値のときTrue, 非数値のときFalseになります。ただし、文字列であっても 1e+2 とか 33334 のように数値として解釈できるものはTrueになります。 Application.WorksheetFunction.IsNumber(Cells(7,8)) この関数は、ワークシート関数のISNUMBERと同じで、数値のときTrue, 非数値のときFalseになります。1e+2 とか 33334 のように数値として解釈できても文字列であればFalseになります。
- gatyan
- ベストアンサー率41% (160/385)
式なら、=IF(ISNUMBER(A1),A1,1)*B1*C1のようにすれば A1が数値なら A1*B1*C1 文字なら B1*C1 が計算できます。
- ta123
- ベストアンサー率51% (95/186)
VBAに関する質問と思います。 If WorksheetFunction.IsText(Cells(7, 8)) Then 文字列の場合の処理 Else 文字列以外の処理 End If 数値かどうかを判断するようにしたい場合は、 WorksheetFunction.IsNumber(Cells(7, 8)) とします。 EXCEL2002の検証しました。
補足
いつもありがとうございます。 計算するセルは7、8、10という風にひとつまたいでいます。 質問が不正確でした。 申し訳ございません。 また、この箇所はできれば関数で処理し、入力者に結果を確認させながら作業を進めさせたいのです。 可能でしょうか?