macros观公式的变化
我有一个Excel文件,如下所示:
我想使它看起来像这样:
我使用的代码是:
Sub FindString() Dim A As Range, r As Range, last As Range Set A = Intersect(ActiveSheet.UsedRange, Range("A:A")) For Each r In A If IsNumeric(Left(r, 6)) Then Set last = r If Not last Is Nothing Then last.Copy r.Offset(0, 1) Next r End Sub
它的工作原理,但如果行超过50,000将挂起Excel。 所以我在这个网站上find了一些帮助,并改为:
Sub Demo() Dim r As Range With ActiveSheet Set r = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With r.Offset(0, 1).Formula = "=IF(ISNUMBER(VALUE(LEFT(A4,6))),A4,B3)" r.Offset(0, 1) = r.Offset(0, 1).Value End Sub
现在的麻烦是我不明白这一点:
"=IF(ISNUMBER(VALUE(LEFT(A4,6))),A4,B3)"
在公式中正在做,如果在我现有的公式,如果我改变,如果条件:
If IsNumeric(Left(r, 6)) And 0 = InStr(r, "Totals:")
我怎样才能改变相似的子DEMO()?
如果你想更快的速度,使用这样的东西,而不是你张贴的演示代码。 这个代码也更灵活。 唯一的
Sub Demo2() Application.ScreenUpdating = False Dim A() As Variant A = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value2 Dim B() As Variant ReDim B(1 To UBound(A), 1 To 1) Dim ID As String For i = 1 To UBound(A) If IsNumeric(Left(A(i, 1), 1)) Then ID = A(i, 1) 'If you want to use a dynamic equation, use the below line instead 'ID = "=A" & i End If B(i, 1) = ID Next Range("B1:B" & UBound(B)) = B End Sub
=IF(ISNUMBER(VALUE(LEFT(A4,6))),A4,B3)
正在检查列A中的单元格。如果此单元格以四个数字开始,则返回A4
的值,否则,重复上面的细胞。
你能澄清第二个问题吗? If IsNumeric(Left(r, 6))
在Excel中If IsNumeric(Left(r, 6))
与VBA中的公式相同。 第二部分( 0 = InStr...
)正在检查单元格内是否有“总计:”。 如果不是 ,则继续使用if语句(如果您的单元格确实有“Totals:”,那么将返回1
,并且If
语句将不会继续)。