Excel 多行上的if/then公式

Excel 多行上的if/then公式,excel,vba,Excel,Vba,我正在尝试生成一个代码(对某些人来说很简单),但我没有经验,希望得到帮助 代码查看单元格(“J1”),并对(K1)中的结果执行if/then),但我想复制此代码以查看范围J2到J10单元格,同时给出范围K2到K10单元格中的结果。 以下代码适用于单行公式: Sub Check() Dim DDDD As Date, result As String DDDD = Range("j1").Value If DDDD >= Date

我正在尝试生成一个代码(对某些人来说很简单),但我没有经验,希望得到帮助

代码查看单元格(“J1”),并对(K1)中的结果执行if/then),但我想复制此代码以查看范围J2到J10单元格,同时给出范围K2到K10单元格中的结果。 以下代码适用于单行公式:

    Sub Check() 
        Dim DDDD As Date, result As String 
        DDDD = Range("j1").Value 
        If DDDD >= Date Then 
            result = "Future" 
        Else 
            result = "Now" 
        End If 
        Range("k1").Value = result 
   End Sub 

下面是一段代码,它在J列循环,结果将放在K列

Sub Check()

Dim DDDD As Date
Dim result As String
Dim row, NumofRows  As Integer

' use NumfofRows as a Dynamic value to decide how many rows of data you want to look at column J
NumofRows = 10

For row = 1 To NumofRows
    If Cells(row, 10) >= Date Then
        result = "Future"
    Else
        result = "Now"
    End If 
    Cells(row, 11).Value = result
Next

End Sub
可以使用循环和方法,如下所示:

 Sub Check() 
    Dim DDDD As Date, result As String 
    Dim cell as Range

    For Each cell in Range("J1:J10")
        DDDD = cell.Value 
        If DDDD >= Date Then 
            result = "Future" 
        Else 
            result = "Now"
        End If 
        ' Change value at the right side of the cell
        cell.Offset(0,1).Value = result 
    Next cell
End Sub 
但是使用VBA来实现这一点真是太过分了。您可以将此公式放入
K1

=IF(J1 >= TODAY(), "Future", "Now")

。。。然后将该公式复制/拖动到它下面的其他单元格。

以后,请看一看使您的问题既有趣又诱人的答案。对于您的问题,处理范围比处理包含日期的单个单元格更有效。每个…下一个循环的<代码>可以循环通过范围内的每个单元格。然后,
If…Then…Else…End If
循环可以在给定各种条件下做出决定。
Offset(0,1)
方法可以在
If…Then
循环中使用,以将结果放置在右侧的列中。以下代码符合您的要求:

Sub Check()
'    Declare your variables
     Dim MyDates As Range
     Dim result As String

'    First, grab all the values in the J2:JX column, where
'    X can be any number of dates you choose. Note that
'    you must "Set" Object variables, but you must "Dim"
'    other types of variables. 
     Set MyDates = Range(Range("J2"), Range("J2").End(xlDown))

'    Loop through every cell in the dates column and give the
'    offset column (column K) a string value if the condition
'    is met.
     Dim Cell As Range
     For Each Cell In MyDates
         If Cell >= Date Then
             result = "Future"
             Cell.Offset(0, 1).Value = result
         Else
             result = "Now (or past)"
             Cell.Offset(0, 1).Value = result
         End If
     Next Cell
End Sub
End(xlDown)
方法模拟选择单元格并按Ctrl+向下箭头。另外,请注意,此代码根本不处理错误。例如,如果意外地将日期输入为文本,则该过程将产生不正确的结果。此外,根据输入数据的时间,可能会得到令人困惑的结果。我在这里附上了Excel中的结果图像:


Excel VBA已经存在很长时间了。因此,这一点实际上是相当好的。我建议使用“For Loop”结构。更好的是:不要使用VBA,而是在单元公式中使用。谢谢Teylyn,我认为您的代码只涵盖J1单元,而不涵盖J10。谢谢你的答复。下面的Shai Rado回复进入了公式的循环。你能对给出的答案给出一些反馈吗?谢谢Andy@trincot非常感谢你的最新回复。我也遇到了麻烦:)谢谢Shai Rado,感谢你和其他回复我帖子的人的帮助。谢谢Andy,@trincot,我收到了一些非常好的回复,非常感谢。抱歉没有及时回复,我正在海外出差,刚刚收到我的私人邮件。我是一个初学者,我发现这些应用程序非常有趣,在我的工作中非常有价值。如果你选择哪种答案最好,这将对社区有所帮助。问题左边是一个复选标记选项。如果你选择了它,它会变成绿色,通知社区你投票选出了最佳答案,并给投稿人打分。嗨@Andy,你能用代码再进一步吗。如果我在单元格J2:J100中有日期,我正试图找出如何调整您的代码,但只希望公式适用于单元格J3:J10。。。。。我尝试将其作为J3:J10放入您的代码中,但没有成功。Hello@quwi,如果您想将结果更改为仅基于
J3:J10
进行计算,则只需将
Set MyDates=Range(Range(“J2”)、Range(“J2”).End(xlDown”)
更改为
Set MyDates=Range(“J3:J10”)
。通过额外的调整,你甚至可以有一个输入框来选择你想要的范围,从而使它成为动态的。如果您喜欢此答案,请勾选此答案左上角的绿色复选框。