VBAを初めて使用しました。基本的なコーディングを開始しています。VBAを使用して値の範囲を検索し、値の列を変数として返します。
現在の最終目標は、2つのデータ検証済みセルの入力に基づいてテーブル内のセルをゼロにすることです。
私は現在、私がやろうとしていることをうまく実装するためのシートを持っていますが、コードは長く、Find関数を使用して効率化できると確信しています。私はこの回避策を実装する前に数時間Findを実装しようとしました。
ユーザーは、セルB4の有効なリストを通じて現在の予測月を選択します。次に、セルB5で「はい/いいえ」を選択して、希望のセルを「ゼロにする」ことを選択できます。月はB7:M7からレイアウトされています。私の最初の目標は、VBAにB4から選択された月をとり、B7:M7でその月を見つけ、その列を返し、列データを使用して行15に移動し、そのセルをゼロにすることでした。しかし、コンパイルエラーを引き起こすことなくfind関数にこれを記述する適切な方法を見つけることができませんでした。以下は
私は合理化することが可能と考えている現在のコードです:
Private Sub Worksheet_Change_B(ByVal Target As Range)
If Target.Address(False, False) = "B5" Then
If Range("B5").Value = "Yes" Then
If Range("B4").Value = "Oct" Then
Range("B15").Value = "0"
ElseIf Range("B4").Value = "Nov" Then
Range("C15").Value = "0"
ElseIf Range("B4").Value = "Dec" Then
Range("D15").Value = "0"
ElseIf Range("B4").Value = "Jan" Then
Range("E15").Value = "0"
ElseIf Range("B4").Value = "Feb" Then
Range("F15").Value = "0"
ElseIf Range("B4").Value = "Mar" Then
Range("G15").Value = "0"
ElseIf Range("B4").Value = "Apr" Then
Range("H15").Value = "0"
ElseIf Range("B4").Value = "May" Then
Range("I15").Value = "0"
ElseIf Range("B4").Value = "Jun" Then
Range("J15").Value = "0"
ElseIf Range("B4").Value = "Jul" Then
Range("K15").Value = "0"
ElseIf Range("B4").Value = "Aug" Then
Range("L15").Value = "0"
ElseIf Range("B4").Value = "Sep" Then
Range("M15").Value = "0"
End If
ElseIf Range("B5").Value = "No" Then
If Range("B4").Value = "Oct" Then
Range("B15").Value = Range("B35").Value
ElseIf Range("B4").Value = "Nov" Then
Range("C15").Value = Range("C35").Value
ElseIf Range("B4").Value = "Dec" Then
Range("D15").Value = Range("D35").Value
ElseIf Range("B4").Value = "Jan" Then
Range("E15").Value = Range("E35").Value
ElseIf Range("B4").Value = "Feb" Then
Range("F15").Value = Range("F35").Value
ElseIf Range("B4").Value = "Mar" Then
Range("G15").Value = Range("G35").Value
ElseIf Range("B4").Value = "Apr" Then
Range("H15").Value = Range("H35").Value
ElseIf Range("B4").Value = "May" Then
Range("I15").Value = Range("I35").Value
ElseIf Range("B4").Value = "Jun" Then
Range("J15").Value = Range("J35").Value
ElseIf Range("B4").Value = "Jul" Then
Range("K15").Value = Range("K35").Value
ElseIf Range("B4").Value = "Aug" Then
Range("L15").Value = Range("L35").Value
ElseIf Range("B4").Value = "Sep" Then
Range("M15").Value = Range("M35").Value
End If
End If
End If
End Sub
私はもともと検索機能を考えていた何のように行ってきましたが、私はそれが正常にコンパイルすることができませんでした。
Sub Test()
Dim rFind As Range
If Target.Address(False, False) = "B5" Then
If Range("B5").Value = "Yes" Then 'If the user wants to zero out the cell on row 15
With Range("B7:M7") 'Range of Months
Set rFind = .Find(What:=("B4"), LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
Range("rFind.Column,15").Value = "0" 'Set Value of cell in row 15 of referenced column to zero
End With
If Range("B5").Value = "No" Then 'If the user doesn't want to zero out cell on row 15
With Range("B7:M7") 'Range of Months
Set rFind = .Find(What:=("B4"), LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
Range("rFind.Column,15").Value = Range("rFind.Column,35").Value 'Pulls in Previous Value
End With
End If
End Sub
私は進んでいますか?変更したいセルの住所の月の列をどのように参照できますか?
私は現時点では編集できませんが、誤ったバッククォートが表示されています - セル(15、rFind.Column)。値= 0' –
ありがとうございました!私はその点でそれについて行くことを考えなかった。 Dim Col as Long、それから、次のようなときに何が起こっているのか少し説明できますか?ちょうど一緒に従おうとしている。 –
@ D.Horowitz確かに、私はより多くのコメントを追加します。 –