- Код: Выделить всё
 If Not Range("A1:D20").Find(Empty, lookin:=xlValues) is Nothing Then
К сожалению, похоже, только теоретически. Не пошло, ни с Not, ни без него.
Ну а со SpecialCells - лишние телодвижения с фоматированием, как я понимаю

If Not Range("A1:D20").Find(Empty, lookin:=xlValues) is Nothing Then
Public Sub Nechto() 
a = 1 
With ActiveWorkbook.ActiveSheet 
    Do While IsEmpty(.Cells(a, 2)) = False 
        For b = 3 To 10 
            If IsEmpty(.Cells(a, b)) = False Then 
                Exit For 
            End If 
        If b = 10 Then Cells(a, 1).Value = .Cells(a, 2).Value 
        Next b 
    a = a + 1 
    Loop 
End With 
End Sub
bi-lya писал(а):KL, уважаемый, так все-таки тогда насчет
- Код: Выделить всё
 Public Sub Nechto()
a = 1
With ActiveWorkbook.ActiveSheet
Do While IsEmpty(.Cells(a, 2)) = False
For b = 3 To 10
If IsEmpty(.Cells(a, b)) = False Then
Exit For
End If
If b = 10 Then Cells(a, 1).Value = .Cells(a, 2).Value
Next b
a = a + 1
Loop
End With
End Sub
какие мысли? Какой вариант из предложенных мной и г-ном Чудовище под кроватью лучше? Рецензируйте, пожалуйста, с позиций верно понятой задачи! Или есть еще варианты?
Range(Cells(7,2),Cells(ActiveWorksheet.UsedRange.Rows.Count,2)).SpecialCells(xlCellTypeBlanks)bi-lya писал(а):Чудовище под кроватью
- Код: Выделить всё
 If Not Range("A1:D20").Find(Empty, lookin:=xlValues) is Nothing Then
К сожалению, похоже, только теоретически. Не пошло, ни с Not, ни без него.
Ну а со SpecialCells - лишние телодвижения с фоматированием, как я понимаю
If Not [A:A].Find("", [A7], xlValues) is Nothing Thenbi-lya писал(а):KL, уважаемый, так все-таки тогда насчет
- Код: Выделить всё
 Public Sub Nechto()
a = 1
With ActiveWorkbook.ActiveSheet
Do While IsEmpty(.Cells(a, 2)) = False
For b = 3 To 10
If IsEmpty(.Cells(a, b)) = False Then
Exit For
End If
If b = 10 Then Cells(a, 1).Value = .Cells(a, 2).Value
Next b
a = a + 1
Loop
End With
End Sub
какие мысли? Какой вариант из предложенных мной и г-ном Чудовище под кроватью лучше? Рецензируйте, пожалуйста, с позиций верно понятой задачи! Или есть еще варианты?
Public Sub Nechto()
    Dim c As Range
    Application.ScreenUpdating = False
    With ActiveSheet
        For Each c In .Range(.[B7], .[B7].End(xlDown))
            If Application.CountA(c.Offset(, 1).Resize(, 7)) = 0 Then _
                c.Offset(, -1) = c
        Next c
    End With
    Application.ScreenUpdating = True
End Sub

Public Sub Nechto() 
    Dim c As Range 
    Application.ScreenUpdating = False 
    With ActiveSheet 
        For Each c In .Range(.[B7], .[B7].End(xlDown)) 
            If Application.CountA(c.Offset(, 1).Resize(, 250)) = 0 Then _ 
                c.Offset(, -1) = c 
        Next c 
    End With 
    Application.ScreenUpdating = True 
End SubSub smpl()
    Dim Cell As Range
    Application.ScreenUpdating = False
    For Each Cell In Range(Cells(1, 1), Cells(Cells(1, 2).End(xlDown).Row, 1))
        With Cell
            If Not (IsEmpty(.Offset(0, 1))) And WorksheetFunction.CountA _
               (Range(.Offset(0, 2), .Offset(0, 250))) = 0 Then Cell = .Offset(0, 1)
        End With
    Next Cell
    Application.ScreenUpdating = True
End SubPublic Sub Nechto1()
Application.ScreenUpdating = False
a = 1
b = 3
With ActiveWorkbook.ActiveSheet
    Do While IsEmpty(.Cells(a, 2).Value) = False
        Do While IsEmpty(.Cells(a, b).Value) = True
             b = b + 1
            If b = 255 Then
                .Cells(a, 1).Value = .Cells(a, 2).Value
                Exit Do
            End If
        Loop
        b = 3
        a = a + 1
        If a = 65537 Then Exit Do
    Loop
End With
Application.ScreenUpdating = True
End Sub
bi-lya писал(а):Как обещал - результаты тестов.
Public Sub Nechto()
    Dim c As Range
    Application.ScreenUpdating = False
    With ActiveSheet
        With .Range(.[B7], .[B7].End(xlDown)).Offset(, -1)
            .Value = "=IF(AND(RC[1]<>"""",COUNTA(RC[2]:RC[251])=0),RC[1],"""")"
            .Value = .Value
        End With
    End With
    Application.ScreenUpdating = True
End Sub
      7 columns      254 columns
FRM_KL      0.328125      не дождался
FRM_Beast   0.375000      не дождался
VBA_KL      2.250000      2.265625
VBA_Beast   2.296800      2.296875
VBA_bi_lya   6.562625      64.32813Sub VBA_KL()
    Dim c As Range
    t = Timer
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    With ActiveSheet
        For Each c In .Range(.[B7], .[B7].End(xlDown))
            If Application.CountA(c.Offset(, 1).Resize(, 254)) = 0 Then _
                c.Offset(, -1) = c
        Next c
    End With
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox Timer - t
End Sub
Sub VBA_bi_lya()
    t = Timer
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    a = 7
    b = 3
    With ActiveWorkbook.ActiveSheet
        Do While IsEmpty(.Cells(a, 2).Value) = False
            Do While IsEmpty(.Cells(a, b).Value) = True
                b = b + 1
                If b = 256 Then
                    .Cells(a, 1).Value = .Cells(a, 2).Value
                    Exit Do
                End If
            Loop
            b = 3
            a = a + 1
            If a = 65537 Then Exit Do
        Loop
    End With
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox Timer - t
End Sub
Sub VBA_Beast()
    Dim Cell As Range
    t = Timer
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    For Each Cell In Range(Cells(7, 1), Cells(Cells(7, 2).End(xlDown).Row, 1))
        With Cell
            If Not (IsEmpty(.Offset(0, 1))) And WorksheetFunction.CountA _
               (Range(.Offset(0, 2), .Offset(0, 255))) = 0 Then Cell = .Offset(0, 1)
        End With
    Next Cell
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox Timer - t
End Sub
Sub FRM_KL()
    Dim c As Range
    t = Timer
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    With ActiveSheet
        With .Range(.[B7], .[B7].End(xlDown)).Offset(, -1)
            .Value = "=IF(AND(RC[1]<>"""",COUNTA(RC[2]:RC[255])=0),RC[1],"""")"
            .Value = .Value
        End With
    End With
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox Timer - t
End Sub
Sub FRM_Beast()
    t = Timer
    Application.ScreenUpdating = False
    'Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Cells(7, 1).FormulaR1C1 = "=IF(AND(NOT(ISBLANK(RC[1])),COUNTA(RC[2]:RC[255])=0),RC[1],"""")"
    With Range(Cells(7, 1), Cells(Cells(7, 2).End(xlDown).Row, 1))
        .FillDown
        '.Calculate
        .Value = .Value
    End With
    'Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox Timer - t
End Subbi-lya писал(а):...И, если не затруднит, - каким образом идем вниз по строкам? (пользую 11 офис, SP1)
bi-lya писал(а):...Я смотрю, наш собеседник предлагал нечто подобное (см. 5 ответ) "...=ЕСЛИ(И(НЕ(ЕПУСТО(B1));СЧЁТЗ(C1:I1)=0);B1;"")..."?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4