Перевірка даних в Excel - всі значення в списку, розділеному комами, в межах діапазону комірок


0

У мене є довідкова таблиця записок і деяка інформація про них, включаючи, які інші нагадування вони посилаються і на які посилаються. Я хочу створити правило перевірки даних, яке стане червоним, якщо будь-яке значення в списку посилань, обмежених комами, не міститься в моєму списку нагадувань (іншими словами, нам не вистачає інформації або користувач, можливо, зробив друкарські помилки). Будь-яка кількість інших приміток може бути посилається. Нотатки нагадувань для кожного запису містяться у стовпці А, посилання - у стовпці G. Рядок заголовків А, дані у наступних рядках, які слід регулярно додавати.

А ............ Г

LF100009 ....... 400 <- червоний

HS100011 .......

RT100012 ....... LF100009

LA100015 ....... LF100009, RT100012

ME100020 ....... HS100011, RT1000012, LA100015 <- червоний

KE100050 ....... LA100011, LA100015 <- червоний

фрагмент екрана робочої книги


Чи можете ви опублікувати зразок робочої книги? Ваш приклад вище, схоже, не узгоджується з вашим запитанням.
Кріс

вибачте, я не бачу, куди додати вкладення? @Chris
Лора

додано скріншот сторінки прикладу робочої книги, але з приводу конфіденційності це все-таки купа складених даних, просто відформатованих так, як я хочу, в потрібних місцях, з причинами, чому щось виділяється.
Лора

Умовне форматування чи перевірка даних?
Райстафаріан

умовне форматування фону в червоному кольорі, хоча, якщо перевірка даних може бути виконана, в той же час дозволяючи зробити декілька посилань на кожне нагадування, теж було б дивним. Я просто зрозумів, що це неможливо.
Лора

Відповіді:


1

Це зовсім не елегантно, але це може працювати до трьох посилань. Можна комбінувати з умовним форматуванням за потребою або помістити в помічник стовпця.

=IF(IF(IF(G2="",TRUE,LEN(G2)-LEN(SUBSTITUTE(G2,",",""))+1)=TRUE,1,
IF(IF(G2="",TRUE,LEN(G2)-LEN(SUBSTITUTE(G2,",",""))+1)=1,COUNTIF(A:A,G2),
IF(IF(G2="",TRUE,LEN(G2)-LEN(SUBSTITUTE(G2,",",""))+1)=2,SUMPRODUCT((COUNTIF(A:A,LEFT(G2,FIND(",",G2)-1)))*(COUNTIF(A:A,MID(G2,FIND(",",G2)+2,LEN(G2))))),
IF(IF(G2="",TRUE,LEN(G2)-LEN(SUBSTITUTE(G2,",",""))+1)=3,SUMPRODUCT((COUNTIF(A:A,LEFT(G2,FIND(",",G2)-1)))*(COUNTIF(A:A,MID(G2,FIND(",",G2)+2,LEN(G2)-FIND("@",SUBSTITUTE(G2,",","@",IF(G2="",TRUE,LEN(G2)-LEN(SUBSTITUTE(G2,",",""))+1)-1))-1)))*(COUNTIF(A:A,MID(G2,FIND("@",SUBSTITUTE(G2,",","@",IF(G2="",TRUE,LEN(G2)-LEN(SUBSTITUTE(G2,",",""))+1)-1))+2,LEN(G2))))),
FALSE
))))=1,TRUE)

Це працює поки що. Я б просто продовжував цю схему, якщо мені потрібно, щоб вона працювала для отримання додаткових посилань? Крім того, схоже, що частина цього виймає коми. Вони не потрібні, було б краще, якби їх не було? Крім того, я планував ефективно перейти на гіперпосилання як окремий стовпець, але про всяк випадок, якщо він працює, чи може ця формула спрацювати, якби примітки та / або посилання були гіперпосиланнями?
Лаура

Найкраще згадати підхід VBA, який згадується нижче, оскільки вищезазначену формулу буде надто складно змінити, якщо у вас є більше 3 посилань. Однак формульний підхід також буде добре працювати, якщо ви хочете реалізувати гіперпосилання.
Кріс

0

І ось UDF, який вводить значення TRUE / FALSE у клітинку помічника. Формула виглядала б так=testReferences(G2,A:A,", ")

Наступний код вставляється в редактор VBA. Він працює для необмежених посилань.

Function testReferences(text As Range, list As Range, delimiter As String)
    Dim arr() As String
    Dim found As Boolean

    If text = "" Then
        found = True
    Else
        arr = Split(text, delimiter)            
        For i = LBound(arr) To UBound(arr)
            If Application.WorksheetFunction.CountIf(list, arr(i)) = 1 Then
                found = True
            Else
                found = False
                Exit For
            End If
        Next
    End If

    testReferences = found
End Function

Я зберегла як макрос-файл із excel (раніше цього не було) і поставила його в перший рядок, як ви показали, але він дає мені #Name? помилка для кожного запису. Ось скріншот. Посилання
Лаура

Ви вставили код в редактор vba спочатку перед збереженням файлу? Це посилання тут може допомогти - wikihow.com/Create-a-User-Defined-Function-in-Microsoft-Excel
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.