ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

请大神用VB指导

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-17 19:40 | 显示全部楼层 |阅读模式
请大神用VB指导,查找

请大神用VB指导.zip

12.08 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2024-4-17 19:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-17 20:00 | 显示全部楼层
给你参考一下:

Sub FillNColumnWithMatchingName()

    Dim ws As Worksheet
    Set ws = ActiveSheet ' 修改为实际工作表对象,如:ThisWorkbook.Worksheets("Sheet1")

    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "M").End(xlUp).Row

    Dim i As Long
    For i = 8 To lastRow ' 从第8行开始遍历

        ' 检查M列和N列的值
        If Not IsEmpty(ws.Cells(i, "M")) Then ' M列不为空

            If IsEmpty(ws.Cells(i, "N")) Then ' N列为空,需要查找并填充

                Dim searchValue As Variant
                searchValue = ws.Cells(i, "M").Value

                Dim foundMatch As Boolean
                foundMatch = False

                Dim matchRow As Long
                For j = 8 To lastRow ' 在B、C列中查找相同项
                    If (ws.Cells(j, "B") = searchValue Or ws.Cells(j, "C") = searchValue) And _
                       ws.Cells(j, "D") <> "" Then ' 找到匹配项且D列有户名

                        ws.Cells(i, "N").Value = ws.Cells(j, "D").Value ' 填充户名到N列
                        foundMatch = True
                        Exit For ' 一旦找到匹配项,跳出内层循环
                    End If
                Next j

                If Not foundMatch Then ' 没有找到匹配项,保持N列为空
                    ws.Cells(i, "N").ClearContents
                End If

            End If ' N列为空的情况

        End If ' M列不为空的情况

    Next i

End Sub

TA的精华主题

TA的得分主题

发表于 2024-4-17 20:12 | 显示全部楼层
vba韭菜 发表于 2024-4-17 20:00
给你参考一下:

Sub FillNColumnWithMatchingName()

AI写的代码?你测试过没有?

TA的精华主题

TA的得分主题

发表于 2024-4-17 20:42 | 显示全部楼层
数组+字典可以轻松搞定,
先把b,c两列赋值给字典,并记录行号,然后循环m列,在字典中存在则把d列的值赋值给n列,否则,n列为空

TA的精华主题

TA的得分主题

发表于 2024-4-17 23:03 | 显示全部楼层
用公式解决吧,不要用VBA,两个Vlookup的事情。
=IFERROR(VLOOKUP($M7,$B:$D,3,),"")&IFERROR(VLOOKUP($M7,$C:$D,2,),"")

TA的精华主题

TA的得分主题

发表于 2024-4-18 10:37 | 显示全部楼层
Sub 查询()
Dim ar As Variant
Dim i As Long, r As Long
Dim d As Object
Set d = CreateObject("scripting.dictionary")
With Sheets("原表")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    ar = .Range("a1:n" & r)
    For i = 2 To UBound(ar)
        If ar(i, 2) <> "" Then
            d(ar(i, 2)) = i
        End If
        If ar(i, 3) <> "" Then
            d(ar(i, 3)) = i
        End If
    Next i
    For i = 2 To UBound(ar)
        If ar(i, 13) <> "" And ar(i, 14) = "" Then
            xh = d(ar(i, 13))
            If xh <> "" Then
                ar(i, 14) = ar(xh, 4)
            End If
        End If
    Next i
    .[n1].Resize(UBound(ar), 1) = Application.Index(ar, 0, 14)
End With
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-4-18 10:38 | 显示全部楼层
请大神用VB指导.rar (17.58 KB, 下载次数: 5)

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-2 12:28 , Processed in 0.046231 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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