Перейти к основному контенту
Office

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

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

Формулы

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

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

= ЗНАЧПОЛЯ (a1; "имя")

Тем не менее, если ячейка a1 не содержит связанный тип данных, функция ЗНАЧПОЛЯ вернет ошибку #FIELD!. Если вы хотите определить, содержит ли ячейка связанный тип данных, можно использовать следующую формулу, которая использует функцию ЕОШИБКА для проверки того, будет ли функция ЗНАЧПОЛЯ возвращать ошибку.

= Если (ЕОШИБКА (ЗНАЧПОЛЯ (a2; "имя")), "Эта ячейка не имеет связанного типа данных", "в этой ячейке есть связанный тип данных")

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

Если вы просто хотите отключать #FIELD! ошибка, вы можете использовать следующее:

= ЕСЛИОШИБКА (ЗНАЧПОЛЯ (a1; "имя"); "")

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

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

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

= NOT (ошибка (ЗНАЧПОЛЯ (a1; "имя")))

Где ячейка a1 — верхняя ячейка диапазона, которую вы хотите вычислить. Примените нужный формат.

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

VBA

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

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

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

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

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и вставьте код в новое окно, которое откроется справа. Вы можете использовать сочетание клавиш ALT + Q , чтобы вернуться в Excel, когда закончите работу. Чтобы запустить один из первых двух примеров, перейдите на вкладку разработчик> код> макросов> выберите в списке макрос, который вы хотите запустить, и нажмите кнопку выполнить.

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

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

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

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

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

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

×