如何从 Excel 的单列中列出所有可能的组合?
如果您想从单列数据中返回所有可能的组合以获得如下屏幕截图所示的结果,您是否有任何快速的方法可以在 Excel 中处理此任务?
用公式列出单列中所有可能的组合
使用 VBA 代码列出单列中所有可能的组合
用公式列出单列中所有可能的组合
以下数组公式可以帮助您完成这项工作,请逐步执行:
1. 首先,您应该创建两个辅助公式单元格。 在 C1 单元格中,请输入以下公式,然后按 Ctrl + Shift + Enter 获得结果的关键:
=MAX(LEN(A2:A6))
备注:在此公式中, A2:A6 是您要列出其组合的单元格列表。
2. 在单元格 C2 中,输入以下公式,然后按 Ctrl + Shift + Enter 键一起得到第二个结果,见截图:
=CONCAT(A2:A6&REPT(" ",C2-LEN(A2:A6)))
备注:在此公式中, A2:A6 是您要列出其组合的单元格列表, C2 单元格是否包含您在步骤 1 中创建的公式。
3. 然后,将以下公式复制并粘贴到单元格 D2 中,然后按 Ctrl + Shift + Enter 键在一起以获得第一个结果,请参见屏幕截图:
=IF(ROW()>2^(COUNTA(A$2:A$6)),"",TEXTJOIN(" + ",TRUE,IF(MID(TEXT(DEC2BIN(ROW()-1),REPT("0",COUNTA($A$2:$A$6))),ROW(INDIRECT("1:"&COUNTA($A$2:$A$6))),1)+0,TRIM(MID($C$3,(ROW(INDIRECT("1:"&COUNTA($A$2:$A$6)))-1)*$C$2+1,$C$2)),"")))
备注:在此公式中, A2:A6 是您要列出其组合的单元格列表, C2 单元格是否包含您在步骤 1 中创建的公式, C3 是具有您在步骤 2 中创建的公式的单元格, + 字符是分隔组合的分隔符,您可以根据需要更改它们。
4. 然后,选择此公式单元格,然后向下拖动填充柄,直到出现空白单元格。 现在,您可以看到指定列数据的所有组合显示如下演示所示:
备注:此公式仅适用于 Office 2019、365 及更高版本。
使用 VBA 代码列出单列中所有可能的组合
以上公式仅适用于较新的 Excel 版本,如果您有较早的 Excel 版本,以下 VBA 代码可以帮到您。
1。 按 Alt + F11 同时打开 Microsoft Visual Basic应用程序 窗口。
2。 然后,点击 插页 > 模块,将以下 VBA 代码复制并粘贴到窗口中。
VBA 代码:列出单列中所有可能的组合
Sub ConnectArr()
Updateby ExtendOffice
Dim xDValue As Variant
Dim xOutRg As Range
Dim xDictionary As Object
Dim xF As Long
Dim xChar As String
xDValue = Range("A2:A6").Value the data range
Set xOutRg = Range("C1") output range
xChar = "," separator
For xF = 1 To UBound(xDValue)
Set xDictionary = CreateObject("Scripting.Dictionary")
xDictionary(0) = "Sets of " & xF
Call ConnectValue(xDValue, xDictionary, 0, xF, 0, "", xChar)
xOutRg.Offset(0, xF - 1).Resize(xDictionary.Count).Value = WorksheetFunction.Transpose(xDictionary.Items)
Set xDictionary = Nothing
Next
End Sub
Sub ConnectValue(ByRef pDValue, ByRef pDictionary, ByRef pLevel, ByVal pMaxLevel, ByVal pIndex, ByVal pValue, ByVal pChar)
Dim xF As Long
If pLevel = pMaxLevel Then
pDictionary(pDictionary.Count + 1) = pValue
Exit Sub
End If
For xF = pIndex + 1 To UBound(pDValue)
If pValue = "" Then
Call ConnectValue(pDValue, pDictionary, pLevel + 1, pMaxLevel, xF, pDValue(xF, 1), pChar)
Else
Call ConnectValue(pDValue, pDictionary, pLevel + 1, pMaxLevel, xF, pValue & pChar & pDValue(xF, 1), pChar)
End If
Next
End Sub
备注:在上面的代码中:
A2:A6: 是您要使用的数据列表;
C1: 是输出单元格;
,: 分隔组合的分隔符。
3. 然后,按 F5 执行此代码的关键。 单列中的所有组合如下图所示:
最佳办公生产力工具
将小时转化为分钟 Kutools for Excel!
准备好增强您的 Excel 任务了吗? 利用的力量 Kutools for Excel - 您终极的节省时间的工具。 简化复杂的任务并像专业人士一样浏览数据。 以闪电般的速度体验 Excel!
为什么需要 Kutools for Excel
🛠️ 超过 300 项强大功能: Kutools 包含 300 多项高级功能,可简化您在 1500 多种场景中的工作。
📈 卓越的数据处理能力:合并单元格、删除重复项并执行高级数据转换 - 所有这些都不费吹灰之力!
⏱️ 高效的批量操作:当你可以聪明地工作时,为什么还要付出额外的努力呢? 轻松批量导入、导出、组合和调整数据。
📊 可定制的图表和报告:访问各种附加图表并生成富有洞察力的报告。
🗄️ 强大的导航窗格:通过强大的列管理器、工作表管理器和自定义收藏夹获得优势。
📝 七种类型的下拉列表:通过各种功能和类型的下拉列表使数据输入变得轻而易举。
🎓 用户友好:对于初学者来说轻而易举,对于专家来说是一个强大的工具。
***
***
*** ***
Office Tab 为 Office 带来选项卡式界面,让您的工作更轻松
在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
每天将您的工作效率提高50%,并减少数百次鼠标单击!