![](/img/trans.png)
[英]Excel VBA copy row to another sheets last row if cell in column A is red
[英]Copy last 3 char of text in one column to another column if cell is blank in excel spreadsheet with vba
If cell in Range("H1:H104000") is "" Then
Range("H1:H104000) = LEFT(Range("D1:D104000), 3
End If
这是我尝试但没有成功的代码。
你错过了循环。 您需要编写循环来遍历单元格集合,即使将单个范围与范围集合进行比较,代码也无法隐式执行此操作。
此外,要比较值,请使用=
。 Is
运算符仅用于对象。
Dim Cell As Range
For Each Cell In Range("H1:H104000").Cells
If Cell.Value = "" Then
Cell.Value = Right(Cell.Offset(0, -4).Value, 3)
End If
Next
一旦您遍历 H 列。引用“当前行中的 D 列”的一种简单方法是使用Offset
,它将返回一个相对于给定起始位置的单元格。 在这种情况下,我们只需要向左移动 4 列,所以我这样做.Offset(0,-4)
你可能会考虑
data
和data
写回引用的列H
而不是循环遍历给定的范围; 这种方法只持续几分之一秒,而通过 VBA 循环遍历每个单元格需要几秒钟:Option Explicit ' head of code module
Sub ExampleCall()
Dim t As Double: t = Timer ' start timer
Dim ws As Worksheet
Set ws = Sheet1 ' << change to your project's sheet Code(Name)
Dim data As Variant ' provide for a 1-based 2-dim datafield array
'assign worksheet related evaluation to data
data = ws.Evaluate("=If(IsBlank(H2:H104000),Right(D2:D104000,3),H2:H104000)")
'write to target
ws.Range("H2").Resize(UBound(data), 1).Value = data
Debug.Print Format(Timer - t, "0.00 secs") ' 0.20 secs
End Sub
此外,注意一个工作表相关的评价通过ws.Evaluate(...)
保证了完全合格的范围内引用,而Evaluate(...)
将需要更详细的适应症像Sheet1!H2:H104000
或进一步文本插入ws.Range("H2:H104000").Address(External:=True)
到公式字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.