【问题标题】:EXCEL VBA - Loop through cells in a column, if not empty, print cell value into another columnEXCEL VBA - 遍历列中的单元格,如果不为空,则将单元格值打印到另一列中
【发布时间】:2015-01-16 00:47:48
【问题描述】:

我对 Excel VBA 非常陌生,对所有不同的函数等还不太熟悉,我很确定我了解如何在 FOR 循环中使用 IF 语句,所以我不太确定如何着手创建代码。

这就是我希望发生的事情:

A1 Food       B1 Selected?   D1 Selections
A2 Grapes     B2 Yes         D2 Grapes
A3 Tomato     B3             D3 Mango
A4 Mango      B4 Yes         D4 Spinach
A5 Spinach    B5 Yes     
A6 Carrots    B6
A7 Onion      B7 

我的思考过程:

1) 在 B2 到 B7 范围内创建一个 FOR 循环以检查值“YES”
2)如果值为yes,则将A中相邻单元格中的对应值打印到D中。
3) 否则,它应该继续循环遍历单元格。

我想VLOOKUP在if语句的某个地方也有涉及,需要定义变量来建立范围?

不胜感激。

谢谢!

【问题讨论】:

  • 您可以使用工作表公式执行此操作。 D2=IF(B2="YES",A2,"")。否则它是一个相对简单的宏,但在使用不懂的代码之前,您应该了解基本控制结构的工作原理。
  • 是的,我知道这是一个老问题,但@cheezsteak 给出的公式并没有完全达到 OP 的预期结果。我相信这个应该做的,从 D2 抄下来的,当然:=IFERROR(OFFSET(A$1,IF(OFFSET(C2,-1,0)=$C$1,1,MATCH(OFFSET(C2,-1,0),A:A,0))-1+MATCH("Yes",OFFSET(B$1,IF(OFFSET(C2,-1,0)=$C$1,1,MATCH(OFFSET(C2,-1,0),A:A,0)),0,COUNTA(A:A)),0),0,1),"")

标签: excel vba if-statement for-loop vlookup


【解决方案1】:

试试这个:

Sub FoodPicker()
    Dim N As Long, i As Long, j As Long
    N = Cells(Rows.Count, "A").End(xlUp).Row
    j = 2
    For i = 2 To N
        If Cells(i, "B").Value = "Yes" Then
            Cells(j, "C").Value = Cells(i, "A").Value
            j = j + 1
        End If
    Next i
End Sub

如果您愿意使用 1,2,3 而不是 yes,yes,yes,您可以避免使用宏。

【讨论】:

    【解决方案2】:

    假设您在第 1 行有标题:

    Sub SO()
    
    Dim i As Long
    
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If LCase(Cells(i, 2).Value) = "yes" Then Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Cells(i, 1).Value
    Next i
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      相关资源
      最近更新 更多