如果在某个单元格中有“ - ”或“/”,我试图在同一张纸上复制一些单元格。
根据“ - ”或“/”的数量是它要复制的次数。 这是我的代码但不起作用,任何人都可以帮忙吗?
Sub TWB_Copy_columns()
'TWB_Copy_columns Macro
Dim celltxt As String
Range("B14").Select
Selection.End(xlToRight).Select
celltxt = Selection.Text
If InStr(1, celltxt, "-") Or InStr(1, celltxt, "/") Then
Range("BA5:BB36").Select
Selection.Copy
Range("BD5").Select
ActiveSheet.Paste
Range("BG5").Select
End If
End Sub
答案 0 :(得分:0)
这是重构和修复版本:
Sub TWB_Copy_columns()
'TWB_Copy_columns Macro
'Range("B14").Select
'Selection.End(xlToRight).Select
'celltxt = Selection.Text
' Use explicit references and avoid select. In this case, you will need to
' qualify the workbook and sheetname of the range you are using. We can then
' directly access the value of that range.
' Also, no need to declare a string just to hold onto the value. Directly use the value instead
With ThisWorkbook.Sheets("Sheetname")
If InStr(1, .Range("B14").End(xlToRight).value, "-") > 0 Or InStr(1, .Range("B14").End(xlToRight).value, "/") > 0 Then
.Range("BD5:BB36").value = .Range("BA5:BB36").value
End If
End With
End Sub
首先,始终避免Select
和Activate
。在这种情况下,我直接分配值而不是尝试复制,粘贴或选择。每当您看到Range("A5").Select; Selection.Value
时,您确实需要Range("A5").Value
。同样,永远不会有不合格的范围。 Range("A5")
与说ActiveSheet.Range("A5")
相同,如果错误的工作表处于活动状态,可能会使事情变得复杂。
最后,如果您实际上使用变量进行一次比较,请使用直接值。没有必要为一个任务创建变量(至少在我看来)。
编辑:
正如拉尔夫建议的那样,请考虑阅读这个帖子:How to avoid using Select in Excel VBA macros。一旦你学会避免Select
你的能力就会飙升。
答案 1 :(得分:0)
您似乎正在查看单元格内容的显示格式,以确定它是否为日期。有一个原生的VBA函数IsDate
可以在真实日期很好地做出这个决定。如果你的数据没有包含日期作为真实日期,那么它们应该是真实日期,这是另一个需要解决的问题。
with worksheets("sheet1")
if isdate(.cells(14, "B").end(xltoright)) then
.range("BA5:BB36").copy destination:=.range("BD5")
end if
end with
在我看来,如果BA5:BB36不是静态的,那么此代码只能重复使用,但您没有提供确定位置的指示。它可能是数据块中最后两列数据,但这只是猜测。
答案 2 :(得分:0)
这就是我认为您正在寻找的内容(对于每个“ - ”或“/”,复制Range("BD5")
并将其粘贴到Range("BG5")
,Sub TWB_Copy_columns()
'TWB_Copy_columns Macro
Dim celltxt As String
Dim vWords As Variant
Dim rFind As Range
Dim i As Long
celltxt = Range("B14").Value
celltxt = Replace(celltxt, "-", "/")
vWords = Split(celltxt, "/")
Range("BA5:BB36").Copy
Range("BD5").Activate
For i = 1 To UBound(vWords)
ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
ActiveCell.Offset(0, 2).Activate
Next
End Sub
- 留下空格你的专栏):
def median(lst):
s = sorted(lst)
l = len(lst)/2
if len(lst) % 2 == 0:
print((s[l] + s[l-1])/2.0)
else:
print(s[l])
median([3,3,5,6,7,8,1])