Использование других функций для определения связанных типов данных

Связанные типы данных впервые выпущены Excel для Microsoft 365 июня 2018 г., и по этой мере другие функции не могут их распознать. Это особенно важно, если вы хотите использовать другие функции для определения того, содержит ли ячейка связанный тип данных. В этой статье рассказывается о некоторых обходных решениях, которые можно использовать для определения связанных типов данных в ячейках.

Примечание: Связанные типы данных доступны только для клиентов с несколькими клиентами по всему миру (стандартные Microsoft 365 учетные записи).

Формулы

Вы всегда можете написать формулы, которые ссылались на типы данных. Однако если вы хотите извлечь текст ячейки со связанным типом данных с помощью функции ТЕКСТ, вы получите #VALUE! ошибка "#ЗНАЧ!".

В качестве обходного решения можно использовать функцию FIELDVALUE и указать поле "Имя" для field_name функции. В следующем примере, если ячейка A1 содержала тип данных "Акции", формула возвратит имя акции.

=ИМЯ ПОЛЯ(A1;"Имя")

Однако если ячейка A1 не содержит связанного типа данных, то функция ДАТА.ПОЛЯ возвращает ошибку #FIELD!.. Если вы хотите определить, содержит ли ячейка связанный тип данных, можно использовать следующую формулу: функция ЕERROR используется для проверки на ошибку функции FIELDVALUE.

=ЕСЛИ(ЕERROR(FIELDVALUE(A2;"Name"));"Эта ячейка не имеет связанного типа данных";"Эта ячейка имеет связанный тип данных")

Если формула возвращает ошибку, она возвращает текст "Эта ячейка не имеет связанного типа данных", в противном случае она возвращает текст "Эта ячейка имеет связанный тип данных".

Если вы просто хотите скрыть #FIELD! вы можете использовать:

=ЕСЛИERROR(FIELDVALUE(A1;"Name");"")

Эта ячейка будет возвращена в случае ошибки.

Условное форматирование

Условное форматирование ячейки зависит от того, имеется ли в ней связанный тип данных. Сначала нужно выбрать ячейки, для которые требуется условное форматирование, а затем перейти на home >условное форматирование > New Rule > Use a formula... Для формулы следует использовать следующие формулы:

=НЕ(ЕERROR(FIELDVALUE(A1;"Name")))

Где ячейка A1 — это верхняя ячейка в диапазоне, который вы хотите вы оцениваете. Затем применим нужный формат.

В этом примере, если ячейка A1 содержит допустимые имена полей для имени "Имя", формула возвращает истина, и форматирование будет применено. Если ячейка A1 не содержит связанный тип данных, формула возвращает ложь и форматирование применено не будет. Если вы хотите выделить ячейки, которые не содержат допустимых связанных типов данных, удалите его.

VBA

Существует несколько способов VBA (Visual Basic для приложений), которые можно использовать для определения того, содержит ли ячейка или диапазон связанные типы данных. В первой процедуре используется свойство HasRichDataType. 

Обе эти процедуры покажут вам выбрать диапазон ячеек для оценки, а затем вернуть окно сообщения с результатами.

Sub IsLinkedDataType()
    Dim c As Range
    Dim rng As Range
    Dim strResults As String
    
    Set rng = Application.InputBox("Select a range to check for linked data types", Type:=8)
    
    For Each c In rng
      '    Check if the HasRichDataType is TRUE or FALSE
        If c.HasRichDataType = True Then
        '   The cell holds a linked data type
            strResults = strResults & c.Text & " - Linked data type" & vbCrLf
        Else
            strResults = strResults & c.Text & " - Not a linked data type" & vbCrLf
        End If
    Next c

    MsgBox "Your range contains the following details" & vbCrLf & vbCrLf & strResults, vbInformation + vbOKOnly, "Results"
    
End Sub

В следующей процедуре используется свойство LinkedDataTypeState.

Sub IsLinkedDataTypeState()
    Dim c As Range
    Dim rng As Range
    Dim strResults As String
    
    Set rng = Application.InputBox("Select a range to check for linked data types", Type:=8)
    
    For Each c In rng
   '    Check if the LinkedDataTypeState is 1 (TRUE) or 0 (FALSE)
        If c.LinkedDataTypeState = 1 Then
        '   The cell holds a linked data type
            strResults = strResults & c.Text & " - Linked data type" & vbCrLf
        Else
            strResults = strResults & c.Text & " - Not a linked data type" & vbCrLf
        End If
    Next c
    
   MsgBox "Your range contains the following details" & vbCrLf & vbCrLf & strResults, vbInformation + vbOKOnly, "Results"

End Sub

Этот фрагмент является пользовательской функцией (UDF) и ссылается на нее так же, как на любую другую формулу Excel. Просто введите =fn_IsLinkedDataType(A1),где A1 — это ячейка, для которой нужно вывести результат.

Public Function fn_IsLinkedDataType(c As Range)
'   Function will return TRUE if a referenced cell contains a linked data type
    If c.HasRichDataType = True Then
      fn_IsLinkedDataType = "Linked data type"
    Else
        fn_IsLinkedDataType = "Not a linked data type"
    End If
End Function

Чтобы использовать любой из этих примеров, нажмите ALT+F11, чтобы открыть редактор Visual Basic (VBE), а затем перейдите на вкладку > Moduleи вставьте код в новое окно, которое открывается справа. После этого можно снова выйти из Excel с помощью ALT+Q. Чтобы выполнить один из первых двух примеров, на вкладке "Разработчик"> "> Макрос"> выберите нужный макрос из списка и выберите "Выполнить".

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.

Нужна дополнительная помощь?

Совершенствование навыков работы с Office
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединиться к программе предварительной оценки Office

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×