Mr.dupen, Доброго времени суток. Предлагаю вариант без использования формул. Следуйщий код внесите в модель листа
ЕдР, предварительно очистив все данные начиная с
3-ей строки!
Код |
---|
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, j As Long
On Error GoTo CleanFail
If Target.Cells.Count > 1 Then Exit Sub
Dim eventsDisabled As Boolean
eventsDisabled = False
If Not Intersect(Target, Range("B3:B100")) Is Nothing Then
Application.EnableEvents = False
eventsDisabled = True
Dim Search As Variant
Search = Target.Value
With Лист3
Dim iLast As Long
iLast = .Cells(.Rows.Count, "AD").End(xlUp).Row
Dim dataArr As Variant
dataArr = .Range("AD2:BA" & iLast).Value
Dim foundIndex As Long
foundIndex = 0
For i = 1 To UBound(dataArr, 1)
If dataArr(i, 1) = Search Then
foundIndex = i
Exit For
End If
Next i
If foundIndex > 0 Then
Me.Cells(Target.Row, 3).Value = dataArr(foundIndex, 2)
Me.Cells(Target.Row, 4).Value = dataArr(foundIndex, 9)
Me.Cells(Target.Row, 5).Value = dataArr(foundIndex, 10)
Dim fullText As String
fullText = Me.Cells(Target.Row, 5).Value
If Trim(fullText) <> "" Then
Dim spacePos As Long
spacePos = InStr(fullText, " ")
Dim resultValue As String
If spacePos > 0 Then
resultValue = Mid(fullText, 1, spacePos - 1)
Else
resultValue = "1"
End If
Else
resultValue = ""
End If
Me.Cells(Target.Row, 6).Value = resultValue
Me.Cells(Target.Row, 7).Value = dataArr(foundIndex, 13)
Me.Cells(Target.Row, 8).Value = dataArr(foundIndex, 16)
Me.Cells(Target.Row, 9).Value = dataArr(foundIndex, 19)
Else
For j = 2 To 9
Me.Cells(Target.Row, j).ClearContents
Next j
MsgBox "В базе нет такого номера! ", vbExclamation
End If
End With
Dim lastRow As Long
lastRow = ThisWorkbook.ActiveSheet.Cells(ThisWorkbook.ActiveSheet.Rows.Count, "B").End(xlUp).Row
With ThisWorkbook.ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add key:=ThisWorkbook.ActiveSheet.Range("I3:I" & lastRow), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
' .SortFields.Add key:=ThisWorkbook.ActiveSheet.Range("I3:I" & lastRow), _
' SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ThisWorkbook.ActiveSheet.Range("B3:I" & lastRow)
.Apply
End With
End If
CleanExit:
If eventsDisabled Then Application.EnableEvents = True
Exit Sub
CleanFail:
MsgBox "Произошла ошибка: " & Err.Description, vbCritical
Resume CleanExit
End Sub |
Теперь внесите любой номер в колонку
B, всё тоже самое проделайте что вы раньше делали, но уже без формул. При внесение данных данные сразу сортируют столбец
I Цитата |
---|
Mr.dupen написал: По столбцу с бабками |
по убыванию. Надеюсь помог вам. Удачи.