【问题标题】:Finding multiple instances in multiple columns在多列中查找多个实例
【发布时间】:2017-08-30 12:03:34
【问题描述】:

在 Excel 中,我希望在单列中对多列中的一些条目进行排序和过滤。 表格如下所示:

    Day    Product.ID Quantity Time Product.ID Quantity Time Product.ID Quantity Time  
    1/1/17 9987/7     2500     8    11774      500      12   447/77     1400     4 
    2/1/17 9987/7     2350     8    2248/5     600      11   9987/7     1400     4 
    3/1/17 2248/5     3500     7    11774      650      12   447/77     1400     4 
    6/1/17 447/77     5500     8    11774      550      10   447/77     1400     4 
    7/1/17 9987/7     2000     6    2248/5     500      12   11774      1400     4

我想生成一个“查询”,我可以在其中以类似的方式生成报告:

    Product.ID: 9987/7 (drop down menu)
    Day    Quantity Time
    1/1/17 2500     8
    2/1/17 2350     8
    2/1/17 1400     4
    7/1/17 2000     6

从那里我可以推断出我所有的数据和结论。我知道如何检查单个列和INDEXVLOOKUP 其他单元格,但我不知道如何这样做。 我无法转置单列上的数据,因为它们来自已编译的表格,其中包含每台机器的生产数据。

谢谢大家

【问题讨论】:

  • 向我们展示你做了什么以及你在哪里遇到了问题。为什么数据源会影响您是否可以将新工作簿中的数据重新格式化为一组列?
  • 这是我用来从第一列获取数据的基本公式 =IF(ISERROR(INDEX($A$1:$B$8,SMALL(IF($A$1:$A$8 =$E$1,ROW($A$1:$A$8)),ROW(1:1)),2)),"",INDEX($A$1:$B$8,SMALL(IF($A$1: $A$8=$E$1,ROW($A$1:$A$8)),ROW(1:1)),2)) 我当然改变了参考表和输出(这个来自@987654321 @) 我会粘贴我实际使用的那个,但 Excel 是意大利语的,所以理解或翻译会很麻烦。
  • 数据无法在单个列中重新格式化,因为 sheet1 将使用新数据每天更新,而不是由我来更新。对于我所处的工作环境(IT 技能低),即使要求他们填写数字表格也很难
  • 好的,VBA 解决方案是合适的,但最好的解决方案取决于您真正想要做什么。最简单的是,如果您的查询仅涉及选择 Product.ID(如您在示例中所示)。甚至可能生成一个表格,其中列出了所有 Product.ID 结果。对于low IT skill 用户,您可以只显示一个按钮来启动操作,然后是一个带有下拉列表的组合框;然后生成报告。给这只猫剥皮的方法有很多种,具体取决于你想做什么。

标签: excel


【解决方案1】:

我尝试重新创建您的电子表格 并将结果放入Cells L中。

我写了一些快速的 VBA 代码,可以作为参考来解决您的问题。您可以制作一个按钮来触发过滤功能并让它填充。

Sub filter():
Dim i, j, k As Integer
Dim product_id As String
Dim column_len, row_len As Integer

'clearing content from previous entry
Sheets("Sheet1").Range("L3:N6").ClearContents

'Determining variable for row and columns
product_id = Sheets("Sheet1").Range("M2").Value
column_len = Cells.CurrentRegion.Columns.Count
row_len = Cells.CurrentRegion.Rows.Count
k = 3

'for loop through the columns and row to find the product_id and populate 
'the results box with Date, Product.ID and Quantity

For i = 1 To column_len
    If (Sheets("Sheet1").Cells(1, i).Value = "Product.ID") Then
        For j = 1 To row_len
            If (Sheets("Sheet1").Cells(j, i).Value = product_id) Then
                Sheets("Sheet1").Cells(k, 12).Value = Sheets("Sheet1").Cells(j, 1).Value
                Sheets("Sheet1").Cells(k, 12 + 1).Value = Sheets("Sheet1").Cells(j, i).Value
                Sheets("Sheet1").Cells(k, 12 + 2).Value = Sheets("Sheet1").Cells(j, i + 1).Value
                k = k + 1
            End If
        Next j
    End If
Next i

End Sub

【讨论】:

  • 非常感谢。我会尝试实现它。我对 VBA 不是很熟悉,我仍然会寻找仅使用 excel 代码的类似解决方案,但作为临时解决方案,这可能是最好的。
  • 我已经设法查看了您的代码,但有一个问题,那就是日期。这是一个快速修复,Sheets("Sheet1").Cells(k, 12).Value = Sheets("Sheet1").Cells(j, i - 1).Value 应该读为Sheets("Sheet1").Cells(k, 12).Value = Sheets("Sheet1").Cells(j, 1).Value 此外,在这种情况下,最好先检查每一行,然后检查每一列,但这是一个快速调整。感谢您的宝贵时间
  • 是的,你是对的。我错过了那个。我记得考虑过这一点,但忘记在代码中实现它。我将编辑我的答案。我正在使用 VBA,因为我认为 Excel 并非旨在处理这种数据结构,而无需更改格式或将报告复制到另一张工作表中并对其进行预处理。但也许这只是我有限的 excel 知识。
  • 我在这里和那里调整你的解决方案(我正在处理的数据是工厂的生产统计数据,我不确定我能透露多少)但我会更新等我做完所有事情就给你答复。
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多