У меня есть следующий код VBA.Я хочу сделать расчет, но это можно сделать только в том случае, если соблюдаются инструкции IF.Это означает, что даты в 5 разных листах должны быть одинаковыми в одной ячейке, а имена клиентов должны совпадать в другой.Даты и имена по-разному отображаются на листах.Если бы я использовал первый код, тогда код работает.НО первые две строки, используемые в коде оператора if, находят не правильное значение, потому что их отображение / отображение не совпадают на разных используемых листах.Поэтому я думаю, что необходимо использовать функцию поиска, чтобы найти правильное значение, необходимое для расчета.Код, использующий функцию поиска, показан во втором предоставленном макросе. Когда я пытаюсь запустить этот код, я получаю сообщение об ошибке 91. Поэтому предположим, что что-то не так с функциями поиска, которые я сделал, но я не могу найти ошибку, которую сделал.Кто-нибудь знает, что происходит во втором коде?
Option Explicit
Sub DoSomething1()
'Declare Variables
Dim i As Long, r As Long, c As Long
Dim count as Double, lastColData as Double, LastRowData as Double, lastRowInput as Double, StartSearch2 As Double
Dim shtData As Worksheet, shtInput As Worksheet, shtInputI As Worksheet, shtInputII As Worksheet, shtInputIII As Worksheet, shtInputIV As Worksheet, shtInputV As Worksheet, shtInputVI As Worksheet, shtCopy As Worksheet
Set shtData = Sheets("Data")
Set shtInput = Sheets("INPUT")
Set shtInputI = Sheets("INPUTP")
Set shtInputII = Sheets("INPUTR")
Set shtInputIII = Sheets("INPUTF")
Set shtInputIV = Sheets("INPUTQ")
Set shtInputV = Sheets("INPUTPF")
LastColData = shtData.Cells(4, shtData.Columns.count).End(xlToLeft).Column
LastRowData = shtData.Cells(shtData.Rows.count, "A").End(xlUp).row
LastRowInput = shtInput.Cells(shtInput.Rows.count, "A").End(xlUp).row
'Search starting from which row?
StartSearch2 = InputBox("Vanaf welke rij wil je zoeken?", "Start", Default:=6)
'Loop Code
For r = StartSearch2 To LastRowData
For c = 2 To LastColData
count = 0
For i = 2 To LastRowInput
If shtInput.Cells(i,10).Value = shtData.Cells(r,1).Value And _
shtInputI.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputIV.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputIII.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputII.Cells(r, 1).Value = shtData.Cells(r, 1).Value Then 'Dates are equal in different sheets
If shtInput.Cells(i,32).Value = shtData.Cells(4,c).Value And _
shtInputI.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIII.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputII.Cells(4, c).Value = shtData.Cells(4, c).Value Then 'Names are equal in different sheets
count = count + (shtInputI.Cells(r, c).Value + shtInputII.Cells(r, c)) * shtInputV.Cells(5, c).Value * shtInputIV.Cells(r, c).Value * shtInputIII.Cells(r, c).Value
End If
End If
Next i
shtData.Cells(r, c).Value = count
Next c
Next r
End Sub
Option Explicit
Sub DoSomething2()
'Declare Variables
Dim i As Long, r As Long, c As Long
Dim count as Double, lastColData as Double, LastRowData as Double, lastRowInput as Double, StartSearch2 As Double
Dim shtData As Worksheet, shtInput As Worksheet, shtInputI As Worksheet, shtInputII As Worksheet, shtInputIII As Worksheet, shtInputIV As Worksheet, shtInputV As Worksheet, shtInputVI As Worksheet, shtCopy As Worksheet
Set shtData = Sheets("Data")
Set shtInput = Sheets("INPUT")
Set shtInputI = Sheets("INPUTP")
Set shtInputII = Sheets("INPUTR")
Set shtInputIII = Sheets("INPUTF")
Set shtInputIV = Sheets("INPUTQ")
Set shtInputV = Sheets("INPUTPF")
LastColData = shtData.Cells(4, shtData.Columns.count).End(xlToLeft).Column
LastRowData = shtData.Cells(shtData.Rows.count, "A").End(xlUp).row
LastRowInput = shtInput.Cells(shtInput.Rows.count, "A").End(xlUp).row
'Search starting from which row?
StartSearch2 = InputBox("Vanaf welke rij wil je zoeken?", "Start", Default:=6)
'Loop Code
For r = StartSearch2 To LastRowData
For c = 2 To LastColData
count = 0
For i = 2 To LastRowInput
If shtInput.Cells.Find(What:=shtInput.Cells(i, 10).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(r, 1).Value And _
shtInputI.Cells.Find(What:=shtInputI.Cells(r, 1).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(r, 1).Value And _
shtInputIV.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputIII.Cells(r, 1).Value = shtData.Cells(r, 1).Value And _
shtInputII.Cells(r, 1).Value = shtData.Cells(r, 1).Value Then
If shtInput.Cells.Find(What:=shtInput.Cells(i, 32).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) = shtData.Cells(4, c).Value And _
shtInputI.Cells.Find(What:=shtInputI.Cells(4, c).Value, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext) = shtData.Cells(4, c).Value And ?
shtInputV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIV.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputIII.Cells(4, c).Value = shtData.Cells(4, c).Value And _
shtInputII.Cells(4, c).Value = shtData.Cells(4, c).Value Then
count = count + (shtInputI.Cells(r, c).Value + shtInputII.Cells(r, c)) * shtInputV.Cells(5, c).Value * shtInputIV.Cells(r, c).Value * shtInputIII.Cells(r, c).Value
End If
End If
Next i
shtData.Cells(r, c).Value = count
Next c
Next r
End Sub