【发布时间】:2020-06-20 07:52:01
【问题描述】:
我已经实现了一个单元格内的数据验证下拉列表,我用它来在一列单元格中保留多个值。目前,您可以按任何顺序从下拉列表中进行选择,并且单元格将按该顺序填充。有没有办法强制订单与作为我的下拉列表来源的列表保持一致?
例如:我的下拉列表是:
- 吉姆
- 汤姆
- 鲍勃
- 亚伦
选择按以下顺序进行:
- 鲍勃
- 吉姆
- 汤姆
我希望单元格显示:
-
Jim, Tom, Bob
以下是我当前用于数据验证下拉列表的 VBA 代码:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' To allow multiple selections in a Drop Down List
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Target.Column = 13 Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
GoTo Exitsub
Else
If Target.Value = "" Then
GoTo Exitsub
Else
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
If InStr(1, Oldvalue, Newvalue) = 0 Then
Target.Value = Oldvalue & ", " & Newvalue
Else
Target.Value = Oldvalue
End If
End If
End If
End If
End If
Exitsub:
Application.EnableEvents = True
End Sub
基本上,上面的代码(由前同事给我,不是我自己发明的)让我可以从单元格中的列表中保留多个选择,用逗号分隔。这很好用,但是列表中的选择会按照它们被选择的顺序显示在单元格中。
我需要它们按照它们在列表中的顺序显示。从示例中,如果有人选择Bob,然后选择Tom,然后选择Ryan,则当前代码显示Bob, Tom, Ryan。我需要代码来重新排序选择以显示为Tom, Bob, Ryan。
【问题讨论】:
-
所以,如果我正确阅读了这些回复,它们都是从小到大排序的。我需要根据原始源列表的顺序进行排序。
-
@JWelsh 您能否编辑这篇文章并包含一些屏幕截图或您面临的问题的示例?它会让你更容易接近:)
-
验证列表是来自链接范围,还是直接输入到验证设置中?
-
列表是在数据验证中选择的链接范围。