• ベストアンサー

エクセルVBAでのセルの扱い

If Cells(retsu(n) + 3, zentai(n)).Value + 10 < Cells(retsu(n) + 3, zentai(n) + gyou(n)).Value Then 二つのセルの大きさを比較する分を作ったのですが、オブジェクトの定義エラーと表示されます。いったいどこがだめだかさっぱりわからないのですが、皆さんの知恵を貸してください。。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。 > オブジェクトの定義エラーと表示されます。 Cells プロパティーの書式は、   Cells(RowIndex, ColumnIndex) ですが、行列のIndex には範囲があって、   ・RowIndex : 1~65536   ・ColumnIndex: 1~256 でなければなりません。例えば、zentai(n) + gyou(n) の計算結果で ColumnIndex を指定しているわけですが、この範囲を超えてませんか? あるいは、計算結果が 0 になってしまっているとか? 、、、RowIndex のところに retsu(n) とあるのも気になると言えば、なり ますが。行列番号の指定が逆になってないですか? 取り合えず、他の方がコメントされているように、変数の中身を出力して 確認するのが良いでしょう。 VBE でイミディエイトウインドウを表示して、下記のコードでチェックし てみて下さい。 ' イミディエイトウインドウに変数の値を表示してみる Debug.Print "RowIndex:=" & retsu(n) + 3; " ColumnIndex:=" & zentai(n) Debug.Print "RowIndex:=" & retsu(n) + 3; " ColumnIndex:=" & zentai(n) + gyou(n) If Cells(retsu(n) + 3, zentai(n)).Value + 10 < Cells(retsu(n) + 3, zentai(n) + gyou(n)).Value Then

その他の回答 (3)

  • salf
  • ベストアンサー率42% (27/64)
回答No.3

>デバックの時に値が代入されているか確認したところ各配列には値がしっかり入っています。なぜだめなんでしょうか。。 その代入されている値を具体的に教えてください。 それと、その比較しようとしているセルに入っている値を具体的に押してください。

  • salf
  • ベストアンサー率42% (27/64)
回答No.2

えっと、以下のプログラムは動きますんでIF文がおかしいわけではないと思います。 If Cells(1, 1).Value < Cells(1, 2) Then MsgBox "Cell(1,1)のほうがちっちゃい" ElseIf Cells(1, 1).Value = Cells(1, 2) Then MsgBox "Cell(1,1)とCell(1,2)は一緒" Else MsgBox "Cell(1,2)のほうがちっちゃい" End If なので、使用している変数(retsu()、zentai()、gyou())に問題があると思います。 retsu()、zentai()、gyou() の値を出力して確認してみてください。

  • ipsum11
  • ベストアンサー率21% (55/251)
回答No.1

何ともいえませんが、 retsu()、zentai()、gyou()はそれぞれ定義されていますか?

YCPM
質問者

補足

皆さん返信ありがとうございます。 デバックの時に値が代入されているか確認したところ各配列には値がしっかり入っています。なぜだめなんでしょうか。。