Я не знаю, как это объяснить лучше, но я извлекаю отчет в формате xls, в котором записывается предложение от компаний во время торгов. Отчет содержит три поля:
Значение / Компания / Время
Я хочу извлечь первое предложение от компании, но я столкнулся со следующей проблемой: В отчете не учитываются дни только время, поэтому, если компания отправит мне предложение в 2019-01-28 в 22:00 и после этого отправит мне еще одно предложение в 2019-01-29 в 21:00, в моем отчете сначала появится второе предложение.
Я делал это вручную, потому что в этом случае невозможно использовать vlookup.
Я тоже пытался с VBA, что-то вроде этого Чтобы определить диапазон, в котором находятся данные:
tableRowi = tableI.Row 'Linha de início da Tabela de Lances
Set tableF = Range("A1:Z1000").Find(What:="Relatório de Chat do Leilão", LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False)
Set tableF2 = Range("A1:Z1000").Find(What:="Usuários Conectados ao Monitor do Leilão", LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False)
If tableF Is Nothing Then
tableRowF = tableF2.Row
Else
tableRowF = tableF.Row
End If
и это, чтобы скопировать данные, которые я хочу:
Set propI = Range("A" & tableRowi - 2 & ":Z1000").Find(What:="Valor", LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 'Início da tabela de classificação
propCol = propI.Column 'Coluna com valores das propostas
Set empI = Range("A" & tableRowi - 2 & ":Z1000").Find(What:="Empresa", LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 'Início da tabela de classificação
empCol = empI.Column 'Coluna com nomes das empresas que deram lances
'Copiando os dados
Dim arrayLance() As Variant
ReDim arrayLance(0 To nEmpresas - 1) 'Propostas iniciais
For i = 0 To nEmpresas - 1
'Set Emp = Range("A1:Z1000").Find(What:=arrayEmp(i), LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 'Início da tabela de classificação
arrayLance(i) = WorksheetFunction.Index(Range("A1:Z1000"), tableRowi - 1 + WorksheetFunction.Match(arrayEmp(i), Range(Cells(tableRowi, empCol), Cells(tableRowF, empCol)), 0), propCol)
Next i
В этом коде я устанавливаю столбцы, в которых находятся данные, и копирую их, используя массивы, но снова я сталкиваюсь с той же проблемой, что и захват кода первая информация (ценность) от Компании, которая не обязательно является вашим первым предложением.
Я подумал использовать все oop, но я не могу структурировать это в своем уме.