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

问题描述 投票:5回答:3

我有三列,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
excel excel-vba skip vba
3个回答
1
投票

这样就可以了:

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

6
投票

没有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));"")

这意味着:如果此值不是错误,则从规则写入值;如果规则是错误,则写入空字符串


2
投票

只是在你的And上使用Ifcondition来避免空单元格

  1. C1,然后复制下来=IF(AND(LEN(A1>0),B1="YES"),A1,NA()))
  2. 选择column C 按F5 特别...检查Formulas然后勾选错误(见图) 删除选定的单元格,在C列中为您提供所需名称的较短列表

© www.soinside.com 2019 - 2024. All rights reserved.