Excel按用户输入显示另一工作表中的数据

Excel按用户输入显示另一工作表中的数据,excel,worksheet-function,Excel,Worksheet Function,我需要找到某些数字(由用户给定)之间的行,以便在屏幕上显示它们,以便打印 例如:用户输入104822000011和104822000020作为from和to值。然后我需要在另一张工作表中搜索介于这两张工作表之间的任何数字。工作表中的数据来自数据库。我需要返回给定数字之间的行中的所有数据 我对VBA知之甚少,因此,如果可以使用工作表函数实现这一点,那将是更好的选择。我在谷歌上搜索并尝试了一些东西,但没有一件看起来容易做或不起作用。有人能帮我一点忙吗?假设您的数据在工作表dataWS中,行号在a列,

我需要找到某些数字(由用户给定)之间的行,以便在屏幕上显示它们,以便打印

例如:用户输入104822000011和104822000020作为
from
to
值。然后我需要在另一张工作表中搜索介于这两张工作表之间的任何数字。工作表中的数据来自数据库。我需要返回给定数字之间的行中的所有数据


我对VBA知之甚少,因此,如果可以使用工作表函数实现这一点,那将是更好的选择。我在谷歌上搜索并尝试了一些东西,但没有一件看起来容易做或不起作用。有人能帮我一点忙吗?

假设您的数据在工作表
dataWS
中,行号在a列,数据在B列

在另一张工作表上,您可以在
A1中的
中的
输入值


然后在
A2
=IF($A1让我们假设您的数据在工作表
dataWS
中,行号在A列,数据在B列

在另一张工作表上,您可以在
A1中的
中的
输入值


然后在
A2
=如果($A1是),您可以通过复制行(您不想要的行)或VBA来实现。
我相信VBA是一个很好的选择

但是,如果记录编号是严格的数字,并且没有太多数据可显示,我有一个愚蠢的方法使用数据透视表

您可以添加引用数据表的数据透视表。然后将所有字段拖到行标签上。然后,对于每个字段设置,在布局中选择“以表格形式显示项目标签”并删除所有小计。现在,它看起来应该与原始数据相似


然后,您可以选择记录编号上的任何位置,并在行标签上选择“Label Filters==>Between”。然后输入from和to值。

是的,您可以通过复制行(您不需要)或VBA来完成此操作。 我相信VBA是一个很好的选择

但是,如果记录编号是严格的数字,并且没有太多数据可显示,我有一个愚蠢的方法使用数据透视表

您可以添加引用数据表的数据透视表。然后将所有字段拖到行标签上。然后,对于每个字段设置,在布局中选择“以表格形式显示项目标签”并删除所有小计。现在,它看起来应该与原始数据相似


然后,您可以选择记录编号上的任何位置,并选择“标签过滤器==>Between”在行标签上。然后输入from和to值。

重点是我不想将其复制到下面的行,因为它可能包含op到200k行。这需要复制很多。应该有一个更简单的解决方案。向下复制在第二个工作表上,而不是包含数据的工作表上,这意味着您只需要复制所需的行数期望/允许“从-到-到”间隙大小为。无论发生什么情况,如果要使用公式执行此操作,至少需要复制(到-从)值的行数问题是间距大小也可能有很大的不同。可能是他们想看到所有的,或者只有10个。然后是这个或VBA。你可以帮我举一个VBA的例子吗?我一直在考虑VBA,但不幸的是,我对VBA的了解非常有限。问题是,我不想把它复制到下面的行中,因为它是ht包含op到200k行。这需要复制很多。应该有一个更简单的解决方案。向下复制在第二个工作表上,而不是在包含数据的工作表上,这意味着您只需要复制所需的行数/允许从-到-间隙大小。无论发生什么情况,如果您想要使用公式,您都需要在le处进行向下复制ast的值的行数(从到)问题是,间距大小也可能有很大的不同。可能是他们想看到所有的,或者只有10个。然后是这个或VBA。你可以帮我举一个VBA的例子吗?我一直在考虑VBA,但不幸的是,我对VBA的了解非常有限。我必须说,这确实是一个更好的解决方案,只是因为它很简单!谢谢很多!我必须说这确实是一个更好的解决方案,因为它很简单!非常感谢!
Public Sub getData()

Dim currentId As Long
Dim toId As Long

Dim wsTarget As Worksheet
Dim targetIdCol As Integer
Dim targetDataCol As Integer

Dim wsSource As Worksheet
Dim sourceIdCol As Integer
Dim sourceDataCol As Integer

Dim readRow As Long
Dim writeRow As Long


Set wsTarget = ThisWorkbook.Worksheets("Sheet2") ' name of the target worksheet
targetIdCol = 1    'number of the column where the ids are to be written (a=1)
targetDataCol = 2   'number of the column where the data is to be written

Set wsSource = ThisWorkbook.Worksheets("Sheet1") ' name of the source data worksheet
sourceIdCol = 1    'number of the column where the ids are to be read(a=1)
sourceDataCol = 2   'number of the column where the data is to be read


currentId = wsTarget.Range("A1").Value  'cell in which the from is specified (here "A1" of target worksheet)
toId = wsTarget.Range("B1").Value 'cell in which the to is specified (here "B1" of target worksheet)


readRow = 1   'row at which the data should start to be read
writeRow = 2   'row at which the data should start to be written


While (wsSource.Cells(readRow, sourceIdCol) <> "") And (currentId <= toId)

    If currentId = wsSource.Cells(readRow, sourceIdCol).Value Then
        wsTarget.Cells(readRow, targetIdCol) = wsSource.Cells(readRow, sourceIdCol).Value
        wsTarget.Cells(readRow, targetDataCol) = wsSource.Cells(readRow, sourceDataCol).Value
        readRow = readRow + 1
    Else

        If currentId > wsSource.Cells(readRow, sourceIdCol).Value Then
             readRow = readRow + 1
      Else
          currentId = currentId + 1
      End If
    End If

Wend



End Sub