1

見出しと3列を除いて5028行あり、列「B」の値を変更して、列「C」に値1.7を設定したいと思います。

ゴールシークオプションを使用すると、1つのセルでのみ可能です。5028行についても同じことをしたいのですが、マクロを実行してタスクを実行するのを手伝ってください。

4

3 に答える 3

3

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
于 2012-11-15T16:02:14.517 に答える
1

ループしてから Range-Goal シークを行うマクロを作成できます - http://msdn.microsoft.com/en-us/library/office/bb209907%28v=office.12%29.aspx

于 2012-11-15T15:57:02.060 に答える
0

これは良いコードです。列だけでなく複数の列のための私の目的のためにそれを修正しました。私のコードを実行するには、最初に、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
于 2018-06-15T14:02:42.310 に答える