0

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

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

4

3 に答える 3

0

でこれを行うことはできませんData ValidationData ValidationVBAを使用して、検証済みのセルを変更できます(ただし、検証が失敗しますね)。完全なエントリを提供し、隣接するセルがそれを要件に合わせて調整するという妥協点はどうでしょうか。

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

A1を含むセルはどこにありますかData Validation

于 2012-05-10T22:15:29.337 に答える
0

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モジュールに入ります。

于 2012-05-11T00:40:52.000 に答える
0

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
于 2012-05-11T11:29:24.767 に答える