吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 245|回复: 6
收起左侧

[经验求助] 关于excel表格问题

  [复制链接]
kilu 发表于 2024-10-5 09:45
100吾爱币
大概需求:我需要的是b列输入id 然后a列的序号自动生成 ,输入id后进行重复判断,然后生成什么时间输入的id






如果能这个效果更好


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| kilu 发表于 2024-10-5 11:21
目前已自行解决 感谢各位的帮助
使用的宏:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cell As Range
    Dim idCell As Range
    Dim idDict As Object
    Set idDict = CreateObject("Scripting.Dictionary")
   
    ' 设置工作表
    Set ws = Me ' 自动识别当前工作表
   
    ' 检查是否是在 B 列修改
    If Not Intersect(Target, ws.Range("B:B")) Is Nothing Then
        
        ' 找到最后一行
        lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
        
        ' A 列自动填充序号
        For i = 2 To lastRow ' 假设从第2行开始填
            ws.Cells(i, 1).Value = i - 1
        Next i
        
        ' 先清除所有 C 列的标记和红色背景
        ws.Range("C2:C" & lastRow).ClearContents
        ws.Range("B2:B" & lastRow).Interior.ColorIndex = 0
        
        ' 对 B 列的 ID 进行重复判断并标红
        For Each idCell In ws.Range("B2:B" & lastRow)
            If Not IsEmpty(idCell.Value) Then
                ' 检查是否有重复
                If idDict.exists(idCell.Value) Then
                    idCell.Interior.Color = RGB(255, 0, 0) ' 标红
                    ws.Cells(idDict(idCell.Value), 3).Value = "重复" ' C 列标记重复
                    ws.Cells(idCell.Row, 3).Value = "重复"
                Else
                    idDict.Add idCell.Value, idCell.Row
                End If
            End If
        Next idCell
        
        ' D 列生成输入的时间,但只有在 D 列为空时才生成
        For Each cell In ws.Range("B2:B" & lastRow)
            If Not IsEmpty(cell.Value) Then
                If IsEmpty(ws.Cells(cell.Row, 4).Value) Then
                    ws.Cells(cell.Row, 4).Value = Now
                End If
            End If
        Next cell
    End If
End Sub
SepSerendipity 发表于 2024-10-5 09:57
在 Excel 中,你可以通过公式和条件格式来实现你的需求。具体步骤如下:
1. 自动生成序号
在 A 列中,你可以使用公式来生成序号。假设你的数据从第二行开始,A2 中可以输入以下公式:
=IF(B2<>"", COUNTA(B$2:B2), "")
这个公式的意思是:如果 B2 有输入,A2 就会显示从 B2 开始到当前行的非空单元格数量(即序号)。
2. 重复判断
为了检查 ID 是否重复,可以在 C 列中使用以下公式:
=IF(B2<>"", IF(COUNTIF(B$2:B$100, B2) > 1, "重复", "不重复"), "")
这个公式会判断 B 列中当前 ID 出现的次数,如果大于 1 则显示“重复”,否则显示“不重复”。
3. 记录输入时间
在 D 列中,可以使用以下公式来记录输入时间:
=IF(B2<>"", IF(D2="", NOW(), D2), "")
这个公式会在 B2 中有输入时记录当前时间,并且如果 D2 已经有时间则不会再更新。
4. 示例布局
假设你的数据在 B 列,A 列用于序号,C 列用于判断重复,D 列用于记录时间,布局如下:
A(序号)        B(ID)        C(重复判断)             D(时间)
1        ID001        不重复        2024-10-05 10:00:00
2        ID002        不重复        2024-10-05 10:05:00
3        ID001        重复                2024-10-05 10:10:00
5. 格式设置
&#8226;        你可以将 D 列的格式设置为日期和时间格式,以便更好地显示时间。
&#8226;        可以使用条件格式来高亮显示重复的 ID,增加可读性。
注意事项
&#8226;        记得在使用 NOW() 函数时,它会在每次计算时更新,所以要确保 D 列的值不被更改,可能需要在输入完后将其复制并粘贴为值(粘贴选项 -> 仅粘贴值)。
希望这个方法对你有帮助!如果你有其他需求或问题,欢迎随时询问!
 楼主| kilu 发表于 2024-10-5 10:19
SepSerendipity 发表于 2024-10-5 09:57
在 Excel 中,你可以通过公式和条件格式来实现你的需求。具体步骤如下:
1. 自动生成序号
在 A 列中,你 ...

这个公式 是不是 我需要先把条件一个一个的复制粘贴,然后输入数据再粘贴一次
xptk9074 发表于 2024-10-5 11:11
【金山文档 | WPS云文档】 判断ID
https://kdocs.cn/l/csyKnJAeSYMz
以上可以满足你说的要求

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
kilu + 1 + 1 谢谢@Thanks!

查看全部评分

xptk9074 发表于 2024-10-5 11:27
kilu 发表于 2024-10-5 11:21
目前已自行解决 感谢各位的帮助
使用的宏:
Private Sub Worksheet_Change(ByVal Target As Range)

建议宏在非必要情况下,不要用,因为不同版本的表格软件对宏的支持可能存在差异。如果在一个版本中创建的宏在另一个版本中运行,可能会出现兼容性问题,导致宏无法正常工作或者产生意外的结果。或者无法打开运行宏
 楼主| kilu 发表于 2024-10-5 11:29
xptk9074 发表于 2024-10-5 11:27
建议宏在非必要情况下,不要用,因为不同版本的表格软件对宏的支持可能存在差异。如果在一个版本中创建的 ...

同一软件  同一账号  同一文档
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 23:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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