ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 用VBA实现日期段按单个条件查找某一列数据返回到其他工作表指定单元格区域内

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-2 15:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
等审核吧
image.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-2 17:25 | 显示全部楼层
本帖最后由 雷雷爸 于 2023-6-2 18:23 编辑

感谢老师,我刚刚测试了一下,基本满足了,不过就是超过240个数据我想改成248个,没有提示而是报错了,还有就是两张工作表都不能加密保护工作表了

TA的精华主题

TA的得分主题

发表于 2023-6-2 18:55 | 显示全部楼层
1、If n > 248 Then
MsgBox "提取到符合的数值共:" & n & "个;超出限定数量248个!”
2、打开工作表时先解锁,好像是uprotect(“密码”),最后protect。自己搜索一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-2 19:21 | 显示全部楼层
本帖最后由 雷雷爸 于 2023-6-2 19:24 编辑

不加密也没事老师,我也操作不好,用的时候注意一点就可以了,我刚刚数了一下填充的表格是32行,我刚刚试了一下出现了这些情况,没有提示超出248个,我附个图老师
1685704741374.jpg

TA的精华主题

TA的得分主题

发表于 2023-6-2 20:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-6-2 21:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码供参考:
Sub FillData()
    Dim wsInput As Worksheet
    Dim wsOutput As Worksheet
    Dim rngInput As Range
    Dim rngOutput As Range
    Dim startDate As Date
    Dim endDate As Date
    Dim strengthLevel As String
    Dim rowCounter As Long
    Dim colCounter As Long
    Dim maxEntries As Long
   
    ' Set worksheets
    Set wsInput = ThisWorkbook.Sheets("试块强度输入")
    Set wsOutput = ThisWorkbook.Sheets("抗压强度评定")
   
    ' Set input range
    Set rngInput = wsInput.Range("B2:K" & wsInput.Cells(wsInput.Rows.Count, "B").End(xlUp).Row)
   
    ' Set output range
    Set rngOutput = wsOutput.Range("E5:L35")
   
    ' Get start date, end date, and strength level
    startDate = wsOutput.Range("O3").Value
    endDate = wsOutput.Range("O4").Value
    strengthLevel = wsOutput.Range("P4").Value
   
    ' Initialize counters
    rowCounter = 1
    colCounter = 1
    maxEntries = 248
   
    ' Clear output range
    rngOutput.ClearContents
   
    ' Fill output range
    For Each cell In rngInput.Rows
        If cell.Columns("B").Value >= startDate And cell.Columns("B").Value <= endDate And cell.Columns("K").Value = strengthLevel Then
            rngOutput.Cells(rowCounter, colCounter).Value = cell.Columns("I").Value
            colCounter = colCounter + 1
            If colCounter > 8 Then ' change rows when reaching the end of a row
                colCounter = 1
                rowCounter = rowCounter + 1
            End If
            If rowCounter > 31 Then ' stop when reaching the max number of entries
                MsgBox "已达到最大条目数 (" & maxEntries & "). 无法添加更多数据."
                Exit Sub
            End If
        End If
    Next cell
End Sub

TA的精华主题

TA的得分主题

发表于 2023-6-2 21:35 | 显示全部楼层
Sub FillData()
    Dim wsInput As Worksheet
    Dim wsOutput As Worksheet
    Dim rngInput As Range
    Dim rngOutput As Range
    Dim startDate As Date
    Dim endDate As Date
    Dim strengthLevel As String
    Dim rowCounter As Long
    Dim colCounter As Long
    Dim maxEntries As Long
   
    ' Set worksheets
    Set wsInput = ThisWorkbook.Sheets("试块强度输入")
    Set wsOutput = ThisWorkbook.Sheets("抗压强度评定")
   
    ' Set input range
    Set rngInput = wsInput.Range("B2:K" & wsInput.Cells(wsInput.Rows.Count, "B").End(xlUp).Row)
   
    ' Set output range
    Set rngOutput = wsOutput.Range("E5:L35")
   
    ' Get start date, end date, and strength level
    startDate = wsOutput.Range("O3").Value
    endDate = wsOutput.Range("O4").Value
    strengthLevel = wsOutput.Range("P4").Value
   
    ' Initialize counters
    rowCounter = 1
    colCounter = 1
    maxEntries = 248
   
    ' Clear output range
    rngOutput.ClearContents
   
    ' Fill output range
    For Each cell In rngInput.Rows
        If cell.Columns("B").Value >= startDate And cell.Columns("B").Value <= endDate And cell.Columns("K").Value = strengthLevel Then
            rngOutput.Cells(rowCounter, colCounter).Value = cell.Columns("I").Value
            colCounter = colCounter + 1
            If colCounter > 8 Then ' change rows when reaching the end of a row
                colCounter = 1
                rowCounter = rowCounter + 1
            End If
            If rowCounter > 31 Then ' stop when reaching the max number of entries
                MsgBox "已达到最大条目数 (" & maxEntries & "). 无法添加更多数据."
                Exit Sub
            End If
        End If
    Next cell
End Sub

TA的精华主题

TA的得分主题

发表于 2023-6-3 06:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你就把brr设置成brr(1 to 5000,1 to 8)就行,越大越好,反正超出248个就退出。
如果设定1 to 31,导致n值一大,超出数组范围。
另,自定义函数有问题,表处理不了


image.jpg

TA的精华主题

TA的得分主题

发表于 2023-6-3 06:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
或者这句话放到上面,一超248个就退出。不能统计出符合的数量
image.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-3 06:30 | 显示全部楼层
雷雷爸 发表于 2023-6-2 19:21
不加密也没事老师,我也操作不好,用的时候注意一点就可以了,我刚刚数了一下填充的表格是32行,我刚刚试了 ...

你的表格有大小要求吗,如果没有也可以判断一下,超过248后,自动插入行以适应数据个数。或者判断超过248提示,点击确定插入行,取消重新输入起止日期。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 09:29 , Processed in 0.033845 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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