Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2924|回复: 5

[已解决]满足条例的最大数填充红色。

[复制链接]
发表于 2014-5-31 14:26 | 显示全部楼层 |阅读模式
满足条例的最大数填充红色。
最佳答案
2014-5-31 18:04
left369 发表于 2014-5-31 16:50
你好,老师。我没表述清楚哦。不好意思。再做了几个例子。老师看看。

再看一下:
  1. Option Explicit

  2. Sub test()
  3.     Dim arr_col, arr_row, brr, crr(), iMax%, iMin%
  4.     Dim i%, j%, RngMax As Range, RngMin As Range
  5.     With Sheets(1)
  6.         arr_row = .Range("a17:a26")
  7.         arr_col = .Range("b13", Cells(13, Cells(13, Columns.Count).End(1).Column))
  8.         brr = .Range("b17").Resize(UBound(arr_row), UBound(arr_col, 2))
  9.         ReDim crr(1 To 2, 1 To UBound(arr_col, 2))
  10.         For i = 1 To UBound(arr_row)
  11.             iMax = 0: iMin = 99
  12.             For j = 1 To UBound(arr_col, 2)
  13.                 If arr_col(1, j) = arr_row(i, 1) Then
  14.                     If Len(brr(i, j)) > 0 Then
  15.                         If brr(i, j) = WorksheetFunction.Max(WorksheetFunction.Index(brr, 0, j)) Then
  16.                             crr(1, j) = i
  17.                         End If
  18.                         If brr(i, j) = WorksheetFunction.Min(WorksheetFunction.Index(brr, 0, j)) Then
  19.                             crr(2, j) = i
  20.                         End If
  21.                     End If
  22.                 End If
  23.             Next
  24.         Next
  25.         For j = 1 To UBound(crr, 2)
  26.             If crr(1, j) > 0 Then
  27.                 If RngMax Is Nothing Then
  28.                     Set RngMax = .Cells(crr(1, j) + 16, j + 1)
  29.                 Else
  30.                     Set RngMax = Union(RngMax, .Cells(crr(1, j) + 16, j + 1))
  31.                 End If
  32.             End If
  33.             If crr(2, j) > 0 Then
  34.                 If RngMin Is Nothing Then
  35.                     Set RngMin = .Cells(crr(2, j) + 16, j + 1)
  36.                 Else
  37.                     Set RngMin = Union(RngMin, .Cells(crr(2, j) + 16, j + 1))
  38.                 End If
  39.             End If
  40.         Next
  41.     End With
  42.     RngMax.Interior.ColorIndex = 3
  43.     RngMin.Interior.ColorIndex = 41
  44. End Sub
复制代码

left369.zip

2.57 KB, 下载次数: 22

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2014-5-31 15:40 | 显示全部楼层
回复

使用道具 举报

发表于 2014-5-31 16:29 | 显示全部楼层
请测试:
  1. Option Explicit

  2. Sub test()
  3.     Dim arr_col, arr_row, brr, crr(), iMax%, iMin%
  4.     Dim i%, j%, RngMax As Range, RngMin As Range
  5.     With Sheets(1)
  6.         arr_row = .Range("a17:a26")
  7.         arr_col = .Range("b13", Cells(13, Cells(13, Columns.Count).End(1).Column))
  8.         brr = .Range("b17").Resize(UBound(arr_row), UBound(arr_col, 2))
  9.         ReDim crr(1 To UBound(arr_row), 1 To 2)
  10.         For i = 1 To UBound(arr_row)
  11.             iMax = 0: iMin = 99
  12.             For j = 1 To UBound(arr_col, 2)
  13.                 If arr_col(1, j) = arr_row(i, 1) Then
  14.                     If Len(brr(i, j)) > 0 Then
  15.                         If brr(i, j) > iMax Then
  16.                             iMax = brr(i, j)
  17.                             crr(i, 1) = j
  18.                         End If
  19.                         If brr(i, j) < iMin Then
  20.                             iMin = brr(i, j)
  21.                             crr(i, 2) = j
  22.                         End If
  23.                     End If
  24.                 End If
  25.             Next
  26.         Next
  27.         Set RngMax = .Cells(17, crr(1, 1) + 1)
  28.         Set RngMin = .Cells(17, crr(1, 2) + 1)
  29.         For i = 2 To UBound(crr)
  30.             Set RngMax = Union(RngMax, .Cells(16 + i, crr(i, 1) + 1))
  31.             Set RngMin = Union(RngMin, .Cells(16 + i, crr(i, 2) + 1))
  32.         Next
  33.     End With
  34.     RngMax.Interior.ColorIndex = 3
  35.     RngMin.Interior.ColorIndex = 41
  36. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-5-31 16:50 | 显示全部楼层
fffox 发表于 2014-5-31 16:29
请测试:

你好,老师。我没表述清楚哦。不好意思。再做了几个例子。老师看看。

left369222.zip

9.71 KB, 下载次数: 5

回复

使用道具 举报

发表于 2014-5-31 18:04 | 显示全部楼层    本楼为最佳答案   
left369 发表于 2014-5-31 16:50
你好,老师。我没表述清楚哦。不好意思。再做了几个例子。老师看看。

再看一下:
  1. Option Explicit

  2. Sub test()
  3.     Dim arr_col, arr_row, brr, crr(), iMax%, iMin%
  4.     Dim i%, j%, RngMax As Range, RngMin As Range
  5.     With Sheets(1)
  6.         arr_row = .Range("a17:a26")
  7.         arr_col = .Range("b13", Cells(13, Cells(13, Columns.Count).End(1).Column))
  8.         brr = .Range("b17").Resize(UBound(arr_row), UBound(arr_col, 2))
  9.         ReDim crr(1 To 2, 1 To UBound(arr_col, 2))
  10.         For i = 1 To UBound(arr_row)
  11.             iMax = 0: iMin = 99
  12.             For j = 1 To UBound(arr_col, 2)
  13.                 If arr_col(1, j) = arr_row(i, 1) Then
  14.                     If Len(brr(i, j)) > 0 Then
  15.                         If brr(i, j) = WorksheetFunction.Max(WorksheetFunction.Index(brr, 0, j)) Then
  16.                             crr(1, j) = i
  17.                         End If
  18.                         If brr(i, j) = WorksheetFunction.Min(WorksheetFunction.Index(brr, 0, j)) Then
  19.                             crr(2, j) = i
  20.                         End If
  21.                     End If
  22.                 End If
  23.             Next
  24.         Next
  25.         For j = 1 To UBound(crr, 2)
  26.             If crr(1, j) > 0 Then
  27.                 If RngMax Is Nothing Then
  28.                     Set RngMax = .Cells(crr(1, j) + 16, j + 1)
  29.                 Else
  30.                     Set RngMax = Union(RngMax, .Cells(crr(1, j) + 16, j + 1))
  31.                 End If
  32.             End If
  33.             If crr(2, j) > 0 Then
  34.                 If RngMin Is Nothing Then
  35.                     Set RngMin = .Cells(crr(2, j) + 16, j + 1)
  36.                 Else
  37.                     Set RngMin = Union(RngMin, .Cells(crr(2, j) + 16, j + 1))
  38.                 End If
  39.             End If
  40.         Next
  41.     End With
  42.     RngMax.Interior.ColorIndex = 3
  43.     RngMin.Interior.ColorIndex = 41
  44. End Sub
复制代码
回复

使用道具 举报

发表于 2014-5-31 20:40 | 显示全部楼层
left369 发表于 2014-5-31 16:50
你好,老师。我没表述清楚哦。不好意思。再做了几个例子。老师看看。

楼主的要求是最大、最小值在同一列内不能重复。再修改一下代码:
  1. Option Explicit

  2. Sub test()
  3.     Dim arr_col, arr_row, brr, crr(), iMax%, iMin%
  4.     Dim i%, j%, k%, x%, RngMax As Range, RngMin As Range
  5.     With Sheets(1)
  6.         arr_row = .Range("a17:a26")
  7.         arr_col = .Range("b13", Cells(13, Cells(13, Columns.Count).End(1).Column))
  8.         brr = .Range("b17").Resize(UBound(arr_row), UBound(arr_col, 2))
  9.         ReDim crr(1 To 2, 1 To UBound(arr_col, 2))
  10.         For i = 1 To UBound(arr_row)
  11.             iMax = 0: iMin = 99
  12.             For j = 1 To UBound(arr_col, 2)
  13.                 If arr_col(1, j) = arr_row(i, 1) Then
  14.                     If Len(brr(i, j)) > 0 Then
  15.                         If brr(i, j) = WorksheetFunction.Max(WorksheetFunction.Index(brr, 0, j)) Then
  16.                             k = 0
  17.                             For x = 1 To UBound(arr_row)
  18.                                 If brr(x, j) = brr(i, j) Then k = k + 1
  19.                             Next
  20.                             If k = 1 Then crr(1, j) = i
  21.                         End If
  22.                         If brr(i, j) = WorksheetFunction.Min(WorksheetFunction.Index(brr, 0, j)) Then
  23.                             k = 0
  24.                             For x = 1 To UBound(arr_row)
  25.                                 If brr(x, j) = brr(i, j) Then k = k + 1
  26.                             Next
  27.                             If k = 1 Then crr(2, j) = i
  28.                         End If
  29.                     End If
  30.                 End If
  31.             Next
  32.         Next
  33.         For j = 1 To UBound(crr, 2)
  34.             If crr(1, j) > 0 Then
  35.                 If RngMax Is Nothing Then
  36.                     Set RngMax = .Cells(crr(1, j) + 16, j + 1)
  37.                 Else
  38.                     Set RngMax = Union(RngMax, .Cells(crr(1, j) + 16, j + 1))
  39.                 End If
  40.             End If
  41.             If crr(2, j) > 0 Then
  42.                 If RngMin Is Nothing Then
  43.                     Set RngMin = .Cells(crr(2, j) + 16, j + 1)
  44.                 Else
  45.                     Set RngMin = Union(RngMin, .Cells(crr(2, j) + 16, j + 1))
  46.                 End If
  47.             End If
  48.         Next
  49.     End With
  50.     If Not RngMax Is Nothing Then RngMax.Interior.ColorIndex = 3
  51.     If Not RngMin Is Nothing Then RngMin.Interior.ColorIndex = 41
  52. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 13:33 , Processed in 0.140527 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表