2012-05-10 3 views
0

別のシートから範囲を設定したドロップダウンリストを作成しようとしています。しかし、私がしたいのは、完全なリストを表示することです。ユーザが項目を選択すると、そのセルにダッシュの前にあるすべての文字が入力されます。完全なドロップダウンリストを表示しますが、「 - 」の前に文字でフィールドを設定しますか?

だから、「David - Project Manager」を選択したら、セルに「David」だけを入力し、ダッシュの後にすべてを削除します。後はすべて物事を見やすくするためだけにあります。

答えて

0

答えはContextures Videoです。

シートに必要なコードへのリンクが、ダウンロード可能な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 
0

Data Validationでこれを行うことはできません。検証済みのセルを修正するのにVBAを使うことができますが、それは有効性を損なうでしょうか?Data Validationが完全なエントリを提供する妥協については、隣接するセルがあなたの要件に合わせてトリミングします。 A1

=IFERROR(TRIM(LEFT(A1,SEARCH("-",A1)-1)),A1) 

はVBAがこれらの要件の周りに行くことができるので、検証を破壊しないData Validation

0

VBAメソッドを含む細胞です。調整するDVとセルの範囲を仮定するとB2である:マクロシートモジュールに行くこと

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 

:B100は、これを試してみてください。

+0

この作業を行うことはできません。私が変更したのは、リストの値を保持する名前付き範囲を参照するRangeです。私は間違って何をしていますか? – toolshed

+0

が間違っている場合は、DVドロップリストを使用しているシート上のセルを参照するように範囲を変更します。このマクロがそのシートモジュールにあることを確認してください。 –

関連する問題