ฉันมี CSV ที่เริ่มต้นด้วยเขตข้อมูลวันที่ / เวลาและฉันต้องการนำเข้าและเลือกแถวล่าสุดและอ้างอิงในสูตรของฉัน
ฉันกำลังทดลองกับ Pivot Tables และตอนนี้จัดอันดับและ VLookup
วิธีที่ดีที่สุดในการเข้าถึงแถวล่าสุดคืออะไรและบันทึกไว้ในตำแหน่งที่แน่นอน
ฉันมี CSV ที่เริ่มต้นด้วยเขตข้อมูลวันที่ / เวลาและฉันต้องการนำเข้าและเลือกแถวล่าสุดและอ้างอิงในสูตรของฉัน
ฉันกำลังทดลองกับ Pivot Tables และตอนนี้จัดอันดับและ VLookup
วิธีที่ดีที่สุดในการเข้าถึงแถวล่าสุดคืออะไรและบันทึกไว้ในตำแหน่งที่แน่นอน
คำตอบ:
การแก้ปัญหาด้านล่างเกี่ยวข้องกับมาโครซึ่งตามแท็กของคุณไม่ใช่วิธีการแก้ปัญหาที่คุณต้องการ อย่างไรก็ตามมันใช้ฟังก์ชั่นแผ่นงานและคุณอาจจะสามารถสร้างวิธีการแก้ปัญหาแผ่นงานขึ้นอยู่กับลักษณะของการนำเข้า CSV
ฉันหวังว่าโซลูชันเหล่านี้อย่างใดอย่างหนึ่งจะได้ผลสำหรับคุณ
หมายเหตุ: วิธีการแก้ปัญหาไม่ขึ้นอยู่กับข้อมูลที่ถูกเรียงลำดับ
คำอธิบายของวิธีแก้ปัญหา VBA และแผ่นงานที่เทียบเท่า
ขั้นตอนในการแก้ปัญหาคือ:
ค้นหาแถวด้านล่างของข้อมูล แป้นพิมพ์ที่เทียบเท่าของ VBA คือ: ไปที่ด้านล่างของคอลัมน์ A จากนั้นขึ้นไปที่เซลล์ที่ไม่ว่างแรก อย่างไรก็ตามคุณอาจไม่จำเป็นต้องมีแผ่นงานเทียบเท่ากับขั้นตอนนี้
ฉันไม่สามารถคิดถึงเวิร์กชีทที่เทียบเท่ากับคำสั่งถัดไปซึ่งแปลงสตริงวันที่เป็นตัวเลขวันที่ การแปลงนี้จะไม่จำเป็นหากการนำเข้าของคุณทำการแปลงนี้สำหรับคุณ
ขั้นตอนต่อไปคือการหาค่าสูงสุดในคอลัมน์ A วันที่ของ Excel คือตัวเลขดังนั้น MAX จะทำสิ่งนี้ให้คุณ หากคุณรู้ว่าจะไม่มีแถวมากกว่า 2,000 แถวคุณสามารถใช้:
=MAX(A2:A2000)
ขั้นตอนสุดท้ายคือการระบุแถวสำหรับค่าสูงสุด หากค่าสูงสุดอยู่ในเซลล์ X1 ดังนั้น:
=1 + MATCH(X1,A2:A2000,0)
เทียบเท่ากับแป้นพิมพ์ของขั้นตอนนี้
โซลูชั่น VBA
Option Explicit
Sub FindLatestDate()
Dim DateCol() As Variant
Dim DateMax As Date
Dim RngData As String
Dim RowDateMax As Integer
Dim RowMax As Integer
With Sheets("Sheet2")
RowMax = .Cells(Rows.Count, "A").End(xlUp).Row ' Find bottom column of data.
RngData = "A2:A" & RowMax 'Assume first data row is 2.
' If column A contains strings that Excel can correctly
' interpret as dates, force Excel to do so.
DateCol = .Range(RngData).Value
.Range(RngData).Value = DateCol
' Excel dates are integer values. Excel date/times are real values.
' Get the maximum value in the range.
DateMax = Application.WorksheetFunction.Max(.Range(RngData))
' The use of CLng assumes the date does not include a time.
' Use CDbl if the date does include a time
RowDateMax = 1 + _
Application.WorksheetFunction.Match(CLng(DateMax), .Range(RngData), 0)
' RowDateMax gives you the value you seek.
' This code does not rely on the CSV being in date order
End With
End Sub