从单独工作表上的数据转储中按特定顺序提取数据

从单独工作表上的数据转储中按特定顺序提取数据

我正在尝试从“USD-ZAR”工作表中提取数据。代码运行完美。唯一的问题是数据是按降序排列的,而不是按升序排列的,而升序排列是更理想的。我该如何解决这个问题?

这是数据转储,数据从中提取

数据转储

这是提取的数据,而不是从最近的数据(即 2 月 28 日)开始。我想从第一个日期(即 2 月 3 日)开始。

输出

Private Sub Worksheet_Change(ByVal Target As Range)

Sheets("Filter").Select

    If Not Intersect(Target, Target.Worksheet.Range("B2")) Is Nothing Then
        Call FilterMacro
    End If

    If Not Intersect(Target, Target.Worksheet.Range("B3")) Is Nothing Then
        Call FilterMacro
    End If

    If Not Intersect(Target, Target.Worksheet.Range("B6")) Is Nothing Then
        Call FilterMacro
    End If

End Sub


Sub FilterMacro()


'creating variables
Dim lrow, lrowFilter, frow As Long
Dim cell, rngDate As Range
Dim period, year As String
Dim ws As Worksheet
Dim result As String
Dim ColCurrency As Long


'delete old list
Sheets("Filter").Range("C2:D1000").Value = ""

'define period and year
period = Sheets("Filter").Range("B3").Value
year = Sheets("Filter").Range("B2").Value

'define worksheet
Set ws = Sheets("USD-ZAR")

'define first and last rows
frow = 1
lrowFilter = Sheets("Filter").Range("B65000").End(xlUp).Row
lrow = Sheets("USD-ZAR").Range("B65000").End(xlUp).Row


'define ranges
Set rngDate = Sheets("USD-ZAR").Range(Sheets("USD-ZAR").Cells(frow, "C"), _
Sheets("USD-ZAR").Cells(lrow, "C"))


'select currency pairs
If Sheets("Filter").Range("B6").Value = "USD/ZAR" Then
    ColCurrency = 2

ElseIf Sheets("Filter").Range("B6").Value = "EUR/HUF" Then
    ColCurrency = 2

ElseIf Sheets("Filter").Range("B6").Value = "USD/EUR" Then
    ColCurrency = 4
End If



'Cycle
For Each cell In rngDate

  'Condition
  If cell.Value Like year & "*" & period & "*" Then
    lrowFilter = Sheets("Filter").Range("C65000").End(xlUp).Row
        Sheets("Filter").Cells(lrowFilter + 1, "C").Value = _
        ws.Cells(cell.Row, cell.Column).Value

        Sheets("Filter").Cells(lrowFilter + 1, "D") = _
        ws.Cells(cell.Row, ColCurrency).Value
  End If

Next cell


'Error handling
If Sheets("Filter").Range("C2").Value = "" Then
    MsgBox "No data. Please select another period!"
End If

Sheets("Filter").Select

End Sub

Sub Create_Line_Chart()
 'create a line chart in excel with this macro

 ActiveSheet.Shapes.AddChart.Select
 ActiveChart.SetSourceData Source:=Range("'Filter'!$C$2:$D$22")
 ActiveChart.ChartType = xlLine

End Sub

答案1

我想建议两种可能的方法,一种是提取文本数据,另一种是提取日期/数字。

方法 1:

在此处输入图片描述

怎么运行的:

  • 将数字按系列放在辅助列中(这里是col E)。

  • 单元格中的数组(CSE)公式D111

    {=IFERROR(INDEX(USD-ZAR!$C$111:$C$122, MATCH(SMALL(IF($D$109=USD-ZAR!$A$111:$A$122, $E$111:$E$122, ""), ROW(A1)), IF($D$109=USD-ZAR!$A$111:$A$122, $E$111:$E$122, ""),0)),"")}
    

注意:

  • 您可以根据需要扩展列表(用于辅助列)。
  • 单元格D109具有在提取表单时过滤数据的标准USD-ZAR sheet
  • 完成配方Ctrl+Shift+Enter& 向下填充。
  • 为了以后整洁,您可以隐藏Helper Column E

  • 根据需要调整公式中的单元格引用。


方法 2:

在此处输入图片描述

怎么运行的:

  • 03/01/2020在单元格中输入E109并在单元格中F109插入03/31/2020
  • mmm不断E109地应用单元格格yyyyF109
  • 单元格中的数组(CSE)公式F112

    =IFERROR(SMALL(IF((USD-ZAR!$B$111:$B$122>=$E$109)*(USD-ZAR!$B$111:$B$122<=$F$109), USD-ZAR!$B$111:$B$122, "A"), ROWS($A$1:A1)),"")
    

注意:

  • 完成配方Ctrl+Shift+Enter& 向下填充。
  • 根据需要调整公式中的单元格引用。

相关内容