Xác định Min và Max

Liên hệ QC

Mai.Vũ

Thành viên mới
Tham gia
21/6/19
Bài viết
22
Được thích
1
Em muốn tìm mã code để tìm các giá trị Min, Max và distance như cột Min, Max và distance trong file.
Các giá trị sẽ được xác định lần lượt từ trên xuống dưới và các giá trị distance = abs(min - cumRet) hoặc = abs(max - cumRet)
A/C/B nào có kinh nghiệm thì cho em gợi ý với ạ
 

File đính kèm

  • Xác định giá trị min max.xls
    73.5 KB · Đọc: 8
Em muốn tìm mã code để tìm các giá trị Min, Max và distance như cột Min, Max và distance trong file.
Các giá trị sẽ được xác định lần lượt từ trên xuống dưới và các giá trị distance = abs(min - cumRet) hoặc = abs(max - cumRet)
A/C/B nào có kinh nghiệm thì cho em gợi ý với ạ
Cho hỏi cái nguyên lý hoạt động cái.Bạn giải thích xem nào.
 
Upvote 0
Cho hỏi cái nguyên lý hoạt động cái.Bạn giải thích xem nào.
Với số liệu cột cumret, mình muốn xác định các giá cột min max.
Tại 9:30,
giá trị cumret đầu tiên(9:30) sẽ được mặc định là min hoặc max bằng cách:
Nếu distance (9:31) tính được > 1.2 thì sẽ tạm dừng, nếu chưa lớn hơn 1.2 thì tiếp tục tính 9:32,.. cho đến khi giá trị distance >1.2.
Sau đó, nếu giá trị cumret tại thời gian có distance > 1.2 mà lớn hơn giá trị đầu tiên(9:30) thì giá trị đầu ( 9:30 ) là giá trị Min. Nếu nhỏ hơn thì là Max.

Sau khi xác định được hướng đầu, bước đi tiếp theo lại dễ dàng hơn.
* Nếu 9:30 là giá trị Min, sau khi có distance > 1.2 sẽ chuyển sang là giá trị Max.
* Nếu 9:30 là giá trị Max, sau khi có distance >1.2 sẽ chuyển sang là giá trị Min
 
Upvote 0
Với số liệu cột cumret, mình muốn xác định các giá cột min max.
Tại 9:30,
giá trị cumret đầu tiên(9:30) sẽ được mặc định là min hoặc max bằng cách:
Nếu distance (9:31) tính được > 1.2 thì sẽ tạm dừng, nếu chưa lớn hơn 1.2 thì tiếp tục tính 9:32,.. cho đến khi giá trị distance >1.2.
Sau đó, nếu giá trị cumret tại thời gian có distance > 1.2 mà lớn hơn giá trị đầu tiên(9:30) thì giá trị đầu ( 9:30 ) là giá trị Min. Nếu nhỏ hơn thì là Max.

Sau khi xác định được hướng đầu, bước đi tiếp theo lại dễ dàng hơn.
* Nếu 9:30 là giá trị Min, sau khi có distance > 1.2 sẽ chuyển sang là giá trị Max.
* Nếu 9:30 là giá trị Max, sau khi có distance >1.2 sẽ chuyển sang là giá trị Min
Bạn xem code nhé.
Mã:
Sub timinmax()
Application.ScreenUpdating = False
    Dim arr, i As Long, max As Double, min As Double, lr As Long, dk As Boolean, a As Long
    With Sheets("sheet1")
         lr = .Range("B" & Rows.Count).End(xlUp).Row
         .Range("c2:E" & lr).ClearContents
         arr = .Range("B2:E" & lr).Value
         For i = 1 To UBound(arr)
            arr(i, 4) = arr(1, 1)
            arr(i, 2) = Abs(arr(i, 1) - arr(i, 4))
            If arr(i, 2) > 1.2 Then
               If arr(i, 2) > arr(1, 1) Then
                  dk = False
                  min = arr(i, 1)
               Else
                  dk = True
                  max = arr(i, 1)
               End If
               a = i + 1
               Exit For
           End If
        Next i
        For i = a To UBound(arr)
            If dk = True Then
               If arr(i, 1) > max Then max = arr(i, 1)
                  arr(i, 4) = max
                  arr(i, 2) = Abs(arr(i, 1) - max)
                  If arr(i, 2) > 1.2 Then
                     min = arr(i, 1)
                     dk = False
                  End If
            Else
               If arr(i, 1) < min Then min = arr(i, 1)
                  arr(i, 3) = min
                  arr(i, 2) = Abs(arr(i, 1) - min)
                  If arr(i, 2) > 1.2 Then
                     max = arr(i, 1)
                     dk = True
                  End If
            End If
       Next i
       .Range("B2:E" & lr).Value = arr
End With
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Xác định giá trị min max.xlsm
    29.3 KB · Đọc: 8
Upvote 0
@snow25
Bạn ơi, bạn giúp mình xíu nữa được không ạ.
Mình muốn tạo thêm một cột chứa các điểm uốn tên là "inflection point".
Ví dụ như thế này:
Sau khi xác định được các giá trị Min-Max-distance, ta xác định một cột "Threshold judgment" gồm các giá trị "True" nếu giá trị cột distance >1.2 và "False" nếu giá trị cột distance <= 1.2.
Với mỗi giá trị "True" tại cột "Threshold judgment" ta sẽ có các giá trị ở cột "Min" hay "Max" tướng ứng.
và các giá trị điểm uốn chính là các dòng có giá trị bằng đúng với các giá trị trong cột Min hay Max mà ta tìm được.
Bạn có thể gợi ý cho mình code cái phần này nữa không ạ, mình thường làm trên Python, chưa sử dụng VBA bao giờ.
Cám ơn bạn rất nhiều.
 

File đính kèm

  • ảnh 2.jpg
    ảnh 2.jpg
    297.1 KB · Đọc: 4
  • Xác định giá trị min max_continue.xls
    85 KB · Đọc: 1
Upvote 0
@snow25
Bạn ơi, bạn giúp mình xíu nữa được không ạ.
Mình muốn tạo thêm một cột chứa các điểm uốn tên là "inflection point".
Ví dụ như thế này:
Sau khi xác định được các giá trị Min-Max-distance, ta xác định một cột "Threshold judgment" gồm các giá trị "True" nếu giá trị cột distance >1.2 và "False" nếu giá trị cột distance <= 1.2.
Với mỗi giá trị "True" tại cột "Threshold judgment" ta sẽ có các giá trị ở cột "Min" hay "Max" tướng ứng.
và các giá trị điểm uốn chính là các dòng có giá trị bằng đúng với các giá trị trong cột Min hay Max mà ta tìm được.
Bạn có thể gợi ý cho mình code cái phần này nữa không ạ, mình thường làm trên Python, chưa sử dụng VBA bao giờ.
Cám ơn bạn rất nhiều.
Bạn xem code nhé.
Mã:
Sub timinmax()
Application.ScreenUpdating = False
    Dim arr, i As Long, max As Double, min As Double, lr As Long, dk As Boolean, a As Long
    With Sheets("sheet1")
         lr = .Range("B" & Rows.Count).End(xlUp).Row
         .Range("c2:G" & lr).ClearContents
         arr = .Range("B2:G" & lr).Value
         arr(1, 6) = arr(1, 1)
         For i = 1 To UBound(arr)
            arr(i, 4) = arr(1, 1)
            arr(i, 2) = Abs(arr(i, 1) - arr(i, 4))
            If arr(i, 2) > 1.2 Then
               If arr(i, 2) > arr(1, 1) Then
                  dk = False
                  min = arr(i, 1)
               Else
                  dk = True
                  max = arr(i, 1)
               End If
               a = i + 1
               arr(i, 6) = arr(i, 1)
               arr(i, 5) = "True"
               Exit For
           Else
              arr(i, 5) = "FALSE"
           End If
        Next i
        For i = a To UBound(arr)
            If dk = True Then
               If arr(i, 1) > max Then max = arr(i, 1): arr(i, 6) = max
                  arr(i, 4) = max
                  arr(i, 2) = Abs(arr(i, 1) - max)
                  If arr(i, 2) > 1.2 Then
                     min = arr(i, 1)
                     dk = False
                     arr(i, 5) = "True"
                  Else
                     arr(i, 5) = "FALSE"
                  End If
                  
            Else
               If arr(i, 1) < min Then min = arr(i, 1): arr(i, 6) = min
                  arr(i, 3) = min
                  arr(i, 2) = Abs(arr(i, 1) - min)
                  If arr(i, 2) > 1.2 Then
                     max = arr(i, 1)
                     dk = True
                      arr(i, 5) = "True"
                  Else
                     arr(i, 5) = "FALSE"
                  End If
            End If
       Next i
       .Range("B2:G" & lr).Value = arr
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bạn xem code nhé.
Mã:
Sub timinmax()
Application.ScreenUpdating = False
    Dim arr, i As Long, max As Double, min As Double, lr As Long, dk As Boolean, a As Long
    With Sheets("sheet1")
         lr = .Range("B" & Rows.Count).End(xlUp).Row
         .Range("c2:G" & lr).ClearContents
         arr = .Range("B2:G" & lr).Value
         arr(1, 6) = arr(1, 1)
         For i = 1 To UBound(arr)
            arr(i, 4) = arr(1, 1)
            arr(i, 2) = Abs(arr(i, 1) - arr(i, 4))
            If arr(i, 2) > 1.2 Then
               If arr(i, 2) > arr(1, 1) Then
                  dk = False
                  min = arr(i, 1)
               Else
                  dk = True
                  max = arr(i, 1)
               End If
               a = i + 1
               arr(i, 6) = arr(i, 1)
               arr(i, 5) = "True"
               Exit For
           Else
              arr(i, 5) = "FALSE"
           End If
        Next i
        For i = a To UBound(arr)
            If dk = True Then
               If arr(i, 1) > max Then max = arr(i, 1): arr(i, 6) = max
                  arr(i, 4) = max
                  arr(i, 2) = Abs(arr(i, 1) - max)
                  If arr(i, 2) > 1.2 Then
                     min = arr(i, 1)
                     dk = False
                     arr(i, 5) = "True"
                  Else
                     arr(i, 5) = "FALSE"
                  End If
                 
            Else
               If arr(i, 1) < min Then min = arr(i, 1): arr(i, 6) = min
                  arr(i, 3) = min
                  arr(i, 2) = Abs(arr(i, 1) - min)
                  If arr(i, 2) > 1.2 Then
                     max = arr(i, 1)
                     dk = True
                      arr(i, 5) = "True"
                  Else
                     arr(i, 5) = "FALSE"
                  End If
            End If
       Next i
       .Range("B2:G" & lr).Value = arr
End With
Application.ScreenUpdating = True
End Sub
Ok. Cám ơn bạn nha <3
 
Upvote 0
Web KT
Back
Top Bottom