ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 比对做填满

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-10 16:49 | 显示全部楼层 |阅读模式
本帖最后由 cmo9020 于 2023-6-18 07:33 编辑


TEST.rar (21.93 KB, 下载次数: 14)


各位导师周末愉快... 遇到一个难题,
请教各位导师一下
Sheet1 A9单元格需要执行代码后, 和"范本"的A列标题做比对
(因为A列的"到达"不是固定行)
所以才需要和A列比对 在找到"到达"之后,判断G2或i2单元格里面那一个是有时间,
然后将"己送达"输入到单元格中做填满。

1.目前时间是在I2单元格,但执行代码后不知道怎么让反黄地方做填满
麻烦请导师们帮助一下,谢谢您们



Sub copy()
    Dim sourceSheet As Worksheet
    Dim templateSheets(1 To 3) As Worksheet
    Dim sourceRange As Range
    Dim templateRanges(1 To 3) As Range
    Dim lastRow As Long
    Dim cell As Range
    Dim headerValue As Variant
    Dim j As Long
    Dim targetColumn As Long

    Set sourceSheet = ThisWorkbook.Sheets("Sheet1")
    Set templateSheets(1) = ThisWorkbook.Sheets("范本")

   
    Set sourceRange = sourceSheet.Range("A9")
   
    For Each cell In sourceRange
        headerValue = cell.Value

        For j = 1 To 1
            Set templateRanges(j) = templateSheets(j).Range("A1:I50").Find(What:=headerValue, LookIn:=xlValues, lookat:=xlWhole)

            If Not templateRanges(j) Is Nothing Then
                If templateSheets(j).Range("G2").Value <> "NA" And templateSheets(j).Range("I2").Value <> "NA" Then

                    If IsDate(templateSheets(j).Range("G2").Value) Then
                        targetColumn = 6
                    ElseIf IsDate(templateSheets(j).Range("I2").Value) Then
                        targetColumn = 8
                    End If
                ElseIf templateSheets(j).Range("G2").Value <> "NA" Then
                    targetColumn = 6
                ElseIf templateSheets(j).Range("I2").Value <> "NA" Then
                    targetColumn = 8
                End If
               
                Dim targetCell As Range
                Set targetCell = templateSheets(j).Cells(templateRanges(j).Row, targetColumn)
               
                If targetCell.MergeCells Then
                    Set targetCell = targetCell.MergeArea.Cells(1)
                End If
               
                Select Case j
                    Case 1
                        targetCell.Value = cell.Offset(0, 1).Value

                End Select
            End If
        Next j
    Next cell

    Set sourceRange = Nothing
    Set sourceSheet = Nothing
    For j = 1 To 3
        Set templateRanges(j) = Nothing
        Set templateSheets(j) = Nothing
    Next j
   

End Sub



TA的精华主题

TA的得分主题

发表于 2023-6-11 10:33 | 显示全部楼层
这应该是Ai写的吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-11 11:22 | 显示全部楼层
ykcbf1100 发表于 2023-6-11 10:33
这应该是Ai写的吧。

对,目前己经改好,不过代码很长
而且和AI沟通要沟通有点久....


Sub TEST()
    Dim sourceSheet As Worksheet
    Dim templateSheets(1 To 3) As Worksheet
    Dim sourceRange As Range
    Dim templateRanges(1 To 3) As Range
    Dim lastRow As Long
    Dim cell As Range
    Dim headerValue As Variant
    Dim j As Long
    Dim targetColumn As Long

    Set sourceSheet = ThisWorkbook.Sheets("Sheet1")
    Set templateSheets(1) = ThisWorkbook.Sheets("范本")
    Set sourceRange = sourceSheet.Range("A9")

    For Each cell In sourceRange
        headerValue = cell.Value

        For j = 1 To 1
            Set templateRanges(j) = templateSheets(j).Range("A1:I50").Find(What:=headerValue, LookIn:=xlValues, LookAt:=xlWhole)

            If Not templateRanges(j) Is Nothing Then
                If templateSheets(j).Range("G2").Value <> "NA" And templateSheets(j).Range("I2").Value <> "NA" Then
                    If IsDate(templateSheets(j).Range("G2").Value) Then
                        targetColumn = 6
                    ElseIf IsDate(templateSheets(j).Range("I2").Value) Then
                        targetColumn = 8
                    End If
                ElseIf templateSheets(j).Range("G2").Value <> "NA" Then
                    targetColumn = 6
                ElseIf templateSheets(j).Range("I2").Value <> "NA" Then
                    targetColumn = 8
                End If

                Dim targetCells As Range
                Set targetCells = templateRanges(j).MergeArea

                For Each targetCell In targetCells
                    If targetCell.MergeCells Then
                        For Each mergedCell In targetCell.MergeArea
                            Select Case j
                                Case 1
                                    mergedCell.Offset(0, targetColumn - 1).Value = sourceSheet.Cells(cell.Row, cell.Column + 1).Value
                            End Select
                        Next mergedCell
                    Else
                        Select Case j
                            Case 1
                                targetCell.Offset(0, targetColumn - 1).Value = sourceSheet.Cells(cell.Row, cell.Column + 1).Value
                        End Select
                    End If
                Next targetCell
            End If
        Next j
    Next cell

    Set sourceRange = Nothing
    Set sourceSheet = Nothing
    For j = 1 To 3
        Set templateRanges(j) = Nothing
        Set templateSheets(j) = Nothing
    Next j

End Sub




TA的精华主题

TA的得分主题

发表于 2023-6-11 17:08 | 显示全部楼层
幾行即可解決,
B8的 "08:50" 做何用???

TA的精华主题

TA的得分主题

发表于 2023-6-11 18:00 | 显示全部楼层
手寫的, 不是AI

Sub TEST_A1()
Dim T1$, T2$, F As Range
T1 = [Sheet1!a9]: T2 = [Sheet1!b9]
With Sheets("范本")
     If IsDate(.[g2].Text) Or IsDate(.[i2].Text) Then
        Set F = .[a:a].Find(T1, Lookat:=xlWhole)
        If Not F Is Nothing Then F.MergeArea.Resize(, 8).Columns(8) = T2
     End If
End With
End Sub

注意//合併格不能直接使用offset, 它只會抓第一格, 這AI不會知道!!!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-18 07:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
准提部林 发表于 2023-6-11 18:00
手寫的, 不是AI

Sub TEST_A1()

谢谢导师,ai好像没办法写这么简短
每次都写超长的....
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 15:42 , Processed in 0.036963 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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