スキップしてメイン コンテンツへ

他の機能を使ってリンクされたデータの種類を特定する

リンクされたデータ型は、2018年6月のExcel for Office 365 でリリースされました。そのため、他の機能が識別できない可能性があります。 これは、セルにリンクされたデータ型が含まれているかどうかを条件付きで指定するために、他の機能を使用する場合に特に当てはまります。 この記事では、セル内のリンクされたデータの種類を識別するために使用できる回避策について説明します。

数式

データ型を参照する数式はいつでも作成できます。 ただし、TEXT 関数を使用して、リンクされたデータ型のセルのテキストを抽出する場合は、#VALUE が表示されます。 エラーが表示されます。

回避策として、 FIELDVALUE関数を使って、 Field_name引数のNameフィールドを指定することができます。 次の例では、セル A1 に株式データ型が含まれている場合、数式によって株式の名前が返されます。

= FIELDVALUE (A1, "Name")

ただし、セル A1 にリンクされたデータ型が含まれていない場合、FIELDVALUE 関数は#FIELD! エラーを返します。. セルにリンクされたデータ型が含まれているかどうかを評価する場合は、次の式を使用できます。これには、FIELDVALUE 関数を使用して、エラーが返されたかどうかを調べます。

= IF (ISERROR (FIELDVALUE)): "このセルはリンクされているデータ型を持っていません"、"このセルにリンクされているデータ型があります。"

数式がエラーとして評価されると、"このセルはリンクされているデータ型を持っていません" というテキストが返され、それ以外の場合は "このセルにリンクされたデータ型があります" という文字列が返されます。

単に #FIELD を抑制したい場合 エラー: 次のような場合に使用できます。

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

これは、エラーが発生した場合に空白セルを返します。

条件付き書式

データ型がリンクされているかどうかに基づいて、条件に応じてセルの書式を設定することができます。 まず、条件付き書式を必要とするセルを選択して、[ホーム>条件付き書式] に移動して、数式 > 使用し >新しいルールを作成します。数式の場合は、次の操作を行います。

= NOT (ISERROR (FIELDVALUE))))

セル 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 EDITOR (VBE) を開き、[>モジュール挿入] に移動して、右側に表示される新しいウィンドウにコードを貼り付けます。 操作が完了したら、 Alt + Q キーを押して Excel に戻ることができます。 最初の2つの例のいずれかを実行するには、[開発] タブに移動し、マクロ>>コードを入力して、実行するマクロ> 一覧から選択し、[実行] を選択します。

補足説明

Excel Tech Community では、いつでも専門家に質問できます。Microsoft コミュニティでは、サポートを受けられます。また、Excel User Voice では、新機能についての提案や改善案を送信することができます。

Office のスキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×