0

filter()在 Excel 中使用该函数,并希望将输出范围更改为仅垂直返回。

在单独的表格中,我有两列。一列返回一个人的付款,下一列返回付款日期(我还有第三列用于过滤功能中使用的人员的 ID 号,但这没有输出)。

我的工作表过滤给定月份内的付款。如果只有一场比赛(例如 2010 年 1 月 1 日支付了 100场比赛),它可以正常工作并返回

100
01/01/2010

输出是这样的,因为使用transpose(). 但是,如果有多个匹配项,它将返回以下内容:

100         500
01/01/2010      01/20/2019

我的目标是让它像这样垂直输出:

100
01/01/2010
500
01/20/2019

如上所示,我如何实现它的输出?我想可以在 VBA 中编写一个用户定义的函数来分配每个输出元素,然后在函数中定义以垂直输出它——但我不知道如何处理这样的代码。

Sheet1 包含的数据如下:

Payments    Date            ID_no
100         01/01/2010      ID01
500         01/20/2019      ID01

我的filter()功能如下所示

TRANSPOSE(FILTER(Sheet1!Z2:AA13;(Sheet1!AB2:AB13=B1)*(Sheet1!AA2:AA13>S4)*(Sheet1!AA2:AA13<=T4);"")) 在哪里

Sheet1!Z2:AA13是付款和付款日期的两列

Sheet1!AB2:AB13=B1是 ID 列必须等于单元格 B1 中写入的 ID

Sheet1!AA2:AA13>S4是付款日期必须在 S4 中写的日期之上(之后)

Sheet1!AA2:AA13<=T4是日期必须低于(之前)在 T4 中写入的日期

后者确保仅包括特定时间范围(一个月)内的付款。请注意,每月付款不超过 3 次,即输出范围不会超过 6 (3x2) 行。

理想的最终结果是用户定义的函数,该函数原则上与上述相同,filter()但重新定义了输出位置,因此仅垂直输出,即如果在 A 列中键入函数,则函数的输出应仅在 A 列中

链接到文件https://wetransfer.com/downloads/c3a081f47e20fd1718510545f9a7b80820200627212111/8eeb4f

4

1 回答 1

1

请使用下一个功能。由于您没有回答我关于结果输出的问题,它将被丢弃在最后一张空列中:

Function PaymentReturn(strID As String, sh As Worksheet) As Variant
  Dim lastRow As Long, arr As Variant, arrFin As Variant
  Dim i As Long, k As Long

  lastRow = sh.Range("A" & Rows.Count).End(xlUp).row
  arr = sh.Range("A2:C" & lastRow).Value
  ReDim arrFin(UBound(arr, 1))
  For i = 1 To UBound(arr, 1)
    If arr(i, 3) = strID Then
        arrFin(k) = arr(i, 1): k = k + 1
        arrFin(k) = arr(i, 2): k = k + 1
    End If
  Next i
  ReDim Preserve arrFin(k - 1)
  PaymentReturn = arrFin
End Function

可以通过以下方式调用该函数:

Sub testFuncPaym()
   Dim sh As Worksheet, lastEmptyCol As Long, arr As Variant, strID As String
   
   strID = "ID02" 'ID to be returned
   Set sh = ActiveSheet 'use here your sheet to be processed
   lastEmptyCol = sh.Cells(1, Columns.Count).End(xlToLeft).Column + 1
   arr = PaymentReturn(strID, sh)

   sh.Cells(1, lastEmptyCol).Value = "Output"
   sh.Cells(2, lastEmptyCol).Resize(UBound(arr) + 1, 1) = WorksheetFunction.Transpose(arr)
End Sub
于 2020-06-26T12:41:44.230 回答