excel 数据验证列表仅限大写

excel 数据验证列表仅限大写

我想在我的 excel 工作簿中进行一些数据验证。我想使用尽可能多的集中值进行数据验证,因为相同的值用于多张工作表。现在我添加了一些货币代码 (USD...) 验证。验证基于另一张工作表中的列表,并且工作得很好。我的问题是我仍然可以输入小写值,而不仅仅是精确值。我更希望不使用 VBA 的解决方案。如果只能使用 VBA,请添加一些有关如何将其添加到工作簿等的信息。

我想要允许的值是:

CHF
EUR
GBP
USD
DKK
SEK
NOK

数据验证如下所示:=Sheet1!$S$2:$S$8但也允许上面的值为小写,这不是我想要的(我看到我可以在数据验证中列出值,然后它只接受精确匹配,但为了在值发生变化时不进行太多工作,我希望将它们集中起来)。

我认为将值转换为大写也足够了,但它必须在同一个单元格中发生,例如,我eur在单元格中输入J6,然后它应该将值转换为大写并将其写入J6

答案1

我找到了一个使用 VBA 的解决方案:
右键单击工作表的选项卡并选择“显示代码...”。在 VBA 编辑器中输入以下宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:C100")) Is Nothing Then
         On Error GoTo ErrorHandler
         Application.EnableEvents = False
         Target.Value = UCase(Target)
    ErrorHandler:
        Application.EnableEvents = True
    End If
End Sub

根据需要更改范围。您必须将文件另存为*.xlsm。然后范围内的每个文本都会转换为大写。

答案2

如果要验证的单元格位于单元格 A1 中,请将数据验证类型设置为风俗而不是列表并粘贴此公式:

=AND(SUMPRODUCT(--((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64)),--(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<91))=LEN(A1),--(IFERROR(IF(MATCH(A1,Sheet1!$S$2:$S$8,0),1),0)))

演练

此公式使用两个条件,结合AND()- 首先检查值是否全部大写,其次检查值是否与允许的选项列表相匹配。

 =AND(
    SUMPRODUCT(
       --(
           (CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64)
         )
       ,--(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<91)
     )=LEN(A1)
   ,--(IFERROR(IF(MATCH(A1,Sheet1!$S$2:$S$8,0),1),0)))

看起来像的位CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64正在检查每个字符的 ASCII 码。如果它们在 ASCII 码 64 和 91 之间,我们就知道它们是大写字母。如果大写字母的数量与值字符串的长度匹配,我们就知道它们都是大写字母。

MATCH()部分检查您的货币列表中出现的价值。

笔记:呼喊这个帖子用于大写检查。

相关内容