【问题标题】:if then statement, VBA, loopif then 语句,VBA,循环
【发布时间】:2015-02-09 17:03:34
【问题描述】:

这是我想要完成的一个例子是 Excel。

食品组/食品 / 苹果 / 香蕉 / 胡萝卜 / 西兰花

我正在写一个 If Then 语句来尝试将食物与他们的组匹配。

(我知道 Access 会更容易,但我不想一直从 Excel 复制和粘贴到 Access 和返回。它只会是 6 个不同的项目)

我编写的 If Then 编码仅用于执行第一个单元格。但是我的循环不起作用。请帮忙

Sub InsertFoodGroup()

    Dim food As String, group As String
    Dim i As Integer

    i = Cells(2, 2).End(xlDown).Row

    food = Range(Cells(2, 2), Cells(i, 2)).Value

        Do While Cells(i, 2).Value <> ""
            If food = "Apple" Then
                group = "Fruit"
            ElseIf food = "Banana" Then
                group = "Fruit"
            ElseIf food = "Carrot" Then
                group = "Vegetable"
            ElseIf food = "Broccoli" Then
                group = "Vegetable"
            Else
                total = "false"
            End If
            i = i + 1
        Loop

    Range(Cells(2, 21), Cells(i, 21)).Value = group

End Sub

【问题讨论】:

  • 您忘记在代码中设置 food 变量的值。
  • 当你说不工作究竟是什么不工作?
  • 嗯,1) i 已经从数据的末尾开始了,你可能想说i = 2Do While Cells(i,2).Value &lt;&gt; ""; 2) food 没有赋值; 3) group 每次都被赋值,但没有在任何地方使用; 4)如果你想将foodgroup匹配,你可能想返回group,而不是total,并且你想在每个Loop之前都这样做。
  • 对不起。我从我的实际工作表中更改了名称,却忘了全部更改。我编辑了代码并给出了食物和组范围

标签: vba loops if-statement


【解决方案1】:

我可以建议使用一个非常简单的 UDF:

Public Function foodToGroup(ByVal food As String) As Variant
    Select Case food
        Case "Apple", "Banana":
        foodToGroup = "Fruit"
        Case "Carrot", "Broccoli":
        foodToGroup = "Vegetable"
        Case Else
        foodToGroup = False
    End Select
End Function

因此,假设您的数据位于“A1:A100”中,您只需在单元格“B1”(或您需要的任何位置)中输入=foodToGroup(A1),然后向下拖动函数直到数据结束。

请注意,这可以通过简单的 Excel 公式轻松实现:=IF(OR(A1="Banana",A1="Apple"),"Fruit",IF(OR(A1="Carrot",A1="Broccoli"),"Vegetable",FALSE))

【讨论】:

  • 感谢您的评论。这是一个文件,每个月由不同的人完成大约 3,000 行。我试图简化流程,使其尽可能用户友好。再次,谢谢你:)
  • @emilyj914 你的意思是上面的解决方案不起作用?我可以帮你解决吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2023-01-13
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多