web-dev-qa-db-ja.com

別のセルに特定の値を貼り付けるExcelの数式をどのように記述しますか?

したがって、基本的には条件をチェックする数式を記述し、その条件が満たされた場合は、特定のテキスト行を別のセルに貼り付けます。値を貼り付けたいセルに数式を入れたくないので注意してください。たとえば、B5に値を貼り付けたい場合、セルB5に数式を入れたくありません...

8

次のアプローチは、説明されている here および here の回避策を利用して、VBAで定義されたワークシート関数が別のセルの値を設定できるようにします。

カスタム関数は、ターゲットセルのアドレスとそのセルに設定する値をグローバル変数に格納します。次に、ワークシートが再計算されるときにトリガーされるマクロがグローバル変数を読み取り、ターゲットセルを指定された値に設定します。

カスタム関数の使用は簡単です。

  =SetCellValue(target_cell, value)

ここで、target_cellは、ワークシート内のセルへの文字列参照(「A1」など)またはそのような参照として評価される式です。これには、=B14などの式が含まれ、B14の値は「A1」です。関数は任意の有効な式で使用できます。

SetCellValueは、値がターゲットセルに正常に書き込まれた場合は1を返し、それ以外の場合は0を返します。ターゲットセルの以前の内容は上書きされます。

3つのコードが必要です。

  • SetCellValue自体を定義するコード
  • ワークシート計算イベントによってトリガーされるマクロ。そして
  • ユーティリティ関数IsCellAddressは、target_cellが有効なセルアドレスであることを確認します。

SetCellValue関数のコード

このコードは、ワークブックに挿入された標準モジュールに貼り付ける必要があります。モジュールは、リボンのDeveloperタブからVisual Basicを選択してアクセスするVisual Basic Editorのメニューから挿入できます。

  Option Explicit

  Public triggerIt As Boolean
  Public theTarget As String
  Public theValue As Variant

  Function SetCellValue(aCellAddress As String, aValue As Variant) As Long

      If (IsCellAddress(aCellAddress)) And _
             (Replace(Application.Caller.Address, "$", "") <> _
              Replace(UCase(aCellAddress), "$", "")) Then
          triggerIt = True
          theTarget = aCellAddress
          theValue = aValue
          SetCellValue = 1
      Else
          triggerIt = False
          SetCellValue = 0
      End If

  End Function


Worksheet_Calculateマクロコード

このコードは、SetCellValueを使用するワークシートに固有のコードに含める必要があります。これを行う最も簡単な方法は、Homeビューでワークシートのタブを右クリックし、View Codeを選択して、表示されるエディターペインにコードを貼り付けることです。

  Private Sub Worksheet_Calculate()

      If Not triggerIt Then
          Exit Sub
      End If
      triggerIt = False
      On Error GoTo CleanUp
      Application.EnableEvents = False
      Range(theTarget).Value = theValue
  CleanUp:
      Application.EnableEvents = True
      Application.Calculate

  End Sub


IsCellAddress関数のコード

このコードは、SetCellValueコードと同じモジュールに貼り付けることができます。

  Function IsCellAddress(aValue As Variant) As Boolean

      IsCellAddress = False

      Dim rng As Range           ' Input is valid cell reference if it can be
      On Error GoTo GetOut       ' assigned to range variable
      Set rng = Range(aValue)
      On Error GoTo 0

      Dim colonPos As Long            'convert single cell "range" address to
      colonPos = InStr(aValue, ":")   'single cell reference ("A1:A1" -> "A1")
      If (colonPos <> 0) Then
          If (Left(aValue, colonPos - 1) = _
                Right(aValue, Len(aValue) - colonPos)) Then
              aValue = Left(aValue, colonPos - 1)
          End If
      End If

      If (rng.Rows.Count = 1) And _
          (rng.Columns.Count = 1) And _
          (InStr(aValue, "!") = 0) And _
          (InStr(aValue, ":") = 0) Then
          IsCellAddress = True
      End If                          'must be single cell address in this worksheet
      Exit Function

  GetOut:

  End Function
7
chuff

セルB5に値「green」が含まれている場合、セルC5にテキスト「テキストA」を表示するとします。

can数式アプローチを使用しますが、数式は他のセルの値を変更できないため、数式をセルC5に入力する必要があります。

=IF(ISNUMBER(FIND("green",B5)),"Text A","")

セルC5は、B5に「緑」という単語が含まれている場合にのみ「テキストA」を表示します。

このような式は、多くの条件で機能するように構築できます。特定の状況について支援を受けるためには、要件を定義する必要があります。

C5に数式を設定したくない場合は、VBAアプローチを使用することもできます。セルB5が変更されるたびに実行されるワークシート変更イベントを実行するには、値を手動で編集するか、値を貼り付けます。

そのようなマクロの例は、

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
    If InStr(1, Target, "green", vbTextCompare) Then
        Target.Offset(0, 1) = "Text A"
    End If
End If
End Sub

もちろん、出力の条件と配置は単なる例であり、要件に合わせて調整する必要があります。

式とマクロアプローチの違いは

  • 数式アプローチでは、セルC5に数式が含まれます。ユーザーが誤って数式を削除すると、その数式が提供する機能も削除されます。 (ただし、それを管理する方法はいくつかあります)
  • vBAマクロを使用すると、セルC5には数式が表示されず、値として逐語的なテキストが含まれますが、設定を変更するにはExcel VBAの知識が必要です。また、VBAアプローチでは、ブックをマクロ対応のブックとして保存する必要があり、ユーザーはマクロを許可するか、ファイルを信頼できるファイルにする必要があります。

注:上記は一例です。数値またはテキストを評価するかどうか、評価で大文字と小文字を区別するかどうか、評価ルールとは何か、結果を配置する場所など、要件を定義する必要があります。

2
teylyn

条件が満たされているかどうかを確認するには、一部のセルにIF式を記述して、「別のセルの特定のテキスト行」を更新します。結果のセルには、次のように、式の値のみが含まれ、その値を生成した式は含まれません。

作業セル(例:J5)=IF(A1="yes","Specific line of text","")
結果セル(B5など)=J5

したがって、条件が満たされた場合(A1 = "yes")、B5には「特定のテキスト行」が含まれます。それ以外の場合は空白のままです。

注:
変数値を持つセルには、通常、その値を更新し続けるためのある種の数式が含まれます。

値を作成している実際の数式を誰にも知られたくない場合は、数式を他のセルに入力して値を生成し、結果のセルにコピーすることができます。 B5。

値を生成した数式を非表示にする、またはB5が参照するセルを非表示にする(値を更新する必要があるかどうかをチェックし続ける)には、次を参照してください。
https://support.office.com/en-us/article/display-or-hide-formulas-f7f5ab4e-bf24-4efc-8fc9-0c1b77a5356f

同じ効果を達成できるその他の関数には、CHOOSE、HLOOKUP、LOOKUP、VLOOKUPがあります。

1
Zimba