У меня есть значение в столбце A, которое я хочу сравнить с несколькими значениями в столбце B, и в зависимости от этого значения поместить ответ в столбец C.

Например, используя таблицу ниже, он ищет в столбце B значения, которые меньше или равны 12, и помещает ответ в том же порядке в столбце C.

Column A     Column B            Column C
12           0,12,13,14          Yes, Yes, No, No    
101          101,102,103,104     Yes, No, No, No

Как я могу сделать это в Excel?

3 ответа3

1

Это именно то, что вы хотите.

Option Explicit

Sub DoTheThing()

Dim row As Integer
row = 1 ' WHAT IS THE STARTING ROW

Do While (Range("A" & row).Value <> "")

    Dim vals() As String
    vals = Split(Range("B" & row).Value, ",")

    Dim lookUpValue As String
    lookUpValue = Range("A" & row).Value

    Dim result As String
    result = ""

    Dim i As Integer

    For i = 0 To UBound(vals)

        If CSng(lookUpValue) >= CSng(vals(i)) Then
            result = result & "Yes, "
        Else
            result = result & "No, "
        End If

    Next i

    result = Trim(result)
    result = Left(result, Len(result) - 1)

    Range("C" & row).Value = result

    row = row + 1
Loop

End Sub

Мой лист выглядел как

И после того, как я запускаю VBa

Excel продолжал форматировать столбцы как number . Это должно остаться как Text !

1

Я бы начал с того, что разбил бы проблему на несколько столбцов, каждый из которых содержал бы часть проблемы. Например:

     A  B                C  D   E    F   G    H    I   J    K    L   M   N
1   12  0,12,13,14       2  5   8    0   12   13   14  Yes  Yes  No  No  Yes, Yes, No, No
2  101  101,102,103,104  4  8  12  101  102  103  104  Yes  No   No  No  Yes, No, No, No

Это выражения для С1 по N1:

C1 =FIND(",",B1)               D1 =FIND(",",B1,C1+1)      E1 =FIND(",",B1,D1+1)
F1 =LEFT(B1,C1-1)+0            G1 =MID(B1,C1+1,D1-C1-1)+0
H1 =MID(B1,D1+1,E1-D1-1)+0     I1 =RIGHT(B1,LEN(B1)-E1)+0
J1 =IF(F1<=$A1,"Yes","No")     K1, L1, M1 (copy from J1)
N1 =J1&", "&K1&", "&L1&", "&M1

Если случай неочевиден, «+0» - это удобный способ принудительно ввести текстовое значение в число, чтобы сравнения в I, J, K и L выполнялись как числовые сравнения, а не как текст.

Для C2 через N2 скопируйте из C1 через N1.

Если вы не хотите использовать дополнительные столбцы, вы можете объединить результаты из многоколоночной версии в одно гигантское сложное выражение в одном столбце. Это проще сделать за несколько шагов. Например, первым шагом будет объединение выражений FIND со строковыми выражениями. Вот код для этого:

F =LEFT(B1,FIND(",",B1)-1)+0
G =MID(B1,FIND(",",B1)+1,FIND(",",B1,FIND(",",B1)+1)-FIND(",",B1)-1)+0
H =MID(B1,FIND(",",B1,FIND(",",B1)+1)+1,FIND(",",B1,FIND(",",B1,FIND(",",B1)+1)+1)-FIND(",",B1,FIND(",",B1)+1)-1)+0
I =RIGHT(B1,LEN(B1)-FIND(",",B1,FIND(",",B1,FIND(",",B1)+1)+1))+0

Это довольно отвратительно, потому что использование E использует D, которое использует C, и те, которые используются несколько раз G, H и I. Помещение всех промежуточных результатов в скрытые столбцы экономит много дублированных выражений.

Ситуация ухудшается, если вы хотите выйти за пределы четырех разделенных запятыми чисел в столбце B, но способ добавления столбцов должен быть довольно очевидным.

Разрешение B иметь переменное число чисел, разделенных запятыми, не так очевидно. Хитрость заключается в том, чтобы добавить некоторые операторы IF, проверяя наличие ошибок. Это поднимает один последний момент, что это не включает проверку ошибок, кроме того, что встроено в Excel. Надежная электронная таблица должна включать хотя бы некоторую проверку ошибок.

0

Я бы использовал Power Query Add-In для этого. Он имеет команды Split и Combine, которые могут преобразовывать текст с разделителями, например, 0,12,13,14 в список и обратно.

Я создал прототип, который вы можете просмотреть или загрузить - его демонстрацию Power Query - сравните одно значение в одной ячейке с несколькими значениями в другом cell.xlsx »в моем One Drive:

https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398

В этом файле я включил два решения - одно для сравнения с использованием "меньше или равно", а другое для сравнения с использованием логики "между".

Для этого требуется несколько шагов Query, а для некоторых шагов необходимо отредактировать сгенерированный код. Но для 90% шагов вы просто нажимаете в интерфейсе Power Query.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .