我想制作一个电子表格,用户可以在一个工作表上选中复选框,然后将这些值以逗号分隔,带入另一个工作表的一个单元格中。复选框的值必须能够随着第一个电子表格上新行条目的增加而改变。
当选中复选框(TRUE)时,复选框的关联名称文本会填充到相邻的列中。
我想要从此列中提取文本。我还希望它忽略空格,并且不包含多余的逗号。
我不熟悉 VBA,但只要有人指导,我就能用上。也欢迎使用巧妙的公式方法!
以下是演示文档和工作表图像的链接:https://docs.google.com/folder/d/0B1fH-Hg-rrO8cjJPSmp1czFqNEk/edit
答案1
这是一个很长且有些复杂的答案,它涵盖了您问题的所有方面。您需要将代码添加到工作簿中。我会尽力指导您完成它。
免责声明: 使用此方法风险自负。最佳做法是在开始之前备份文件。经常保存您的工作。根据提供的信息,使用 Excel 2010 进行了测试,仅供参考。您可能需要根据自己的需要进行调整。
Alt首先,您需要将以下代码添加到 VBA 资源管理器中的模块中。按+即可打开F11。在左侧窗格中,展开module
文件夹。如果那里没有模块,请右键单击并选择 来添加一个Insert
。Module
双击您刚刚创建的模块。
现在在右侧窗格中粘贴以下代码。此代码从列中获取值并将它们放在用逗号分隔的单元格中。代码来源 - 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,", ")
您应该能够通过勾选一些框来测试这一点。这将读取列的值C
,F
然后将它们放在您刚刚复制公式的单元格中。
如果选中复选框后单元格没有更新,则需要设置Options > Workbook Calculations > Auto Calculate
。不要担心列的格式,因为它现在只是一个占位符,稍后将被隐藏。
在表单中添加一个按钮groups
。如果您不知道如何操作,请按照以下说明操作(使用添加按钮(表单控件)) - 在工作表中添加按钮并为其分配宏。当它要求分配宏时,选择CopyRanges
。右键单击按钮并选择Edit Text
您想要它说的内容。
Design Mode
在开发人员功能区上取消选择。
选择一些框并单击按钮进行尝试。完成后,它应该已将数据从列复制H
到另一张表上的下一个空行,然后清除下一个条目的复选框。
一旦它开始工作,隐藏列C
、F
& H
。Excel 2010 将要求您将其保存为Macro Enabled
工作簿,以使一切正常工作。
答案2
将逗号构建到您已经使用的结果中 [例如 =IF(A2=TRUE,B2 &","
,"")],然后根据需要连接,例如颜色=F8&F9&F10
。如果您不想要最后的逗号,请使用 LEN 计算总字符数,然后使用 LEN-1 进行 LEFT。