ใช้ Excel เพื่อเลือกแถวล่าสุดจาก CSV หรือไม่


0

ฉันมี CSV ที่เริ่มต้นด้วยเขตข้อมูลวันที่ / เวลาและฉันต้องการนำเข้าและเลือกแถวล่าสุดและอ้างอิงในสูตรของฉัน

ฉันกำลังทดลองกับ Pivot Tables และตอนนี้จัดอันดับและ VLookup

วิธีที่ดีที่สุดในการเข้าถึงแถวล่าสุดคืออะไรและบันทึกไว้ในตำแหน่งที่แน่นอน


คุณกำลังบอกว่าแต่ละแถวเริ่มต้นด้วยเขตข้อมูลวันที่ / เวลา? นอกจากนี้แถวตามลำดับเวลาคืออะไร?
Walt Ritscher

ใช่มันเริ่มต้นด้วยเขตเวลาวันที่ แถวจะต้องเรียงลำดับ; แม้ว่าฉันอาจจะต้องใช้ vbscript สำหรับสิ่งนี้
goodguys_activate

คำตอบ:


0

การแก้ปัญหาด้านล่างเกี่ยวข้องกับมาโครซึ่งตามแท็กของคุณไม่ใช่วิธีการแก้ปัญหาที่คุณต้องการ อย่างไรก็ตามมันใช้ฟังก์ชั่นแผ่นงานและคุณอาจจะสามารถสร้างวิธีการแก้ปัญหาแผ่นงานขึ้นอยู่กับลักษณะของการนำเข้า 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.