使用其他功能來識別連結的資料類型

連結資料類型已于2018年6月Office 365 的 Excel 發佈,因此其他功能可能無法識別它們。 如果您想要使用其他功能來依條件判斷某個儲存格是否包含連結的資料類型,尤其是這種情況。 本文說明您可以用來在儲存格中識別連結資料類型的一些方法。

公式

您隨時可以撰寫參照資料類型的公式。 不過,如果您想要使用 TEXT 函數來提取含有連結資料類型之儲存格的文字,您會收到 #VALUE! 錯誤。

解決方法是使用FIELDVALUE函數,並指定field_name引數的Name欄位。 在下列範例中,如果儲存格 A1 包含 stock 資料類型,則公式會傳回股票名稱。

= FIELDVALUE (A1,"Name")

不過,如果儲存格 A1 不包含連結的資料類型,則 FIELDVALUE 函數會傳回#FIELD!錯誤. 如果您想要評估儲存格是否包含連結資料類型,您可以使用下列公式,該公式會使用 ISERROR 函數來測試 FIELDVALUE 函數是否會傳回錯誤。

= IF (ISERROR (FIELDVALUE (A2,"Name")),"此儲存格沒有連結資料類型","此儲存格有連結的資料類型")

如果公式計算出錯誤,則會傳回文字「此儲存格沒有連結資料類型」,否則會傳回「此儲存格有連結的資料類型」。

如果您只想要取消 #FIELD! 錯誤,您可以使用:

= IFERROR (FIELDVALUE (A1,"Name"),"")

如果有錯誤,則會傳回空白儲存格。

條件式格式設定

您可以根據儲存格是否有連結資料類型,設定格式化的條件。 您必須先選取需要設定格式化的條件的儲存格,然後移至 [常用] >設定格式化的條件 >新規則>使用公式 ...在公式中,您可以使用下列方法:

= NOT (ISERROR (FIELDVALUE (A1,"Name")))

其中儲存格 A1 是您要評估之範圍內的上方儲存格。 然後套用您想要的格式。

在這個範例中,如果儲存格 A1 包含有效的 "Name" 功能變數名稱,則公式會傳回 TRUE,且會套用格式設定。 如果儲存格 A1 不含連結的資料類型,則公式會傳回 FALSE,且不會套用任何格式設定。 您可以移除 NOT,否則您不想要醒目提示任何不含有效連結資料類型的儲存格。

VBA

您可以使用數個 VBA (Visual Basic for Applications)方法來識別儲存格或範圍是否包含連結的資料類型。 第一個程式使用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),然後移至 [插入>]模組,然後將程式碼貼到您在右側開啟的新視窗中。 完成後,您可以使用Alt + Q來退出 Excel。 若要執行前兩個範例,請移至 [開發人員]索引標籤> 程式代碼>]> 從清單中選取您要執行的宏,然後選取 [執行]。

需要更多協助嗎?

您可以隨時詢問 Excel 技術社群中的專家、在 Answers 社群取得支援,或是在 Excel User Voice 上建議新功能或增強功能。

增進您的 Office 技巧
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×