我在第1行中从A
列到IA
输入了数字值。我想创建一个循环,将一个单元格与之前的单元格进行比较(也就是单元格B1
到A1
或单元格F
到E
)。我们以B1
和A1
为例。它查看单元格中的值B1
,看它是否大于A1
中单元格的值。如果它更大,那么我希望在单元格+
中输入B2
。如果B1
为< A1
-
,则将B2
放入单元格A-AI
。我希望程序能够循环此过程,以便它为所有列Sub EnterFormula()
Dim x As Integer
Dim y As Integer
x = Worksheets("Sheet2").Range("C2").Value
y = Worksheets("Sheet2").Range("B2").Value
If x > y Then
Worksheets("Sheet2").Range("C4") = "+"
End If
End Sub
执行此操作。以下是我想要程序做的事情(当然不包括正面和负面标记的破折号)。
A B C D F 1 33.12 34.52 34.92 35.19 34.97 2 (+) (+) (+) (-)
我意识到这个任务很容易在excel中执行(不使用VBA),但我正在尝试学习VBA,因此我可以执行更复杂的任务。我已经编写了执行简单任务的基本代码,但我不知道如何循环它以便它将为我的所有单元格执行此操作!
Sub Comparison()
Dim targetCell As Range
Dim targetSignCell As Range
Dim currentSign As String
Dim currentNumericalCell As Currency
' Find out what sign (+ or -) the current Cell has in it
currentSign = Worksheets("Sheet2").Range("H3").Value
'Variable to associate the numerical number above the current Cell
currentNumericalCell = Worksheets("Sheet2").Range("H2").Value
' Here we iterate through each cell in a specified range
' Since you know you want to start at B1 and go until E1,
' you can ues the following syntax to go through each cell
For Each Cell In Range("B2:H2")
' Get the value of the current cell with the .Value property
currentValue = Cell.Value
好的,这是我的计划的下一部分。它变得更复杂。我们移动到第3行。第3行要么有U(对于Up)要么有D(对于down)或者没有。
让我们从C列开始。列C1的值为34.92,C2的值为+(34.92大于前一天的33.02)。现在我们转到第一个前面的“+”,其中至少有一个相反的符号(在本例中为“ - ”)。所以在这种情况下是行A(行B下面的一个“ - ”)。现在,如果C1(34.92)中的数值大于A(33.12)中的数值,那么我们在C3中指定“U”。如果它不大,我们会在C3中留下一个空单元格。
让我们进入D列。列D1的值为35.19,大于C1值34.92,这就是D2具有“+”的原因。接下来我们转到第一个前面的“+”,其中至少有一个相反的符号(在本例中为“ - ”)。所以在这种情况下再次是A行。由于D1(39.19)中的数值大于A1(33.12)中的数值,因此D3得到U.
转到F列(32.97)......注意:我将值从原来的F改变了一点.32.97是LESS然后是35.19(D1),这就是F2为“ - ”的原因。接下来我们转到第一个前面的“ - ”,其间至少有一个相反的符号(在本例中为“+”)。所以在这种情况下,这是行B(中间有两个“+”符号)。现在,因为我们正在处理“ - ”符号,这次我们查看F1中的数值是否为LESS,然后是B1中的数值...它是什么,因此在F3中输入“D”。如果F1大于B1,则单元格将为空。
到G列(35.21)。这大于32.97(F1),因此在G2中得到“+”。接下来我们转到第一个前面的“+”,其中至少有一个相反的符号(在这种情况下为“ - ”)。所以在这种情况下,这是行D(中间有一个“ - ”)。由于G1的数值大于D1的数值,我们指定“U”。如果不是更大,我们会将单元格留空。
A B C D F G H I 1 33.12 33.02 34.92 35.19 32.97 35.21 35.60 35.90 2 (+) (-) (+) (+) (-) (+) (+) (+) 3 U U D U U U
到目前为止,这是我的代码。我添加了原始代码,它创建了“+”符号和“ - ”符号。
' Create a variable for our target cell
Set targetCell = Cell.Offset(1, 0)
' Here are the basic comparisons
If currentValue > previousValue Then
targetCell.Value = "+"
ElseIf currentValue < previousValue Then
targetCell.Value = "-"
ElseIf currentValue = previousValue Then
targetCell.Value = "="
Else
' Not sure how it would happen, but this
' is your catch-all in case the comparisons fail
targetCell.Value = "???"
End If
' Now go to the next cell in the range
Next Cell
'Alex starting to code
For Each Cell In Range("H3:B3")
' Find out what the sign is in the cell before it
previousSign = Cell.Offset(0, -1).Value
'Variable used to find the first cell with an
'Opposite sign as the current cell
oppositeSign = Cell.Offset(0, -2).Value
'Variable to associate the numberical number above the first Opposite Sign Cell
oppositeNumericalCell = Cell.Offset(-1, -2).Value
' Create a Variable for Target Cell
Set targetSignCell = Cell.Offset(1, 0)
If currentSign.Value = "+" And currentSign.Value <> previousSign.Value And oppositeSign.Value = currentSign.Value And currentNumericalCell.Value > oppositeNumericalCell.Value Then
targetSignCell = "U"
ElseIf currentSign.Value = "-" And currentSign.Value <> previousSign.Value And oppositeSign.Value = currentSign.Value And currentNumericalCell.Value < oppositeNumericalCell.Value Then
targetSignCell = "D"
Else
End If
Next Cell
End Sub
'现在获取它之前的单元格的值(按列) previousValue = Cell.Offset(0,-1).Value
{{1}}
答案 0 :(得分:1)
我同意@JohnBustos认为一个公式会更有效率,但如果这确实是一个学习练习,那么这里有一个简单的例子可以做你想要的:
Sub Comparison()
Dim targetCell As Range
' Here we iterate through each cell in a specified range
' Since you know you want to start at B1 and go until E1,
' you can ues the following syntax to go through each cell
For Each cell In Range("B1:E1")
' Get the value of the current cell with the .Value property
currentValue = cell.Value
' Now get the value of the cell that is before it (column-wise)
previousValue = cell.Offset(0, -1).Value
' Create a variable for our target cell
Set targetCell = cell.Offset(1, 0)
' Here are the basic comparisons
If currentValue > previousValue Then
targetCell.Value = "+"
ElseIf currentValue < previousValue Then
targetCell.Value = "-"
ElseIf currentValue = previousValue Then
targetCell.Value = "="
Else
' Not sure how it would happen, but this
' is your catch-all in case the comparisons fail
targetCell.Value = "???"
End If
' Now go to the next cell in the range
Next cell
End Sub
如果您要将其作为公式进行,则可能是这样的(输入B2
并复制到范围的末尾):
=IF(B1>A1,"+",IF(B1<A1,"-","="))
将公式上方的单元格与该单元格左侧的单元格进行比较,并添加相应的符号。
答案 1 :(得分:0)
假设您想要使用的范围内没有空单元格,您可以这样做:
Range("b2").Select
Do Until IsEmpty(ActiveCell.Offset(-1, 0))
If ActiveCell.Offset(-1, 0).Value > ActiveCell.Offset(-1, 1).Value Then
ActiveCell.Formula = "+"
End If
If ActiveCell.Offset(-1, 0).Value < ActiveCell.Offset(-1, 1).Value Then
ActiveCell.Formula = "-"
End If
ActiveCell.Offset(0, 1).Select
Loop
如果范围内有空单元格,则代替“直到”使用
dim I
for I = 1 to ..
next I