Excel实现单元格下拉框选择,加VBA脚本可实现选择多个选项,默认顿号分隔,可自定义符号分隔

1 实现单元格下拉框

在这里插入图片描述
来源需要用英文逗号分隔,这里输入限制为最大255字符,如果需要更多可选择单元格范围:
在这里插入图片描述
到这里就实现了下拉选择:
在这里插入图片描述

2 导入VBA脚本实现多选

按Alt+F11唤出VBA代码编辑器,选中你的sheet,复制代码然后保存,保存时选否,保存为.xlsm文件
在这里插入图片描述
在这里插入图片描述
代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
'UpdatebyExtendoffice20180510
    Dim I As Integer
    Dim xRgVal As Range
    Dim xStrNew As String
    Dim xStrOld As String
    Dim xFlag As Boolean
    Dim xArr
    On Error Resume Next
    Set xRgVal = Cells.SpecialCells(xlCellTypeAllValidation)
    If (Target.Count > 1) Or (xRgVal Is Nothing) Then Exit Sub
    If Intersect(Target, xRgVal) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    xFlag = True
    xStrNew = Target.Value
    Application.Undo
    xStrOld = Target.Value
    If xStrNew <> "" Then
        If InStr(1, xStrOld, xStrNew) = 0 Then
            xStrNew = xStrNew & IIf(xStrOld <> "", "、" & xStrOld, "")
        Else
            xStrNew = xStrOld
        End If
    End If
    Target.Value = xStrNew
    Application.EnableEvents = True
End Sub

再看文件时已经可以多选了:
在这里插入图片描述
自定义分隔符号:
在这里插入图片描述
更改这个顿号为你想要的后保存脚本即可。

参考链接:https://www.5axxw.com/questions/content/wq9lhv

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
实现 Java Excel 中同一单元格下拉框涉及多个单元格下拉框二级级联的代码,可以参考以下步骤: 1. 在 Excel 表格中,创建第一个单元格下拉框,并设置数据源。例如,我们创建的第一个下拉框是在 A1 单元格中。 2. 在 Excel 表格中,创建第二个单元格下拉框,并设置数据源。例如,我们创建的第二个下拉框是在 B1 单元格中。 3. 在 Java 代码中,通过 poi 库读取 Excel 表格。具体代码如下: ```java FileInputStream inputStream = new FileInputStream(new File("example.xlsx")); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); ``` 4. 获取第一个下拉框所在的单元格对象,以及第二个下拉框所在的单元格对象。例如,我们获取的第一个下拉框所在的单元格对象是 A1,第二个下拉框所在的单元格对象是 B1。 ```java Cell firstDropDownCell = sheet.getRow(0).getCell(0); Cell secondDropDownCell = sheet.getRow(0).getCell(1); ``` 5. 为第一个下拉框所在的单元格对象设置数据有效性。这里我们需要使用 DataValidationHelper 和 DataValidation 对象来实现。 ```java DataValidationHelper validationHelper = sheet.getDataValidationHelper(); DataValidationConstraint validationConstraint = validationHelper.createFormulaListConstraint("A2:A5"); CellRangeAddressList rangeList = new CellRangeAddressList(0, 0, 0, 0); DataValidation validation = validationHelper.createValidation(validationConstraint, rangeList); sheet.addValidationData(validation); ``` 6. 为第二个下拉框所在的单元格对象设置数据有效性,并且将其绑定到第一个下拉框所在的单元格对象上。 ```java DataValidationConstraint validationConstraint2 = validationHelper.createFormulaListConstraint("INDIRECT($A$1)"); CellRangeAddressList rangeList2 = new CellRangeAddressList(0, 0, 1, 1); DataValidation validation2 = validationHelper.createValidation(validationConstraint2, rangeList2); validation2.setShowErrorBox(true); sheet.addValidationData(validation2); ``` 注意,这里我们使用了 INDIRECT 函数来实现二级级联,将第二个下拉框的数据源绑定到第一个下拉框所选定的上。 完整代码如下: ```java FileInputStream inputStream = new FileInputStream(new File("example.xlsx")); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); Cell firstDropDownCell = sheet.getRow(0).getCell(0); Cell secondDropDownCell = sheet.getRow(0).getCell(1); DataValidationHelper validationHelper = sheet.getDataValidationHelper(); DataValidationConstraint validationConstraint = validationHelper.createFormulaListConstraint("A2:A5"); CellRangeAddressList rangeList = new CellRangeAddressList(0, 0, 0, 0); DataValidation validation = validationHelper.createValidation(validationConstraint, rangeList); sheet.addValidationData(validation); DataValidationConstraint validationConstraint2 = validationHelper.createFormulaListConstraint("INDIRECT($A$1)"); CellRangeAddressList rangeList2 = new CellRangeAddressList(0, 0, 1, 1); DataValidation validation2 = validationHelper.createValidation(validationConstraint2, rangeList2); validation2.setShowErrorBox(true); sheet.addValidationData(validation2); FileOutputStream outputStream = new FileOutputStream("example.xlsx"); workbook.write(outputStream); workbook.close(); ``` 需要注意的是,此代码只是一个简单的示例,实际情况下需要根据具体需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值