gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:28:27 25 4
gpt4 key购买 nike

我有三列,A、B 和 C:
A 列包含名称、NAME1、NAME2 等。
B 列仅包含值“YES”或“NO”。
假设 C 列包含 A 列中的名称,这些名称在 B 列中具有值“YES”。

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

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

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

我确实找到了一个 VBA 项目,它使用特定值对列中的所有单元格进行着色。我不知道如何将其编辑为我需要的内容。这是我到目前为止想出的代码。

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

编辑1:在代码中添加注释行
编辑2:将 NewRange 更改为从 A 列偏移(由于运行时错误而未测试)
编辑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

最佳答案

没有 VBA 的解决方案:

C 列包含如下公式:

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

如果该行在 B 列中具有"is"值,则增加 C 列中的数字。
该值将在下一步中使用。

D 列包含如下公式:

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

获取值(value):
表:整个A行
行号:通过匹配函数计算:查找整个 C 列中第一次出现的行号(我们将放置值的行号)。 0 意味着我们正在寻找这个数字,而不是最接近的数字。

跳过错误:

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

可以写得更容易:

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

这意味着:如果该值不是错误,则写入规则中的值;如果规则有错误,则写入空字符串

关于excel - 将具有特定值的所有单元格复制到另一列中,跳过空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13470007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com