別のシートの範囲が入力されたドロップダウンリストを作成しようとしています。しかし、私がやりたいのは完全なリストを表示することです。ユーザーが項目を選択すると、ダッシュの前のすべての文字のみがそのセルに入力されます。
したがって、選択時に「David-Project Manager」があった場合は、セルに「David」だけを入力し、ダッシュの後のすべてを削除します。その後のすべては、物事を見やすくするためにあります。
別のシートの範囲が入力されたドロップダウンリストを作成しようとしています。しかし、私がやりたいのは完全なリストを表示することです。ユーザーが項目を選択すると、ダッシュの前のすべての文字のみがそのセルに入力されます。
したがって、選択時に「David-Project Manager」があった場合は、セルに「David」だけを入力し、ダッシュの後のすべてを削除します。その後のすべては、物事を見やすくするためにあります。
でこれを行うことはできませんData Validation
。Data Validation
VBAを使用して、検証済みのセルを変更できます(ただし、検証が失敗しますね)。完全なエントリを提供し、隣接するセルがそれを要件に合わせて調整するという妥協点はどうでしょうか。
=IFERROR(TRIM(LEFT(A1,SEARCH("-",A1)-1)),A1)
A1
を含むセルはどこにありますかData Validation
VBAはこれらの要件を回避できるため、VBAメソッドは検証を中断しません。調整するDVのあるセルの範囲がB2:B100であると仮定して、次のことを試してください。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
If Not Intersect(Target, Range("B2:B100")) Is Nothing Then
For Each cell In Intersect(Target, Range("B2:B100"))
If InStr(1, cell.Value, "-") > 0 Then
Application.EnableEvents = False
cell.Value = Trim(Left(cell.Value, InStr(1, cell.Value, "-") - 1))
Application.EnableEvents = True
End If
Next cell
End If
End Sub
そのマクロはSHEETモジュールに入ります。
ContexturesVideoで答えを見つけました。
ダウンロード可能なXLSファイルのシートに必要なコードへのリンクがあります。
Option Explicit
' Developed by Contextures Inc.
' www.contextures.com
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo errHandler
If Target.Cells.Count > 1 Then GoTo exitHandler
If Target.Column = 6 Then
If Target.Value = "" Then GoTo exitHandler
Application.EnableEvents = False
Target.Value = Worksheets("codes").Range("C1").Offset(Application.WorksheetFunction.Match(Target.Value, Worksheets("codes").Range("activitycodes"), 0) - 1, -2)
End If
exitHandler:
Application.EnableEvents = True
Exit Sub
errHandler:
If Err.Number = 13 Or Err.Number = 1004 Then
GoTo exitHandler
Else
Resume Next
End If
End Sub