使用带有空白的列创建逗号分隔列表,并通过复选框输入

使用带有空白的列创建逗号分隔列表,并通过复选框输入

我想制作一个电子表格,用户可以在一个工作表上选中复选框,然后将这些值以逗号分隔,带入另一个工作表的一个单元格中。复选框的值必须能够随着第一个电子表格上新行条目的增加而改变。

当选中复选框(TRUE)时,复选框的关联名称文本会填充到相邻的列中。

我想要从此列中提取文本。我还希望它忽略空格,并且不包含多余的逗号。

我不熟悉 VBA,但只要有人指导,我就能用上。也欢迎使用巧妙的公式方法!

以下是演示文档和工作表图像的链接:https://docs.google.com/folder/d/0B1fH-Hg-rrO8cjJPSmp1czFqNEk/edit

答案1

这是一个很长且有些复杂的答案,它涵盖了您问题的所有方面。您需要将代码添加到工作簿中。我会尽力指导您完成它。


免责声明: 使用此方法风险自负。最佳做法是在开始之前备份文件。经常保存您的工作。根据提供的信息,使用 Excel 2010 进行了测试,仅供参考。您可能需要根据自己的需要进行调整。


Alt首先,您需要将以下代码添加到 VBA 资源管理器中的模块中。按+即可打开F11。在左侧窗格中,展开module文件夹。如果那里没有模块,请右键单击并选择 来添加一个InsertModule双击您刚刚创建的模块。

现在在右侧窗格中粘贴以下代码。此代码从列中获取值并将它们放在用逗号分隔的单元格中。代码来源 - Microsoft MVP McGimpsey & Associates。

'*****************************************
'Purpose: Concatenate all cells in a range
'Inputs:  rRng - range to be concatenated
'         sDelimiter - optional delimiter
'            to insert between cell Texts
'Returns: concatenated string
'*****************************************
Public Function MultiCat( _
      ByRef rRng As Excel.Range, _
      Optional ByVal sDelim As String = "") _
           As String
   Dim rCell As Range
   For Each rCell In rRng
      If rCell.Text <> "" Then
       MultiCat = MultiCat & sDelim & rCell.Text
      End If
   Next rCell
   MultiCat = Mid(MultiCat, Len(sDelim) + 1)
End Function

Sub CopyRanges()
'Copy Months
Sheets("groups").Range("H2").Copy
Sheets("UserAccess").Range("D3").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlValues
'Copy Fruit
Sheets("groups").Range("H3").Copy
Sheets("UserAccess").Range("E3").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlValues
'Copy Color
Sheets("groups").Range("H4").Copy
Sheets("UserAccess").Range("F3").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlValues
'Copy Music
Sheets("groups").Range("H5").Copy
Sheets("UserAccess").Range("G3").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlValues

'Reset check boxes
Dim ChkBox As Object
Dim Wks As Worksheet

  For Each Wks In Worksheets
    For Each ChkBox In Wks.CheckBoxes
      ChkBox.Value = xlOff
    Next ChkBox
  Next Wks
End Sub 

现在在工作groups表上,将这些公式分别添加到单元格 H2、H3、H4 和 H5。这将读取复选框值并将它们放在一个单元格中。

=MultiCat(C2:C13,", ")
=MultiCat(F2:F6,", ")
=MultiCat(F8:F10,", ")
=MultiCat(F12:F15,", ")

您应该能够通过勾选一些框来测试这一点。这将读取列的值CF然后将它们放在您刚刚复制公式的单元格中。

在此处输入图片描述

如果选中复选框后单元格没有更新,则需要设置Options > Workbook Calculations > Auto Calculate。不要担心列的格式,因为它现在只是一个占位符,稍后将被隐藏。

在表单中添加一个按钮groups。如果您不知道如何操作,请按照以下说明操作(使用添加按钮(表单控件)) - 在工作表中添加按钮并为其分配宏。当它要求分配宏时,选择CopyRanges。右键单击按钮并选择Edit Text您想要它说的内容。

Design Mode在开发人员功能区上取消选择。

在此处输入图片描述

选择一些框并单击按钮进行尝试。完成后,它应该已将数据从列复制H到另一张表上的下一个空行,然后清除下一个条目的复选框。

一旦它开始工作,隐藏列CF& H。Excel 2010 将要求您将其保存为Macro Enabled工作簿,以使一切正常工作。

答案2

将逗号构建到您已经使用的结果中 [例如 =IF(A2=TRUE,B2 &",","")],然后根据需要连接,例如颜色=F8&F9&F10。如果您不想要最后的逗号,请使用 LEN 计算总字符数,然后使用 LEN-1 进行 LEFT。

相关内容