如何比较excel中的行并执行if语句

如何比较excel中的行并执行if语句,excel,vba,spreadsheet,Excel,Vba,Spreadsheet,我有一个电子表格,其中我需要计算对特定区域执行某项操作的次数,我知道当存在某些条件时,另一个电子表格中的字段应该递增 for i to rows.length if Cell(A,i) == Cell(A,i+1) AND Cell(D,i) != Cell(D,i+1) otherspreadsheet.field++ else if Cell(A,i) != Cell(A,i+1) otherspreadsheet.field++ 我不知道如何使用v

我有一个电子表格,其中我需要计算对特定区域执行某项操作的次数,我知道当存在某些条件时,另一个电子表格中的字段应该递增

for i to rows.length
   if Cell(A,i) == Cell(A,i+1) AND Cell(D,i) != Cell(D,i+1)
      otherspreadsheet.field++
   else if Cell(A,i) != Cell(A,i+1) 
      otherspreadsheet.field++ 
我不知道如何使用vba与Microsoft excel,任何帮助将不胜感激

+++

我在玩你提供给我的代码,让我熟悉并最终解决这个问题。strYear似乎不起作用,
strYear=InputBox(“输入年份”)
。如果我进入2014年,计算结果为0。但是,如果我将下面的代码从
“strYear”替换为2014
,那么它就可以工作了

With MySheet
For i = 4 To LastRow

    If .Cells(i, "AA").Value = "strYear" Then
        GreensFCounter = GreensFCounter + 1
    Else
        GreensFCounter = GreensFCounter
    End If
Next i
End With
MsgBox (GreensFCounter)

下面的代码未经测试,但有大量注释——我认为它将在每个部分中回答您的问题

不过有一个提示:您正在将一个单元格与它下面的下一个单元格进行比较,对吗?表面上看起来不错,但是你需要考虑的一个角落是范围的结束:你将与一个空的细胞进行比较。

Option Explicit
Sub CheckCellsAndTrackResults()

Dim i As Long, LastRow As Long
Dim Counter1 As Long, Counter2 As Long
Dim MySheet As Worksheet

'initialize our counter variables
Counter1 = 0
Counter2 = 0

'lets assume the comparison is happening on Sheet1
Set MySheet = ThisWorkbook.Worksheets("Sheet1")

'identify the last row for our loop
LastRow = MySheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

'NOTES:
'use a single equal sign ("=") for equivalent
'use less/greater ("<>") for not equivalent

'lets loop through rows 1 to the last row using a
'cool little VBA construct, a With...End With qualifier,
'to make some of our cell-checking easier to write:
With MySheet
    For i = 1 To LastRow
        If .Cells(1, i).Value = .Cells(1, i + 1).Value And _
        .Cells(4, i).Value <> .Cells(4, i + 1).Value Then
            Counter1 = Counter1 + 1
        ElseIf .Cells(1, i).Value <> .Cells(1, i + 1) Then
            Counter2 = Counter2 + 1
        Else
            'maybe do something else here?
        End
    Next i
End With

'finally, we can write out the counter results somewhere
'like this:
'MySheet.Cells(x, y) = Counter1
'MySheet.Cells(p, q) = Counter2

End Sub
选项显式
子检查单元格和跟踪结果()
朦胧的我一样长,最后一排一样长
调暗计数器1的长度与计数器2的长度相同
将我的工作表设置为工作表
'初始化计数器变量
计数器1=0
计数器2=0
'我们假设比较发生在表1上
设置MySheet=ThisWorkbook.Worksheets(“Sheet1”)
'确定循环的最后一行
LastRow=MySheet.Cells.Find(“*”,SearchOrder:=xlByRows,SearchDirection:=xlPrevious)。行
'注:
'使用一个等号(=”)表示等效
“使用较少/较大(“”)表示不等效
'让我们使用
'很酷的小VBA构造,一个带有…结尾的限定符,
“为了使我们的一些单元格检查更易于编写:
用我的纸
对于i=1到最后一行
If.Cells(1,i).Value=.Cells(1,i+1).Value和_
.单元格(4,i).值.单元格(4,i+1).然后值
计数器1=计数器1+1
ElseIf.Cells(1,i).Value.Cells(1,i+1)然后
计数器2=计数器2+1
其他的
“也许在这里做点别的事?
终止
接下来我
以
最后,我们可以在某个地方写出反结果
"像这样:
'MySheet.Cells(x,y)=计数器1
'MySheet.Cells(p,q)=计数器2
端接头

if和
else
两个
都做同样的事情,
这篇文章中的psuedocode肯定可以在VBA中实现,而不需要太多的麻烦,但在任何人进入之前都有一个简短的问题。。。那不是故意的,对吧?嘿,谢谢你的回复。if语句是正确的,我认为,两者之间的区别是第一个有AND语句,另一个是因为如果两个日期(a列)不同,那么字段应该增加。对不起,我应该更清楚。。。在这两种情况下,是否要增加相同的计数器,
otherspreadsheet.field
?或者第一个条件是
Counter1++
,第二个条件是
Counter2++
?哦,是的,对不起,我的意思是,有3个字段需要增加,单元格(D,I)可以包含3个
字符串,比如x,y和z。在这两种情况下,(D,i+1)的单元格将用于查找要递增的字段。是的,计数器取决于单元格(D,i+1)的内容。我有3个计数器
X、Y和Z
我想你应该去掉双引号:
If.Cells(I,“AA”).Value=strYear然后
非常感谢我会查看它,是的,我必须在第一行有一个单独的箱子。另外,我将有一个例子,如果下面的单元格是空的,它就可以中断for循环。再次感谢您的时间!我很高兴,希望上面的内容能帮助您实现目标嘿,我一直在努力让它正常工作,但是
If.Cells(27,I).Value=“strYear”那么
If语句的这部分永远不会执行,即使cell(27,I)的值应该等于strYear。我已经尝试过MsgBox'ing这个strYear,它给了我正确的输出,但是当
MsgBox(.Cells(27,I))
它什么也不显示时。有什么想法吗?我不确定我以前是否看过你的代码的那部分。你能在MySheet.Cells(27,i)
中发布一个关于这个
“strYear”
错误处理的例子吗?我已经更新了这个问题,我认为这个解决方案可能很简单,尽管我用Java编程时对vba不是很在行。。。再次感谢