我有三列,A,B和C:
列A包含名称,NAME1,NAME2等.
列B仅包含值"是"或"否".
C列假设包含A列中名称在B列中具有值"YES"的名称.
我可以说,只要列B中的值为"是",将值从列A复制到列C.非常简单:
C1=IF(B1="YES",A1,"")
Run Code Online (Sandbox Code Playgroud)
但这将包括空白单元格,我不想这样做.所以我想我正在寻找一种方法来复制A列中的所有名称,在B列中使用值"YES",并将它们粘贴到C列中,跳过空白.
我确实找到了一个VBA项目,它使列中的所有单元格都具有一定的颜色.我不知道如何将其编辑成我需要的东西.这是我到目前为止提出的代码.
问题
1)运行时错误'1004'应用程序定义或对象定义错误
2)从A列复制
3)检查并删除NewRange中的重复项
编辑1:在代码中添加注释行
编辑2:使用偏移更改要从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 …Run Code Online (Sandbox Code Playgroud) 我正在编写代码,因此你可以在字母表中的两个位置移动文本:'ab cd'应该变为'cd ef'.我正在使用Python 2,这是我到目前为止所得到的:
def shifttext(shift):
input=raw_input('Input text here: ')
data = list(input)
for i in data:
data[i] = chr((ord(i) + shift) % 26)
output = ''.join(data)
return output
shifttext(3)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
File "level1.py", line 9, in <module>
shifttext(3)
File "level1.py", line 5, in shifttext
data[i] = chr((ord(i) + shift) % 26)
TypError: list indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)
所以我必须以某种方式将字母改为数字?但我以为我已经这样做了?
我有一个类似数据库的大表,第一行包含标题.我想根据列值来获取此表的行的子集.两个问题:
1)VBA-wise我想循环遍历列,当所有必需列的值都匹配时,将整行复制到新表中.
2)行的子集基于列表.我刚读过,我可以使用带有数组的Autofilter.是否可以从列中输入此数组而不是在VBA代码中手动输入?我使用的列表包含200个不同的字符串,并将定期更新.
CritList是字符串列表.我仍然需要弄清楚如何,但现在我离开办公室,明天更多.
EDIT1感谢@DougGlancy; 自动过滤现在有效.这是他漂亮的代码(我只添加了数组过滤器).
EDIT2包含一个更复杂的数组过滤器,其中NameList是我想要过滤的列表.现在一切正常!
Sub FilterAndCopy()
Dim LastRow As Long
Dim vName As Variant
Dim rngName As Range
Set rngName = Sheets("Sheet3").Range("NameList")
vName = rngName.Value
Sheets("Sheet2").UsedRange.Offset(0).ClearContents
With Worksheets("Sheet1")
.Range("A:E").AutoFilter
'Array filter from NameList
.Range("A:J").AutoFilter Field:=3, Criteria1:=Application.Transpose(vName), _
Operator:=xlFilterValues
.Range("A:E").AutoFilter field:=2, Criteria1:="=String1" _
, Operator:=xlOr, Criteria2:="=string2"
.Range("A:E").AutoFilter field:=3, Criteria1:=">0", _
.Range("A:E").AutoFilter field:=5, Criteria1:="Number"
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("A1:A" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _
Destination:=Sheets("Sheet2").Range("A1")
End With
End Sub
Run Code Online (Sandbox Code Playgroud)