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

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

工作簿选项卡包括“数据” – 包含每个交易的每个客户和信息以下选项卡为例如“SmithP” – 将结果筛选为仅针对客户SmithP等的交易

数据列的'Data!S:S'列包含客户名称示例'SmithP'。 列'Data!I:N'包含我需要复制到单个选项卡的信息,这些选项卡将为基于客户的每个客户名称创build。

这可以通过对每行进行sorting,然后复制并粘贴信息来完成,但是具有超过10,000行的事务。

首先,使用“开始>格式作为表格”来将您的数据转化为表格forms。 这将使访问列中的信息更容易。 然后给你的表一个名字,比如“data”。

从现在起,您可以根据列的标题将列引用为数据[名称],数据[信息1],数据[信息2]等。

现在你有两种方法进行。 方法1是为每个用户生成一个标签,方法2是生成一个dynamic用户标签。

1)多标签解决scheme

在每个选项卡中,您需要将用户名写在某处,让我们假设在A1中。 为了突出这个过程,在A2中使用一个不可见的公式来完成以下工作:

=MATCH(A1,data[name])

此公式将返回A1中用户的行号。 其余的是相当直接的。 使用索引来获得你想要的单元格中所需的信息。 例如,如果你需要信息2,然后使用:

=INDEX(data[information1],A2)

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

2)dynamic标签解决scheme

但是,如果单个标签就足够了,则可以使用1的类似解决scheme,但使用dynamic更新。 首先,列出所有你需要的人,并把它放在你的dynamic用户标签上,或者只在列表中添加一个额外的标签。

然后使用与解决scheme1中相同的公式。

现在来了魔法。 select单元格A1并转到“数据>数据validation”。 在那里,select列表并标记刚创build的名称列表。 勾选“下拉”checkbox,然后单击确定。 现在,您可以从名称字段的下拉列表中select一个用户,其他字段也会相应更新。

用VBA可以做到这一点。 – 使用macroslogging器logging你在做什么,并发现如何创build一个新的工作表: 在这里输入图像说明

  • 迭代每个项目并进行复制/粘贴工作

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

  • 为了检查标签是否已经创build,我使用下面的函数:

 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