将所有具有特定值的单元格复制到另一列,跳过空格
我有三栏,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
要避免空单元格
- 在
C1
,写下=IF(AND(LEN(A1>0),B1="YES"),A1,NA()))
- select
column C
- 按F5
- 特殊 …检查
Formulas
,然后勾选错误 (请参阅图片) - 删除选定的单元格,在C列中留下所需名称的较短列表