2016-12-06 6 views
1

このコードでは、2つのRangeオブジェクトを.OffSet(1、0).Activateを使ってインクリメントしようとしています。Rangeオブジェクトをループでインクリメントする方法

Function Foundry_check_func(target_cell As Range, result_cell As Range) 
    For x = 1 To 20 
     If result_cell <= 5 Then 
      target_cell = "Value 1" 
     ElseIf result_cell >= 10 Then 
      target_cell = "Value 2" 
     Else: target_cell = "Value 3" 
     End If 

     With target_cell 
     .Interior.Color = RGB(0, 255, 0) 
     End With 

     target_cell.Offset(3, 0).Activate 
     result_cell.Offset(4, 0).Activate 
     Debug.Print ("Value: " & result_cell & " Loop: " & x) 
    Next x 


    ' Don't forget to format target cell at end of loop 

End Function 


Sub Foundry_check() 
    Main = Foundry_check_func(Range("J22"), Range("K22")) 
End Sub 

しかし、私はDebug.Printを使用して、各ループの後に読み込まれるセルは変更されないことがわかります。出力は次のとおりです。

範囲の代わりにActiveCellを使用して同様のマクロ作業を行いました。しかし、このプログラムでは、2セットのセルをOffSetする必要があります。 1つはデータ(result_cell)を読み込み、もう1つはそのデータ(target_cell)に基づいて値を書き込む。私はどのように私は同じループ内の2つの異なる細胞をオフセットするためにActiveCellを使用することができるか分からない。

ご協力いただければ幸いです。ここで

+1

あなたは 'どちらかの必要はありません。オフセット*または* '法「ivate」。単に 'Cells'コレクションを直接使用してください。これはまさに何をするはずですか? 3と4のオフセットは、ループが長くなるほど2つの範囲の間隔を広げます。 – Comintern

+4

セルをアクティブにするのではなく、 'set targetcell = targetcell.offset(3,0)'と 'set resultcell = resultcell.offset(4,0)'を試してください。あなたの現在のコードはセルをアクティブにしますが、それについてはそれがあります。ターゲットと結果のセルが変更されない – NickSlash

+1

これが成功した 'for'ループであるためには、実際に何かを更新するためにイテレータ(' x')を使うか、ループ内で徐々に変更して更新する必要があります。どちらも存在しない。それをした@NickSlash。 – AER

答えて

0

あなたはtarget_cellが変更されていないだから...あなたはあなたのデバッグスクリプトに

target_cell.address 

を追加する必要があります

あなたの値が変更されていない...私が見る問題だとあなたはあなたがあなただけの別をアクティブにすることはできません...ので、あなたがこれを行うだろうtarget_cellを設定する必要があり、標的細胞を変更するには... を変更していない表示されます。

set target_cell = target_cell.Offset(3, 0) 
    set result_cell = result_cell.Offset(4, 0) 
関連する問題