Поиск и объединение данных

Используя приведенный ниже код, который имеет 2 условия для поиска данных, а затем объединения нескольких результатов на основе условий.

Проблема заключается в том, что отображаются все данные, а не только отфильтрованные данные, когда конкретная ячейка $K$2 не пуста, в обоих случаях все данные отображаются по коду. На данный момент неясно, где код испытывает трудности и почему он не работает должным образом.

Первое условие — показать все данные, если конкретная ячейка $K$2 пуста. Во-вторых, если конкретная ячейка $K$2 не пуста, отобразите отфильтрованные данные на основе этого значения.

=@IF(G7 = "", "", Merged_Lookup_Concat(G7, Table1[Date and time], $K$2, Table1[Title], Table1[Time and Title]))

...

Function Merged_Lookup_Concat(SearchDate As String, _
                               SDate As Range, SearchValue As String, _
                               SValue As Range, ReturnCol As Range, Optional K2Value As String) As String
    Dim i As Long
    Dim result As String
    Dim j As Integer
    j = 0

    If K2Value <> "" Then
 For i = 1 To SDate.Cells.CountLarge
    Debug.Print "SearchValue: " & SearchValue
    Debug.Print "SValue: " & SValue.Cells(i).value
    If Int(SDate.Cells(i).value) = SearchDate Then
        If SValue.Cells(i).value = SearchValue Or SValue.Cells(i).value = "" Then
            If j >= 5 Then
                result = result & "...more..."
                Exit For
            End If
            result = result & Left(ReturnCol.Cells(i).value, 25) & vbNewLine
            j = j + 1
        End If
    End If
Next i
    Else
        For i = 1 To SDate.Cells.CountLarge
            If Int(SDate.Cells(i)) = SearchDate Then
                If j >= 5 Then
                    result = result & "...more..."
                    Exit For
                End If
                result = result & Left(ReturnCol.Cells(i), 25) & vbNewLine
                j = j + 1
            End If
        Next i
    End If

    Merged_Lookup_Concat = Trim(result)
End Function
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
134
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

  • Сравнение дат изменений в условии If

  • Примечание. В вашем посте не указана цель Optional K2Value. Итак, два раздела в If K2Value <> "" Then [section 1] Else [section 2] одинаковы.

Function Merged_Lookup_Concat(SearchDate As String, SDate As Range, SearchValue As String, SValue As Range, ReturnCol As Range, Optional K2Value As String) As String
    Dim i As Long
    Dim result As String
    Dim j As Integer
    j = 0
    If K2Value <> "" Then
        For i = 1 To SDate.Cells.CountLarge
            Debug.Print "SearchValue: " & SearchValue
            Debug.Print "SValue: " & SValue.Cells(i).Value
            If CLng(SDate.Cells(i)) = CLng(CDate(SearchDate)) Then
                If Len(SearchValue) = 0 Or SValue.Cells(i) = SearchValue Then
                    If j >= 5 Then
                        result = result & "...more..."
                        Exit For
                    End If
                    result = result & Left(ReturnCol.Cells(i).Value, 25) & vbNewLine
                    j = j + 1
                End If
            End If
        Next i
    Else
        For i = 1 To SDate.Cells.CountLarge
            If CLng(SDate.Cells(i)) = CLng(CDate(SearchDate)) Then
                If Len(SearchValue) = 0 Or SValue.Cells(i) = SearchValue Then
                    If j >= 5 Then
                        result = result & "...more..."
                        Exit For
                    End If
                    result = result & Left(ReturnCol.Cells(i), 25) & vbNewLine
                    j = j + 1
                End If
            End If
        Next i
    End If
    Merged_Lookup_Concat = Trim(result)
End Function

Привет @taller, спасибо за публикацию ответа. Теперь в обоих случаях результат пуст, я думаю, это потому, что K2value что на самом деле SearchValue As String

HSHO 25.02.2024 06:02

Я не думаю, что K2value используется в вашей формуле. Merged_Lookup_Concat(G7, Table1[Date and time], $K$2, Table1[Title], Table1[Time and Title])

taller 25.02.2024 06:13

Я извиняюсь за поздний ответ. Я хотел уточнить, что в коде строка If K2Value <> "" then` указывает, что для выполнения условия должно присутствовать значение. В этом сценарии ячейка $K$2 определяет, должно ли присутствовать значение или ячейку следует оставить пустой, чтобы запустить код для обоих условий. Я хочу сказать, что ячейка $K$2 должна иметь такое состояние, как If $K$2 <> "" вместо K2Value .

HSHO 27.02.2024 13:36

Необязательные аргументы должны иметь значение по умолчанию:

Function Merged_Lookup_Concat(SearchDate As String, _
                               SDate As Range, SearchValue As String, _
                               SValue As Range, ReturnCol As Range, Optional K2Value As String = "") As String

Если нет, вам нужно проверить IsMissing на наличие аргумента, например:

 If IsMissing(K2Value) Then

Это не сработает — IsMissing не работает для простых типов данных, только для вариантов. См. Learn.microsoft.com/en-us/office/vba/language/reference/…. Вместо этого вы можете проверить If K2Value = "" Then — это будет работать, даже если нет значения по умолчанию, поскольку пустая строка является значением по умолчанию для строк в VBA. Но, конечно, лучше всего явно указать значение по умолчанию.

FunThomas 01.03.2024 10:07

UUps - надо сначала протестировать, прежде чем писать. Поэтому раньше я не делал необязательного без значения по умолчанию из .net, поэтому я помнил только IsMissing, но не вариант :-( Спасибо за исправление.

Red Hare 01.03.2024 18:38
Ответ принят как подходящий

В представленном виде используемая формула не включает значение необязательного параметра K2Value. В определении функции 6 параметров, а в вызове функции только 5 параметров:

=@IF(G7="", "", Merged_Lookup_Concat(G7, Таблица1[Дата и время], $K$2, Таблица1[Название], Таблица1[Время и заголовок]))

Функция Merged_Lookup_Concat (SearchDate As String, _ SDate как диапазон, SearchValue как строка, _ SValue как диапазон, ReturnCol как диапазон, необязательно K2Value как строка) как строка

Необязательный параметр K2Value не включается в вызов функции, поэтому он всегда будет содержать значение по умолчанию — нулевую строку. Затем, поскольку параметр K2Value всегда равен «», независимо от того, что находится в ячейке K2, первая половина функции никогда не используется, а только вторая половина, которая фильтрует только дату поиска и игнорирует значение поиска.

Значение ячейки К2 передается в параметр SearchValue, поэтому именно этот параметр необходимо проверить, чтобы определить, есть ли значение в К2.

Я думаю, что строка:

If K2Value <> "" Then

просто нужно заменить на

If SearchValue <> "" Then

И нет необходимости в дополнительном параметре K2Value в определении функции.

Другие вопросы по теме