• ベストアンサー

関数式の結果の取得その他

あるセル(ここではY6)のセルの値が1以上の場合、別のセル(ここではF6:H6)を塗りつぶしたいと考えています。(1未満の場合は塗りつぶし解除) その中で3点がどうしても解決出来ません。 1.Y6の値をActiveCell.Formulaで読み込みたいのですが、Y6には=IF(T6+X6>=1,V6+W6,0)の関数が入っており、Foumulaで読み込むと関数のまま読み込まれてしまい、値を取得出来ません。 2.下から3行目でypoint = ypoint + 1でDo直後のCells(ypoint, xpoint).Selectの行を順次1つ下にしているつもりなのですが、+1とされない上に、loopを抜けてしまいます。 1.2は宣言が間違っている為だと思うのですが、解決方法が分かりません。 3.わざわざセルをセレクト(アクティブ?)せずに実行する実行する方法は無いでしょうか 沢山の質問となりますが宜しくお願い致します。 Sub 誤記入チェックテスト() Dim PasteArea As Range Range("y6").Select Set ReadArea = ActiveCell yPOINT = ReadArea.Row xpoint = ReadArea.Column Set ReadArea = Cells(Rows.Count, ActiveCell.Column).End(xlUp) lastpoint = ReadArea.Row Do Cells(yPOINT, xpoint).Select judg = ActiveCell.Formula xcarea1 = xpoint - 19 xcarea2 = xpoint - 17 Range(Cells(yPOINT, xcarea1), Cells(yPOINT, xcarea2)).Select If judg >= 1 Then With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Else Selection.Interior.ColorIndex = xlNone End If yPOINT = yPOINT + 1 Loop While yPOINT = lastpoint End Sub

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

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

> Foumulaで読み込むと関数のまま読み込まれてしまい、値を取得出来ません。 だから値を求めるのにはValueを使います。 > +1とされない上に、loopを抜けてしまいます。 Loop While yPOINT = lastpoint で6のままだからです。 > わざわざセルをセレクト(アクティブ?)せずに実行する実行する方法は無いでしょうか サンプルを書いてみました。 Sub 誤記入チェックテスト() Dim judg Set ReadArea = Range("Y6") Do While ReadArea.Value <> "" judg = ReadArea.Value yPOINT = ReadArea.Row xpoint = ReadArea.Column xcarea1 = xpoint - 19 xcarea2 = xpoint - 17 With Range(Cells(yPOINT, xcarea1), Cells(yPOINT, xcarea2)).Interior If judg >= 1 Then .ColorIndex = 6 .Pattern = xlSolid Else .ColorIndex = xlNone End If End With Set ReadArea = ReadArea.Offset(1) Loop End Sub

ae-1sp
質問者

お礼

ビックリする位すっきししていて、本当に同じ事動作をしているのが不思議なぐらいです。 サンプルと言うよりも、答えそのままですね。 本当にありがとうございました。

その他の回答 (1)

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

1、ActiveCell.FormulaではなくActiveCell.Valueを使用します。 2、 lastpoint = ReadArea.Row では先頭行を返してしまいます。選択した範囲の行数を調べるならReadArea.Rowsとしてください。 3、Do直後の  Cells(yPOINT, xpoint).Select  judg = ActiveCell.Formula  のようなケースであれば  judg = Cells(yPOINT, xpoint).Formula  としても結果は同じです。

ae-1sp
質問者

お礼

早速のご回答ありがとうございます。 値を読むにはValueを用いるのですね。 また、構文の簡略化などご指導いただきありがとうございます。

関連するQ&A