所以我正在处理一张Excel工作表,而这是我真的不知道的事情。
我希望的是,如果单元格的内容符合特定条件,则将根据该单元格粘贴整个单元格的列。该单元格是一个下拉菜单,其中包含32个不同的选项(如果无法执行此操作,则可以减少该选项),并且每个选项都对应于不同的数据列。必须粘贴的列每个都有大约32个数据单元。
我当前的公式基本上是=IFS(A1="Potato",Sheet2!G:G)
,但这给我一个'0'。我所能做的最好的就是将公式更改为=IFS(A1="Potato",Sheet2!G1)
或=IFS(A1="Potato",Sheet2!G1:G32)
,但是这两个公式都只给我第一个单元格(G1)的内容。
关于无需联系外星人或建造宇宙飞船如何完成此工作的任何想法?
答案 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)
编辑后的答案: (根据评论)
我们有以下产品布局
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
因此,在进入黄瓜并单击按钮之后:
我们将得到以下结果:
只要第一个产品在F列中开始,您就可以在其中添加任意数量的产品(尽管也可以在代码中进行更改)。
PS:但是,这将最终覆盖您的数据,并且如果您的数据范围不同,也会导致数据重叠。将数据粘贴到sheet2的下一个空行中而不是直接粘贴到A37中可能更聪明
这可以通过更改行来实现
Sheets("Sheet2").Range("A37").PasteSpecial
至Sheets("Sheet2").Range(Cells((Rows.Count, "A").End(xlUp).Row, "A")).PasteSpecial
答案 2 :(得分:0)