• ベストアンサー

excelで、数値か文字列かで処理を分岐できる?

cells(7,8)に数値を入力したときは、 cells(7,8)×cells(7,9)×cells(7,10)とし、  cells(7,8)に文字列を入力したときは、 cells(7,9)×cells(7,10)としたいのです。 いい方法ありませんか? よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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)
回答No.4

そのセルにエラー値が入らなければ、以下のようにすればよいですね。 ちょっと試してみてください。 answer = Application.Product(Cells(7, 8).Resize(, 3).Value)

laptop
質問者

補足

いつもありがとうございます。 計算するセルは7、8、10という風にひとつまたいでいます。 質問が不正確でした。 申し訳ございません。     また、この箇所はできれば関数で処理し、入力者に結果を確認させながら作業を進めさせたいのです。 可能でしょうか? 

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.3

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)
回答No.2

式なら、=IF(ISNUMBER(A1),A1,1)*B1*C1のようにすれば A1が数値なら A1*B1*C1 文字なら B1*C1 が計算できます。

  • ta123
  • ベストアンサー率51% (95/186)
回答No.1

VBAに関する質問と思います。 If WorksheetFunction.IsText(Cells(7, 8)) Then 文字列の場合の処理 Else 文字列以外の処理 End If 数値かどうかを判断するようにしたい場合は、 WorksheetFunction.IsNumber(Cells(7, 8)) とします。 EXCEL2002の検証しました。

関連するQ&A