ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 597|回复: 15

[求助] 任意位置区域与A列开始的区域进行条件格式设置

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-3 21:12 | 显示全部楼层 |阅读模式
老师好,有个想法,不知道能否实现,在当前工作表中,当我选中某个区域时,假如有12列,就自动将该12列与ABCD...L列进行比对,值不同时选中区域的单元格就用红色填充,字体为白色。如果选中的是5列,就自动与ABCDE进行比对,值不同时选中区域单元格就用红色填充,字体为白色。比对的区域为:选中区域往下延伸至行号为5000的行,谢谢!

任意设置条件格式.rar

12.89 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-4 08:04 | 显示全部楼层
用文心生成的代码,粘贴到编辑器中,  With conditionRange.Columns(i).FormatConditions.Add(Type:=xlExpression, Formula1:="=" & Cells(1, columnOffset).Address & "<>"" & Char(65 + i - 1) & """")这段是红色的字体,无法测试

Sub SetConditionalFormatting()
    Dim selectedRange As Range
    Dim firstColumn As Integer
    Dim selectedColumns As Integer
    Dim columnOffset As Integer
    Dim conditionRange As Range
    Dim condition As FormatCondition
    Dim i As Integer
      
    ' 显示“请选择区域”对话框,并获取用户选择的区域
    On Error Resume Next ' 如果用户取消选择,则忽略错误
    Set selectedRange = Application.InputBox("请选择区域", Type:=8) ' Type 8 表示区域类型
    On Error GoTo 0 ' 恢复正常错误处理
      
    ' 如果用户没有选择任何区域或取消了选择,则退出程序
    If selectedRange Is Nothing Then
        MsgBox "未选择任何区域,程序退出。"
        Exit Sub
    End If
      
    ' 获取选中区域最左边的列号
    firstColumn = selectedRange.Columns(1).Column
    ' 获取选中区域的列数
    selectedColumns = selectedRange.Columns.Count
      
    ' 判断选中区域最左边的列与A列之间列的数量是否小于选中区域的列数
    If firstColumn - 1 < selectedColumns Then
        MsgBox "列的数量多了"
        Exit Sub
    End If
      
    ' 设置条件格式的区域,从选中区域的顶端的行号到5000行
    Set conditionRange = Range(selectedRange.Cells(1, 1).Address & ":" & Cells(5000, selectedRange.Columns.Count).Address)
      
    ' 清除原有条件格式,如果不需要请注释掉以下两行
    'conditionRange.ClearFormats
    'conditionRange.FormatConditions.Delete
      
    ' 为每一列添加条件格式
    For i = 1 To selectedColumns
        columnOffset = firstColumn + i - 1 ' 转换为实际的列号
         
        ' 添加条件格式
     With conditionRange.Columns(i).FormatConditions.Add(Type:=xlExpression, Formula1:="=" & Cells(1, columnOffset).Address & "<>"" & Char(65 + i - 1) & """")
            .SetFirstPriority ' 确保条件格式排列在第一位
            With .Font
                .Color = RGB(255, 255, 255) ' 白色
            End With
            .Interior.Color = RGB(255, 0, 0) ' 红色
        End With
    Next i
      
    MsgBox "条件格式设置完成。"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-4-4 09:56 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-4 12:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢taller老师,我测试了下,有点小问题,

测试“任意设置条件格式.rar

10.15 KB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-4 16:29 | 显示全部楼层
我想要的效果是每一行都进行比对,现在好像只根据选中区域的第一行比对

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-4 17:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
假如我选中的是第7行的LMN列,程序生成的条件格式公式是=K$7<>IV65530,其实应该是=L7<>A7

TA的精华主题

TA的得分主题

发表于 2024-4-4 18:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
row1 = Range(Selection.Address).Row '选中区域开始行
   row2 = Range(Selection.Address).Rows.Count + row1 - 1 '选中区域最后一行
   
   col1 = Range(Selection.Address).Column '选中区域开始列
   col2 = Range(Selection.Address).Columns.Count + col1 - 1 '选中区域最后一列

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-4 19:10 | 显示全部楼层
不明白怎么调整代码,谢谢lln0618老师

TA的精华主题

TA的得分主题

发表于 2024-4-4 23:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你录入的代码有错误,请仔细核对
  1. sForm = "=" & selRng.Cells(1).Address(0, 0) & "<>A" & selRng.Row
  2. .TintAndShade = 0
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-5 00:39 | 显示全部楼层
一、如果选中i7:k7,运行后条件格式不对
二、如果再次运行后条件格式业与之前的不一样
三、感觉每次运行后条件格式的公式一次与一次不同
谢谢taller老师
Sub SetFC()
Dim selRng As Range, oFC As FormatCondition
Dim sForm As String
Const LASTROW = 1000
Set selRng = Application.InputBox("请选择", Type:=8)
If Not selRng Is Nothing Then
If selRng.Column - 1 < selRng.Columns.Count Then
MsgBox "选中区域不合规"
Exit Sub
Else
sForm = "=" & selRng.Cells(1).Address(0, 0) & "<>A" & selRng.Row
Set oFC = selRng.Rows(1).Resize(LASTROW - i + 1).FormatConditions.Add( _
      Type:=xlExpression, Formula1:=sForm)
oFC.SetFirstPriority
With oFC.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With oFC.Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
End If
End If
End Sub

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 20:45 , Processed in 0.046504 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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