Bài toán so sánh với điều kiện rời rạc (1 người xem)

  • Thread starter Thread starter fibo8x
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

fibo8x

Thành viên mới
Tham gia
22/4/14
Bài viết
29
Được thích
1
Chào các bạn, mình cũng ko chắc đặt tiêu đề vậy có hợp không nữa.
mình có bài toán với 2 cột là: Cột cơ sở, và Cột Tham chiếu.
bây giờ mình muốn bôi XANH các giá trị cột cơ sở nào nếu thỏa mãn 1 trong 2 điều kiện:
1. Giá trị ở cột cơ sở > đồng thời 2 giá trị tham chiếu gần nhất với nó.
2. Giá trị cơ sở > 15% x giá trị tham chiếu gần nhất.
Ngoài ra có 1 số lưu ý là:
- giá trị bên cột tham chiếu có thể liền nhau, nhưng cũng thể cách nhau.
- chỉ so với giá trị tham chiếu bên trên 1 hàng so với giá trị cơ sở và trở lên trong vòng 12 ô.
- Giá trị cơ sở được bôi xanh cùng đồng thời phải là giá trị max của 3 ô tính từ nó trở lên.

Chi tiết trong file đính kèm ạ. Nhờ các bạn giúp mình!
 

File đính kèm

Chào các bạn, mình cũng ko chắc đặt tiêu đề vậy có hợp không nữa.
mình có bài toán với 2 cột là: Cột cơ sở, và Cột Tham chiếu.
bây giờ mình muốn bôi XANH các giá trị cột cơ sở nào nếu thỏa mãn 1 trong 2 điều kiện:
1. Giá trị ở cột cơ sở > đồng thời 2 giá trị tham chiếu gần nhất với nó.
2. Giá trị cơ sở > 15% x giá trị tham chiếu gần nhất.
Ngoài ra có 1 số lưu ý là:
- giá trị bên cột tham chiếu có thể liền nhau, nhưng cũng thể cách nhau.
- chỉ so với giá trị tham chiếu bên trên 1 hàng so với giá trị cơ sở và trở lên trong vòng 12 ô.
- Giá trị cơ sở được bôi xanh cùng đồng thời phải là giá trị max của 3 ô tính từ nó trở lên.

Chi tiết trong file đính kèm ạ. Nhờ các bạn giúp mình!
bạn chạy code
Mã:
Sub GPE()
Dim Rng As Range, dk1 As Boolean, dk2 As Boolean
Dim i As Long, ik As Long, k As Long
For j = 1 To Range("B1").End(xlToRight).Column Step 2
  Range("B2:B71").Offset(0, j - 1).Font.ColorIndex = 1
  Set Rng = Range("B2:C71").Offset(0, j - 1)
  For i = 3 To Rng.Rows.Count Step 2
    k = 0
    dk1 = False
    For ik = i - 2 To 1 Step -2
      If Rng(ik, 2) <> "" Then
        If Rng(i, 1) > Rng(ik, 2) Then k = k + 1
        If Rng(i, 1) > Rng(ik, 2) * 1.15 Or k = 2 Then dk1 = True: Exit For
      End If
      If i - ik = 24 Then Exit For
    Next ik
    If dk1 Then
      k = 0
      dk2 = False
      For ik = i - 2 To 1 Step -2
        If Rng(i, 1) > Rng(ik, 1) Then k = k + 1
        If k = 3 Then dk2 = True: Exit For
        If i - ik = 6 Then Exit For
      Next ik
      If dk2 Then Rng(i, 1).Font.ColorIndex = 5
    End If
  Next i
Next j
End Sub
 

File đính kèm

bạn chạy code
Mã:
Sub GPE()
Dim Rng As Range, dk1 As Boolean, dk2 As Boolean
Dim i As Long, ik As Long, k As Long
For j = 1 To Range("B1").End(xlToRight).Column Step 2
  Range("B2:B71").Offset(0, j - 1).Font.ColorIndex = 1
  Set Rng = Range("B2:C71").Offset(0, j - 1)
  For i = 3 To Rng.Rows.Count Step 2
    k = 0
    dk1 = False
    For ik = i - 2 To 1 Step -2
      If Rng(ik, 2) <> "" Then
        If Rng(i, 1) > Rng(ik, 2) Then k = k + 1
        If Rng(i, 1) > Rng(ik, 2) * 1.15 Or k = 2 Then dk1 = True: Exit For
      End If
      If i - ik = 24 Then Exit For
    Next ik
    If dk1 Then
      k = 0
      dk2 = False
      For ik = i - 2 To 1 Step -2
        If Rng(i, 1) > Rng(ik, 1) Then k = k + 1
        If k = 3 Then dk2 = True: Exit For
        If i - ik = 6 Then Exit For
      Next ik
      If dk2 Then Rng(i, 1).Font.ColorIndex = 5
    End If
  Next i
Next j
End Sub
Anh Hiếu cho em xin những mã code nào mã màu đó được không Anh?

Em cảm ơn Anh.
 
Thật tuyệt vời. Cảm ơn bạn HieuCD rất nhiều !!!!!!!!
Trước giờ mình chưa chạy code trên file excel bao giờ nên cho mình hỏi 1 câu ngô nghê chút là: nếu chạy thêm code có làm file excel xử lý chậm hơn thông thường nhiều không ạ? (So với việc có thể dùng tổ hợp các hàm khác, hoặc là dùng thêm cột phụ nọ kia ấy)
Tại file excel tổng của mình đang nặng khoảng 10MB và có tới 20 sheet nên thỉnh thoảng mỗi lần thay đổi dữ liệu thấy nó xử lý hơi chậm...
Với nữa là, trong trường hợp này liệu có giải pháp nào khác mà chỉ sử dụng các hàm thôi không ạ?
Vì cái file tổng của mình nó thêm nhiều các cột linh tinh khác nữa mà mình vì gà mờ nên dù nhìn code cho ví dụ này ok rồi nhưng chưa biết thay đổi thêm thế nào để ứng dụng được vào file dữ liệu tổng hợp mới chết cơ ... :(( :(( :((.
Bạn ơi, liệu có giải pháp khác nữa không??
Hay bắt buộc phải học thêm về code ạ... :(( , :((
 
Thật tuyệt vời. Cảm ơn bạn HieuCD rất nhiều !!!!!!!!
Trước giờ mình chưa chạy code trên file excel bao giờ nên cho mình hỏi 1 câu ngô nghê chút là: nếu chạy thêm code có làm file excel xử lý chậm hơn thông thường nhiều không ạ? (So với việc có thể dùng tổ hợp các hàm khác, hoặc là dùng thêm cột phụ nọ kia ấy)
Tại file excel tổng của mình đang nặng khoảng 10MB và có tới 20 sheet nên thỉnh thoảng mỗi lần thay đổi dữ liệu thấy nó xử lý hơi chậm...
Với nữa là, trong trường hợp này liệu có giải pháp nào khác mà chỉ sử dụng các hàm thôi không ạ?
Vì cái file tổng của mình nó thêm nhiều các cột linh tinh khác nữa mà mình vì gà mờ nên dù nhìn code cho ví dụ này ok rồi nhưng chưa biết thay đổi thêm thế nào để ứng dụng được vào file dữ liệu tổng hợp mới chết cơ ... :(( :(( :((.
Bạn ơi, liệu có giải pháp khác nữa không??
Hay bắt buộc phải học thêm về code ạ... :(( , :((
Khi dùng hàm, mỗi lấn enter excel sẽ xử lý lại tất cả công thức, dùng code VBA chỉ gán giá trị nên nhẹ hơn dùng hàm rất nhiều
Bài nầy dùng hàm cũng được, nhưng khá dài và sẽ làm file nặng thêm
Bạn có thể gởi mẩu các cột và dòng của file thực tế để có thể chỉnh code phù hợp
 
Bạn ơi, nếu tại dữ liệu đó mà vừa có Condition Format vừa có chạy code, thì nó ưu tiên hiển thị theo cái nào? (ví dụ CF thì bôi đỏ, code bôi xanh)
Tại vì nếu dùng hàm ở CF, mình sẽ biết để thứ tự ưu tiên cho cái nào hơn.
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom