Tìm giá trị MAX - MIN có điều kiện?

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi
Liên hệ QC

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
Chào các a(c) trong GPE, e có số liệu cột C và giá trị cột O
yêu cầu tìm giá trị lớn nhất cột O ứng với cột C, sau đó tô đậm giá trị lớn nhất vừa tìm..
ghi chú: nếu có thể các a(c) viết code càng đơn giản càng tốt, hoặc nếu code dài dòng nhưng cụ thể để e từ từ ngâm....cứu
và không qua bước trung gian nào nhe...!!
( cho biến i đi từ trên xuống dưới ứng cột O với tên cột C thấy số nào lớn nhất thì đánh dấu nó-tô dậm,...cứ tiếp tục xuống)
2014-07-25_17-33-58.jpg
e chân thành cảm ơn
 

File đính kèm

Chào các a(c) trong GPE, xin các a(C) giúp cho e bài #39, e đợi 2 ngày rồi mà chưa thấy hồi âm...!!
e chân thành cảm ơn..!1
bạn đã tìm được code phù hợp theo ý mình? , bây giờ phát sinh muốn tìm Max(giá trị tuyệt đối) ,sẽ có 2 hướng đi cho bạn :
* Tạo cột phụ : cột này gôm các giá trị tuyệt đối của cột cần so sánh, cột này sẽ là cột tham chiếu trong code của bạn
* Tìm hiểu thêm về hàm Abs() trong VBA, thêm ABS( giá trị) vào các đoạn code có xuất hiện toán tử so sánh >,< ,=
 
Upvote 0
bạn đã tìm được code phù hợp theo ý mình? , bây giờ phát sinh muốn tìm Max(giá trị tuyệt đối) ,sẽ có 2 hướng đi cho bạn :
* Tạo cột phụ : cột này gôm các giá trị tuyệt đối của cột cần so sánh, cột này sẽ là cột tham chiếu trong code của bạn
* Tìm hiểu thêm về hàm Abs() trong VBA, thêm ABS( giá trị) vào các đoạn code có xuất hiện toán tử so sánh >,< ,=
Đã dùng code rồi còn xúi thêm cột phụ là sao?
Trong code của mình thêm vài dòng nữa là xử ngọt cái yêu cầu của chủ thớt, tại mình thích lưng chừng thế đấy. Để cho đói thật đói thì ăn mới ngon.
*******
To: Nad582
Bài toán đơn giản, nhưng bạn nên suy nghĩ cách đi. Bảo đảm có cách rất đơn giản. Với code hiện tại chỉ thêm vào có tẹo nữa là được
Chắn chắn là phải có thêm hàm ABS() để lấy giá trị tuyệt đối

Phải để cho bạn suy nghĩ coi như phạt cái tội lúc đầu đưa dữ liệu lên 1 kiểu rồi sau đó phát sinh kiểu khác
 
Lần chỉnh sửa cuối:
Upvote 0
Trong code của mình thêm vài dòng nữa là xử ngọt cái yêu cầu của chủ thớt, tại mình thích lưng chừng thế đấy. Để cho đói thật đói thì ăn mới ngon.
*******
To: Nad582
Bài toán đơn giản, nhưng bạn nên suy nghĩ cách đi. Bảo đảm có cách rất đơn giản. Với code hiện tại chỉ thêm vào có tẹo nữa là được
Chắn chắn là phải có thêm hàm ABS() để lấy giá trị tuyệt đối
a thật là bí ẩn, thật ko đơn giản hì hì, tạo nhiều điều bất ngờ cho người đặt câu hỏi!!
ko biết phải đặt cái ABS() ở đâu đây??????????????????
 
Upvote 0
Đã dùng code rồi còn xúi thêm cột phụ là sao?
cái này là mẹo cho người sử dụng : khi đã có hàm tìm max của 1 cột rồi, người dùng không có khả năng chỉnh sửa code, hoặc là không có mã nguồn của code.Trường hợp phát sinh muốn tìm Max(trị tuyệt đối) --> thì phải tạo một cột phụ chứa các giá trị tuyệt đối, rồi dùng chính cột này làm tham chiếu cho hàm tìm max đã có --=0 cái này là tư duy nhạy bén cơ bản mà anh !
 
Upvote 0
cái này là mẹo cho người sử dụng : khi đã có hàm tìm max của 1 cột rồi, người dùng không có khả năng chỉnh sửa code, hoặc là không có mã nguồn của code.Trường hợp phát sinh muốn tìm Max(trị tuyệt đối) --> thì phải tạo một cột phụ chứa các giá trị tuyệt đối, rồi dùng chính cột này làm tham chiếu cho hàm tìm max đã có --=0 cái này là tư duy nhạy bén cơ bản mà anh !
Đã nói là không dùng cột phụ mà, chỉ nhiêu đó thôi, ghép hàm ABS() vào code luôn chứ. Thách thách thách đó, viết đi. Mình nói đơn giản lắm. Ka ka ka
 
Upvote 0
Nếu cần tìm max các abs của các ô trong range thì có thể tìm max và min của range rồi so sánh trị tuyệt đối của 2 kết quả.
 
Upvote 0
e làm mãi mà ko ra đuọc, mong a giúp dùm e luôn...chân thành cảm ơn...
Dữ liệu vẫn là tại cột C, O, P nha. Mình viết sẵn đánh dấu cho 3 cột luôn. Không thích cái nào thì bỏ ra
PHP:
Sub t2()
Dim data(), n, i, Fr, rng, a, b, c
data = Range([C14], [C65536].End(3).Offset(1)).Value
i = 1
Do
   If n = 0 Then Fr = i
   If data(i, 1) = data(i + 1, 1) Then
      n = 1
   Else
      Set rng = Range("O" & Fr + 13 & ":O" & i + 13)
      a = rng.Find(Application.Max(rng))
      b = rng.Find(Application.Min(rng))
      c = IIf(Abs(b) > a, b, a)
      rng.Find(c).Interior.Color = vbCyan
      rng.Find(c).Offset(, -12).Interior.Color = vbCyan
      Set rng = rng.Offset(, 1)
      a = rng.Find(Application.Max(rng))
      b = rng.Find(Application.Min(rng))
      c = IIf(Abs(b) > a, b, a)
      rng.Find(c).Interior.Color = vbCyan
      rng.Find(c).Offset(, -13).Interior.Color = vbCyan
      n = 0
   End If
   i = i + 1
Loop Until i >= UBound(data)
End Sub
 
Upvote 0
tính nhầm. xin lỗi phải xoá
 
Lần chỉnh sửa cuối:
Upvote 0
Hay là thử tạm code này coi sao.
Code này đơn giản, có thể tự phát triển thêm
PHP:
Sub t1()
Dim r, Fr, n, rng1, rng2
r = 14
Do
   If n = 0 Then Fr = r
   If Cells(r, 3) = Cells(r + 1, 3) Then
      n = n + 1
   Else
      Set rng1 = Range(Cells(Fr, 15), Cells(r, 15))
      Set rng2 = rng1.Offset(, 1)
      rng1.Find(Application.Max(rng1)).Interior.Color = vbCyan
      rng2.Find(Application.Max(rng2)).Interior.Color = vbCyan
      n = 0
   End If
   r = r + 1
Loop Until Cells(r, 3) = ""
End Sub
Khi nào khá hơn chút thì xử bằng mảng
Chào a Hải và các a(c) trên GPE, e ứng dụng đoạn code trên vào bài tập của e như thế này:
Mã:
Sub loc_gt()Application.ScreenUpdating = False
Dim r, Fr, n, mg4, mg5
r = 14
Do
   If n = 0 Then Fr = r
   If Cells(r, 3) = Cells(r + 1, 3) Then
      n = n + 1
   Else
      Set rng4 = Range(Cells(Fr, 15), Cells(r, 15)) 'cot O
      rng4.Find(Application.Max(rng4)).Offset(0, 0).Font.Bold = True
      rng4.Find(Application.Max(rng4)).Offset(0, -13).Font.ColorIndex = 1
      Set rng5 = Range(Cells(Fr, 16), Cells(r, 16)) 'cot P
      rng5.Find(Application.Max(rng5)).Offset(0, 0).Font.Bold = True
      rng5.Find(Application.Max(rng5)).Offset(0, -14).Font.ColorIndex = 1
      n = 0
   End If
   r = r + 1
Loop Until Cells(r, 3) = ""
Application.ScreenUpdating = True
End Sub
2014-09-10_10-02-52.jpg
Giá trị cột O, ứng với tên cột C khi tìm giá trị max thì:
nếu như các giá trị max đó trùng nhau hết thì ko cần đánh dấu.
nếu các giá trị max không trùng nhau hết thì đánh dấu thằng đầu tiên.
Ví dụ như hình trên:
ở dòng 32 đến 40 tên cột C là 0,00 ứng với giá trị ở cột O là 0,50 hết vậy với code phía trên thì phải hiệu chỉnh thế nào ạ!!
xin các a(c) chỉ giúp e cảm ơn ! mong hồi âm!!
 

File đính kèm

Upvote 0
mong các a(c) giúp e, e đợi hơn 1 ngày rồi mà chưa nhận được hồi âm!! e cũng có chỉnh sửa mà bị lỗi suốt, ngồi mò mõi cả lưng mà ko ra!! mong sự hồi âm của a(c). e chân thành cảm ơn
 
Upvote 0
Chào a Hải và các a(c) trên GPE, e ứng dụng đoạn code trên vào bài tập của e như thế này:
Mã:
Sub loc_gt()Application.ScreenUpdating = False
Dim r, Fr, n, mg4, mg5
r = 14
Do
   If n = 0 Then Fr = r
   If Cells(r, 3) = Cells(r + 1, 3) Then
      n = n + 1
   Else
      Set rng4 = Range(Cells(Fr, 15), Cells(r, 15)) 'cot O
      rng4.Find(Application.Max(rng4)).Offset(0, 0).Font.Bold = True
      rng4.Find(Application.Max(rng4)).Offset(0, -13).Font.ColorIndex = 1
      Set rng5 = Range(Cells(Fr, 16), Cells(r, 16)) 'cot P
      rng5.Find(Application.Max(rng5)).Offset(0, 0).Font.Bold = True
      rng5.Find(Application.Max(rng5)).Offset(0, -14).Font.ColorIndex = 1
      n = 0
   End If
   r = r + 1
Loop Until Cells(r, 3) = ""
Application.ScreenUpdating = True
End Sub
View attachment 128949
Giá trị cột O, ứng với tên cột C khi tìm giá trị max thì:
nếu như các giá trị max đó trùng nhau hết thì ko cần đánh dấu.
nếu các giá trị max không trùng nhau hết thì đánh dấu thằng đầu tiên.
Ví dụ như hình trên:
ở dòng 32 đến 40 tên cột C là 0,00 ứng với giá trị ở cột O là 0,50 hết vậy với code phía trên thì phải hiệu chỉnh thế nào ạ!!
xin các a(c) chỉ giúp e cảm ơn ! mong hồi âm!!

Với đề bài này chỉ bí phần MIN thôi còn max thì quá dễ mà sao lại phải code cho mệt vậy các bạn
Max đk abs ( của rang A1:A80) = if(-min(A1:A80)>max(A1:A80),min(A1:A80),MAX(A1:A80)) là xong dễ ợi
Còn min THÌ MÌNH ĂN CẮP CÔNG THỨC RẤT GỌN NHƯNG KHÔNG SỬA ĐƯỢC, CỨ KÍCH VÀO ĐỂ SỬA LÀ BÁO LỖI.
Bài đã được tự động gộp:

Với đề bài này chỉ bí phần MIN thôi còn max thì quá dễ mà sao lại phải code cho mệt vậy các bạn
Max đk abs ( của rang A1:A80) = if(-min(A1:A80)>max(A1:A80),min(A1:A80),MAX(A1:A80)) là xong dễ ợi
Còn min THÌ MÌNH ĂN CẮP CÔNG THỨC RẤT GỌN NHƯNG KHÔNG SỬA ĐƯỢC, CỨ KÍCH VÀO ĐỂ SỬA LÀ BÁO LỖI.

AI BIẾT CÔNG THỨC TÍNH MIN CHỈ MÌNH VỚI
Bài đã được tự động gộp:

Chào các a(c) trong GPE, xin các a(C) giúp cho e bài #39, e đợi 2 ngày rồi mà chưa thấy hồi âm...!!
e chân thành cảm ơn..!1

OK: MAX thì dễ ợt ko cần code đâu, muốn max abs dãy bao nhiêu số cũng được: cứ trị tuyệt đối lớn nhất thì nó là max không cần biết nó âm hay dương:
VD: Dữ liệu ở cột B từ B2:B2000 nhé.
Max(B2:B2000) = if(-min(B2:B2000)>max(B2:B2000), min(B2:B2000), max(B2:B2000))
Còn muốn cho số âm mà có trị tuyệt đối lớn nhất đổi thành số dương luôn thì
Max(B2:B2000) = if(-min(B2:B2000)>max(B2:B2000), -min(B2:B2000), max(B2:B2000))

Mình chỉ bí phần MIN thôi. chỉ bí không hiểu công thức thôi còn ứng dụng mình vẫn xài được, chả cần code gì hết.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom