0

您好我正在尝试制作一个 Excel 2013 电子表格,列出可能的项目组合。除了矩阵之外,我不确定这种类型的表是否有名称,但它看起来像这样(如孟德尔遗传学图):

     A       B       C        D       E
1          Apple   Banana   Cherry
2  Apple   Blue    Orange   Red
3  Banana  Red     Purple   Brown
4  Cherry  Green   Red      Maroon
5

我将根据需要向其中添加项目并手动填写组合结果。我正在寻找一种方法来简单地在第一列的底部输入一个新项目并让它自动显示在第一行的末尾。例如,我会在单元格 A5 中输入“日期”,“日期”也会自动显示在单元格 E1 中。

我试过简单地输入

=A2

在单元格 B1 中,然后将该公式拖到第 1 行的右侧,但不是填写 =A3、=A4、=A5 等,而是填写 =B2、=C2、=D2 等。这种行为使感觉,默认情况下,但我不知道如何改变它。我想也许 TRANSPOSE 功能会以某种方式帮助我,但我没有任何运气。

如果碰巧有更好的方法,我也愿意使用 Google Docs 电子表格。

编辑:我也想到也许有更好的方法来布置这种表格。我真的希望在 Excel 中内置某种默认模板来处理这类事情,并带有将重复组合等变灰的选项。

感谢您的任何建议。

4

3 回答 3

3

试试这个公式,B1然后向右拖动:

=OFFSET(B1,COLUMN(B1)-1,-(COLUMN(B1)-1))
于 2013-09-05T09:45:31.410 回答
0

Google docs 不太可能提供比 Excel 更好的功能 - 它在当前状态下通常具有更差的功能。如果您在奔波中并且无法访问 Excel 或正在处理实时协作电子表格,那就太好了。

如果您正在寻找包含空白作为值并具有超过 2 个可能值的组合,则最好使用 VBA。这是来自http://www.mrexcel.com/forum/excel-questions/435865-excel-visual-basic-applications-combinations-permutations.html

Sub PowerSetRept()
Dim vElements As Variant, vresult As Variant
Dim lRow As Long, i As Long

vElements = Application.Transpose(Range("A1", Range("A1").End(xlDown)))
Columns("C:Z").Clear

lRow = 1
For i = 1 To UBound(vElements)
    ReDim vresult(1 To i)
    Call CombinationsNP(vElements, i, vresult, lRow, 1, 1)
Next i
End Sub

Sub CombinationsNP(vElements As Variant, p As Long, vresult As Variant, lRow As Long, iElement As Long, iIndex As Long)
Dim i As Long

For i = iElement To UBound(vElements)
    vresult(iIndex) = vElements(i)
    If iIndex = p Then
        lRow = lRow + 1
        Range("C" & lRow).Resize(, p) = vresult
    Else
        Call CombinationsNP(vElements, p, vresult, lRow, i, iIndex + 1)
    End If
Next i
End Sub

你会得到这样的东西:

示例 2

于 2013-09-05T14:14:02.267 回答
0

Google 电子表格有一个简洁的功能,可以更轻松地完成此操作:在单元格 B1 上,输入:=transpose(A2:A100)

这就对了!(如果您计划超过 99 行,请相应调整)

于 2016-10-04T18:40:02.523 回答