如何使Formula在其他单元格上给出多个结果

时间:2018-06-25 07:25:19

标签: excel excel-formula

所以我正在处理一张Excel工作表,而这是我真的不知道的事情。

我希望的是,如果单元格的内容符合特定条件,则将根据该单元格粘贴整个单元格的列。该单元格是一个下拉菜单,其中包含32个不同的选项(如果无法执行此操作,则可以减少该选项),并且每个选项都对应于不同的数据列。必须粘贴的列每个都有大约32个数据单元。

我当前的公式基本上是=IFS(A1="Potato",Sheet2!G:G),但这给我一个'0'。我所能做的最好的就是将公式更改为=IFS(A1="Potato",Sheet2!G1)=IFS(A1="Potato",Sheet2!G1:G32),但是这两个公式都只给我第一个单元格(G1)的内容。

关于无需联系外星人或建造宇宙飞船如何完成此工作的任何想法?

3 个答案:

答案 0 :(得分:1)

您可以使用公式或VBA。

我假设您的32列源数据位于Sheet2中,标题位于第1行。

公式解决方案

在Sheet1 A73中,输入:

=INDEX(Sheet2!$A$1:$AF$41,ROW(A1),MATCH($A$1,Sheet2!$A$1:$AF$1,0))

将此公式复制到Sheet1 A74:A105

VBA解决方案

将此代码放在Sheet1模块中;

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        With Sheet2
            Set c = .Rows(1).Find(what:=Sheet1.Range("A1").Value)
            If Not c Is Nothing Then
                Set c = Intersect(.UsedRange, c.EntireColumn)
                Sheet1.Range("A73").Resize(c.Rows.Count, 1).Delete
                c.Copy Sheet1.Range("A73")
            End If
        End With
        Application.EnableEvents = True
    End If
End Sub

答案 1 :(得分:0)

编辑后的答案: (根据评论)

我们有以下产品布局

enter image description here

Private Sub CommandButton1_Click()
'first we check the user input
Dim u_input As String
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
u_input = LCase(Trim(ws.Range("A1").Value2))

'now we need to determine how many columns there are so we know when to stop looping
Dim lc As Long, lr As Long
lc = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

' loops through all the products
For Each cell In Range(Cells(1, "F"), Cells(1, lc))
    ' if the product matches the input
    If LCase(Trim(cell)) = u_input Then
        lr = ws.Cells(ws.Rows.Count, cell.Column).End(xlUp).Row
        ' copy and paste the active data range to A37
        ws.Range(Cells(1, cell.Column), Cells(lr, cell.Column)).Copy
        Sheets("Sheet2").Range("A37").PasteSpecial
    End If
Next cell

End Sub

因此,在进入黄瓜并单击按钮之后:

enter image description here

我们将得到以下结果:

enter image description here

只要第一个产品在F列中开始,您就可以在其中添加任意数量的产品(尽管也可以在代码中进行更改)。


PS:但是,这将最终覆盖您的数据,并且如果您的数据范围不同,也会导致数据重叠。将数据粘贴到sheet2的下一个空行中而不是直接粘贴到A37中可能更聪明

这可以通过更改行来实现 Sheets("Sheet2").Range("A37").PasteSpecialSheets("Sheet2").Range(Cells((Rows.Count, "A").End(xlUp).Row, "A")).PasteSpecial

答案 2 :(得分:0)

您不能通过公式更改单元格值,例如粘贴。但是,有多种方法可以通过公式或VBA获取所需的值:

公式示例:索引和水平查找组合。

=INDEX($D$1:$H$6,ROW(A2),HLOOKUP($A$1,$D$1:$H$1,1,FALSE))

enter image description here

在这里,我将公式粘贴到B2中并将其向下拖动到B6中。请注意,缺失值将返回0。但是,在Settings > Advanced下,您可以设置0个值。