我正在尝试从“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
地应用单元格格yyyy
式F109
。单元格中的数组(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& 向下填充。
- 根据需要调整公式中的单元格引用。