我有三列,A,B和C: A列包含名称,NAME1,NAME2等。 B列仅包含值“YES”或“NO”。 C列假设包含A列中名称在B列中具有值“YES”的名称。
我可以说,只要列B中的值为“是”,将值从列A复制到列C.非常简单:
C1=IF(B1="YES",A1,"")
但这将包括空白单元格,我不想这样做。所以我想我正在寻找一种方法来复制A列中的所有名称,在B列中使用值“YES”,并将它们粘贴到C列中,跳过空白。
我确实找到了一个VBA项目,它使列中的所有单元格都具有一定的颜色。我不知道如何将其编辑成我需要的东西。这是我到目前为止提出的代码。
问题 1) 运行时错误'1004'应用程序定义或对象定义的错误 2) 从A列复制 3) 检查并删除NewRange中的重复项
编辑1:在代码中添加了注释行 编辑2:使用Offset从A列更改NewRange(由于运行时错误而未经测试) 编辑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的解决方案:
C列包含如下公式:
=COUNTIF(B$1:B1;"yes")
如果此行在列B中具有“是”值,则增加列C中的数字 该值将在下一步中使用。
D列包含如下公式:
=INDEX(A:A;MATCH(ROW();C:C;0))
从中获取价值: 表:整个A行 行号:由匹配函数计算:在整个C列中查找行号的第一次出现(我们将值放置的行号)。 0 meens,我们正在寻找这个数字不是最关键的。
跳过错误:
=IF(ISERROR(MATCH(ROW();C:C;0));"";INDEX(A:A;MATCH(ROW();C:C;0)))
更容易写:
=IFERROR(INDEX(A:A;MATCH(ROW();C:C;0));"")
这意味着:如果此值不是错误,则从规则写入值;如果规则是错误,则写入空字符串
只是在你的And
上使用If
condition来避免空单元格
C1
,然后复制下来=IF(AND(LEN(A1>0),B1="YES"),A1,NA()))
column C
按F5
特别...检查Formulas
然后勾选错误(见图)
删除选定的单元格,在C列中为您提供所需名称的较短列表