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


7

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


1
数式ではなくマクロが必要なように聞こえます
ブラッドパットン

^それを可能にするマクロの例を教えてください。マクロを書いたことがありません...ありがとう!
ロバートジェフリーズ

Stack Overflowへようこそ!質問の性質を変更する必要がある場合は、新しい質問を作成するのではなく、既存の質問を編集して変更することを強くお勧めします。
アーロンミラー

1
次のような詳細を使用して質問を編集してください。どの条件がチェックされているか、データがどのように配置されているか、どのようにこれをトリガーするかなど。
チャーリーRB

@Bradのコメントへの+1; あるセルの数式で別のセルを変更することは不可能だと思います。
スコット

回答:


6

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

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

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

  =SetCellValue(target_cell, value)

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

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

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

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

SetCellValue関数のコード

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

  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

「Worksheet_Calculate」のApplication.Calculate前にあなたはありませんApplication.EnableEvents = Trueか?それ以外の場合、私の関数は94回計算されます。
ニコラウ

1

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

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

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

セルC5は、B5に「green」という単語が含まれている場合にのみ「Text 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アプローチでは、ワークブックをマクロ対応ワークブックとして保存し、ユーザーがマクロを許可するか、ファイルを信頼できるファイルにする必要があります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.