- Код: Выделить всё
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 Then
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
какие мысли? Какой вариант из предложенных мной и г-ном Чудовище под кроватью лучше? Рецензируйте, пожалуйста, с позиций верно понятой задачи! Или есть еще варианты?
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 Sub
Sub 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 Sub
Public 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.32813
Sub 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 Sub
bi-lya писал(а):...И, если не затруднит, - каким образом идем вниз по строкам? (пользую 11 офис, SP1)
bi-lya писал(а):...Я смотрю, наш собеседник предлагал нечто подобное (см. 5 ответ) "...=ЕСЛИ(И(НЕ(ЕПУСТО(B1));СЧЁТЗ(C1:I1)=0);B1;"")..."?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94