I'm very new to VBA and trying to learn as I go along. I'm 100% sure there is an easier way to condense this code rather than typing If
statements for each cell and corresponding cell.
Here is the code I'm using:
Sub Test()
If Range("B1").Value > 0 Then
Range("A1").Value = 0
End If
If Range("B2").Value > 0 Then
Range("A2").Value = 0
End If
If Range("B3").Value > 0 Then
Range("A3").Value = 0
End If
If Range("B4").Value > 0 Then
Range("A4").Value = 0
End If
If Range("B5").Value > 0 Then
Range("A5").Value = 0
End If
If Range("B6").Value > 0 Then
Range("A6").Value = 0
End If
End Sub
The range I'm using is A1:A6 then comparing that against values of B1:B6 and saying if B1 > 0 then A1 = 0, then repeat for A2 and B2 and so on.
I know that the solution is probably painfully obvious, but I can't seem to figure out how to do it yet.
Thanks for any help provided!
You can either
=IF(B1:B6,A1:A6,0)
to replace the original data in column A or
C1
benefitting from the newer dynamic features of version 2019+/MS 365 displaying it as so called spill range (otherwise you need to enter it as array formula confirming it via C trl+ S hift+ E nter) .Example call in VBA
Option Explicit ' head of code module (force declaration of variables and objects)
Sub Example()
Dim ws As Worksheet
Set ws = Sheet1 ' << change to your project's sheet Code(Name)
Dim data As Variant ' provide for a 1-based 2-dim datafield array
'assign worksheet related evaluation to data
data = ws.Evaluate("=If(B1:B6,A1:A6,0)")
'write to target
ws.Range("A1").Resize(UBound(data), 1).Value = data
End Sub
If
StatementsMicrosoft Docs
Creating Object Variables
Const statement
For Each...Next statement
Range.Resize property
Range.EntireRow property
IsNumeric function
The Code
Option Explicit
Sub ForEachNext()
Const sfCellAddress As String = "B1"
Const srCount As Long = 6
Const dCol As String = "A"
Dim ws As Worksheet: Set ws = ActiveSheet
Dim sCell As Range
Dim sValue As Variant
Dim dCell As Range
For Each sCell In ws.Range(sfCellAddress).Resize(srCount).Cells
sValue = sCell.Value
If IsNumeric(sValue) Then ' is a number
If sValue > 0 Then ' is greater than
Set dCell = sCell.EntireRow.Columns(dCol)
dCell.Value = 0
'Else ' is less than or equal ('sValue <= 0')
End If
'Else ' is not a number
End If
Next sCell
End Sub
Sub ForEachNextMagicNumbers()
Dim ws As Worksheet: Set ws = ActiveSheet
Dim sCell As Range
Dim sValue As Variant
Dim dCell As Range
For Each sCell In ws.Range("B1").Resize(6).Cells
sValue = sCell.Value
If IsNumeric(sValue) Then ' is a number
If sValue > 0 Then ' is greater than
Set dCell = sCell.EntireRow.Columns("A")
dCell.Value = 0
'Else ' is less than or equal ('sValue <= 0')
End If
'Else ' is not a number
End If
Next sCell
End Sub
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.