見出しと3列を除いて5028行あり、列「B」の値を変更して、列「C」に値1.7を設定したいと思います。
ゴールシークオプションを使用すると、1つのセルでのみ可能です。5028行についても同じことをしたいのですが、マクロを実行してタスクを実行するのを手伝ってください。
John Bustos は正しいアイデアを指摘しました。ここに実用的な解決策があります。
Public Sub Demo()
Dim rngRow As Range
For Each rngRow In UsedRange.Rows
rngRow.Cells(1, 3).GoalSeek Goal:=1.7, ChangingCell:=rngRow.Cells(1, 2)
Next rngRow
End Sub
編集:
これをワークシートの 1 つとしてではなく、モジュール内のマクロとして使用する場合、または有効な範囲へのその他の参照として使用する場合は、ActiveSheet.UsedRange.Rows
の代わりに使用します。UsedRange.Rows
あなたの例では、Range("A2:C5028").Rows
またはを使用することを好むかもしれませんMySheet.Range("A2:C5028").Rows
。
編集:
Public Sub Demo()
On Error Resume Next
Dim rngRow As Range
For Each rngRow In ActiveSheet.UsedRange.Rows
rngRow.Cells(1, 3).GoalSeek Goal:=1.7, ChangingCell:=rngRow.Cells(1, 2)
Next rngRow
End Sub
ループしてから Range-Goal シークを行うマクロを作成できます - http://msdn.microsoft.com/en-us/library/office/bb209907%28v=office.12%29.aspx
これは良いコードです。列だけでなく複数の列のための私の目的のためにそれを修正しました。私のコードを実行するには、最初に、GoalSeek するすべてのセルを選択 (強調表示) する必要があります (個別の領域ではなく、テーブルのように接続されています)。私のコード:
Sub GoalSeek_To_0()
' Macro created 15 Jun '18 by Benjamin Cohen
On Error Resume Next
Dim row_, col_ As Range
Dim i_, j_ As Integer
' i_ = 1
j_ = 1
For Each col_ In Selection.Columns
For Each row_ In Selection.Rows
row_.Cells(1, j_).GoalSeek Goal:=0, ChangingCell:=row_.Cells(1, j_).Offset(0, -1)
row_.Cells(1, j_).Value = 1
Next row_
j_ = j_ + 1
Next col_
End Sub