将所有具有特定值的单元格复制到另一列,跳过空格

我有三栏,A,B和C:
A列包含名称,NAME1,NAME2等
B列仅包含值“是”或“否”。
列C假设包含列B中名称为“是”的列B中的名称。

我可以说,只要列B中的值为“是”,就将A列中的值复制到C列。非常简单:

C1=IF(B1="YES",A1,"") 

但是,这将包括我不想要的空白单元格。 所以我想我正在寻找一种方法来复制列B中的值为“是”的所有名称,并将它们粘贴到列C跳过空白。

我find了一个VBA项目,用一定的颜色为一列中的所有单元格着色。 我不知道如何编辑这个到我所需要的。 这是我到目前为止的代码。

问题
1) 运行时错误“1004”应用程序定义或对象定义的错误
2) 从列A复制
3) 检查并删除NewRange中的重复项

编辑1 :添加评论行到代码中
编辑2 :更改NewRange由A列与偏移(由于运行时错误未经testing)
编辑3 :复制代码从表格分离代码粘贴到另一个工作表
编辑4 :从用户@abahgat添加更正
编辑5 :删除重复

 Sub RangeCopyPaste() Dim cell As Range Dim NewRange As Range Dim MyCount As Long MyCount = 1 '--> Loop through each cell in column B '--> Add each cell in column A with value "YES" in column B to NewRange For Each cell In Worksheets("Sheet1").Range("B1:B30") If cell.Value = "YES" Then If MyCount = 1 Then Set NewRange = cell.Offset(0,-1) Set NewRange = Application.Union(NewRange, cell.Offset(0,-1)) MyCount = MyCount + 1 End If Next cell '--> Copy NewRange from inactive sheet into active sheet NewRange.Copy Destination:=activesheet.Range("C1") '--> Remove Duplicates activesheet.Range("C1:C30").RemoveDuplicates End Sub 

这将做的伎俩:

 Sub RangeCopyPaste() Dim cell As Range Dim NewRange As Range Dim MyCount As Long MyCount = 1 For Each cell In Worksheets("Sheet1").Range("B1:B30") If cell.Value = "YES" Then If MyCount = 1 Then Set NewRange = cell.Offset(0,-1) Set NewRange = Application.Union(NewRange, cell.Offset(0,-1)) MyCount = MyCount + 1 End If Next cell NewRange.Copy Destination:=activesheet.Range("D1") End Sub 

没有VBA的解决scheme:

列C包含像这样的公式:

 =COUNTIF(B$1:B1;"yes") 

列D包含像这样的公式:

 =INDEX(A:A;MATCH(ROW();C:C;0)) 

跳过错误:

 =IF(ISERROR(MATCH(ROW();C:C;0));"";INDEX(A:A;MATCH(ROW();C:C;0))) 

刚刚使用了一个And条件If要避免空单元格

  1. C1 ,写下=IF(AND(LEN(A1>0),B1="YES"),A1,NA()))
  2. selectcolumn C
    • 按F5
    • 特殊 …检查Formulas ,然后勾选错误 (请参阅图片)
    • 删除选定的单元格,在C列中留下所需名称的较短列表

在这里输入图像说明