Nội suy tuyến tính theo cột thời gian

Liên hệ QC

Thư Sinh Áo Trắng

Thành viên hoạt động
Tham gia
26/3/21
Bài viết
160
Được thích
31
- Em thấy khó quá và cực quá! Xin giúp đỡ!
- Hình ảnh vấn đề cần giúp đỡ bằng VBA(file đính kèm).Với x, y, z là cột thời gian (ví dụ 00:30, 01:00,...,23:30 và hh:mm có mm là số phút tùm lum nưac ạ), còn ab là các giá trị trên và dưới dấu ?. Hãy tìm giá trị ở vị trí dấu ?. Xin chân thành cảm ơn!
- File gốc 100.000 dòng ( Một trăm ngìn dòng)
minhhoa.jpg

- Hình ảnh công thức nội suy
noisuytuyentinh.jpg
- Xin các anh giúp cho phần code VBA tìm giá trị nội suy theo cột thời gian!Em chân thành cảm ơn!
 

File đính kèm

  • noisuytheocotthoigian.xlsm
    71.4 KB · Đọc: 19
Lần chỉnh sửa cuối:
Cảm ơn anh! Em đọc đi đọc lại vẫn chưa hiểu hết. Em thấy code phức tạp về toán (lồng nhiều vòng for vào nhìn code nó đẹp thật, nhìn thích mắt), 1 2 vòng for còn nhìn ra đc. Nhưng nhiều hơn là phức tạp. Các anh xây dựng lồng nhiều vòng lặp, anh có thể chia sẻ cách xây dựng anh hay làm em học theo với ạ!
Rút lại còn 2 vòng For
Mã:
Sub Noisuytuyentinh()
  Dim Rng As Range, sRow&, i&, r3&, r4&, k&, t#, h#, j&

  With Sheets("Sheet1")
    i = .Range("A" & Rows.Count).End(xlUp).Row 'Bo lenh nay
    .Range("A2:D" & i).Value = .Range("O2:R" & i).Value 'Bo lenh nay
    Set Rng = .Range("A2:D" & .Range("A" & Rows.Count).End(xlUp).Row)
  End With
  sRow = Rng.Rows.Count
 
  Application.ScreenUpdating = False
  For i = 1 To sRow - 1
    If Rng(i, 3).Value <> Empty And Rng(i + 1, 3).Value = Empty Then r3 = i
    If Rng(i, 3).Value = Empty And Rng(i + 1, 3).Value <> Empty Then
      t = Rng(i + 1, 1) + Rng(i + 1, 2) - Rng(r3, 1) - Rng(r3, 2)
      For k = r3 + 1 To i
        h = (Rng(k, 1) + Rng(k, 2) - Rng(r3, 1) - Rng(r3, 2)) / t
        Rng(k, 3).Value = (Rng(r3, 3) + h * (Rng(i + 1, 3) - Rng(r3, 3)))
      Next k
    End If
    
    If Rng(i, 4).Value <> Empty And Rng(i + 1, 4).Value = Empty Then r4 = i
    If Rng(i, 4).Value = Empty And Rng(i + 1, 4).Value <> Empty Then
      t = Rng(i + 1, 1) + Rng(i + 1, 2) - Rng(r4, 1) - Rng(r4, 2)
      For k = r4 + 1 To i
        h = (Rng(k, 1) + Rng(k, 2) - Rng(r4, 1) - Rng(r4, 2)) / t
        Rng(k, 4).Value = (Rng(r4, 4) + h * (Rng(i + 1, 4) - Rng(r4, 4)))
      Next k
    End If
  Next i
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom