当一个单元格等于特定文本/单词时,复制所选信息单元格

时间:2016-04-01 08:39:46

标签: excel

尝试根据一个单元格中的单元格信息将相关的数据行放入单个选项卡中。当该单元格等于特定文本时,它会将一行中的多个单元格复制到客户选项卡中。

工作簿标签包括 '数据' - 包含每笔交易的每个客户和信息 例如,以下标签将是 ' SmithP' - 仅将结果过滤为仅针对客户SmithP的交易 等

数据栏&#39> 专栏'数据!S:S'包含客户名称示例' SmithP'。 专栏'数据!I:N'包含我需要复制到各个选项卡的信息,这些选项卡将根据客户为每个客户名称创建。

可以通过对每一行进行排序,然后复制并粘贴信息但超过10,000行的事务来完成。

2 个答案:

答案 0 :(得分:1)

首先,使用"开始>格式如表"将您的数据转换为表格形式。这将使访问列中的信息变得更加容易。然后给你的表命名,例如" data"。

从现在开始,您可以将列引用为数据[名称],数据[信息1],数据[信息2]等,具体取决于列的标题。

现在你有2种方法可以继续。方法1是为每个用户生成一个选项卡,方法2是生成一个动态用户选项卡。

1)多标签解决方案

在每个标签中,您需要在某处写入用户名,我们假设在A1中。要完成此过程,请在A2中使用不可见的公式执行以下操作:

=MATCH(A1,data[name])

此公式将返回A1中用户的行号。剩下的就是相当直接的。使用索引在所需的单元格中获取所需的信息。例如,如果您需要信息2,请使用:

=INDEX(data[information1],A2)

这将从与用户名称相同的行中检索信息1。只需复制选项卡并相应地更改用户名。

2)动态标签解决方案

但是,如果单个选项卡足够,您可以使用类似的解决方案1,但使用动态更新。首先,列出您需要的所有人,并将其放在动态用户选项卡上或仅为列表制作的额外选项卡中。

然后使用与解决方案1中相同的公式。

现在来了魔术。选择单元格A1并转到"数据>数据验证"。在那里,选择列表并标记刚刚创建的名称列表。勾选"下拉"复选框,然后单击确定现在,您可以从名称字段的下拉列表中选择用户,其他字段将相应更新。

答案 1 :(得分:0)

可以使用VBA执行此操作。 - 使用宏录制器记录您正在做的事情并发现如何创建新工作表: enter image description here

  • 遍历每个项目并执行复制/粘贴工作

  • 您必须找到一种方法来记住您在哪个标签中存储了哪个客户。最简单的方法是使用客户名称调用选项卡,并在每个选项卡中有一个计数器(行:1 / col:20)

  • 为了检查选项卡是否已经创建,我使用以下功能:

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
Public Sub filterit()
    On Error GoTo ErrorTrap
    Dim wkRange As Range
    Dim cpSheet As Worksheet
    Dim i As Integer
    Dim myOffset As Integer
    rem myOffset is -11 -> -6  since I scan col "S" and I get data from col "I" to "N"
    myOffset = -11

    Set wkRange = ThisWorkbook.Sheets("Data").Range("$S:$S")
    For Each C In wkRange
      If C.Value = "" Then
        Exit Sub
      End If
       ' MsgBox C.Value
       ' create a new tab with customer name:
      If Not WorksheetExists(C.Value) Then
        ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
        Set cpSheet = ThisWorkbook.Sheets(Sheets.Count)
        cpSheet.Name = C.Value
      End If
      Set cpSheet = ThisWorkbook.Sheets(C.Value)
      ' count how many rows you entered
      cpSheet.Cells(1, 20) = cpSheet.Cells(1, 20) + 1
      ' then you can do the copy, say on 3 consecutive columns, starting at myOffset
      cpSheet.Cells(cpSheet.Cells(1, 20), 1) = C.offset(0, myOffset + 1).Value
      cpSheet.Cells(cpSheet.Cells(1, 20), 2) = C.offset(0, myOffset + 2).Value
      cpSheet.Cells(cpSheet.Cells(1, 20), 3) = C.offset(0, myOffset + 3).Value
      cpSheet.Cells(cpSheet.Cells(1, 20), 4) = C.offset(0, myOffset + 4).Value
      cpSheet.Cells(cpSheet.Cells(1, 20), 5) = C.offset(0, myOffset + 5).Value
    Next

Exit Sub
ErrorTrap:
    Beep
    MsgBox "FAILED" & Chr(13) & "Error number: " & Err & Chr(13) & Error(Err)
End Sub