ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 类型如何匹配

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-15 22:51 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
试边了所有的数据类型,总是出现K1、K2类型不匹配。
FastStoneEditor1.jpg

类型不匹配.rar

96.66 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2022-12-15 23:04 | 显示全部楼层
  1. k1 = arr(i, 3)  '表1中单井初始行号
  2.         k2 = arr(i, 4)  '表1中单井结束行号
复制代码

你的主要问题是在这两句代码。求出的k1,k2都是空值,当然类型不对了

TA的精华主题

TA的得分主题

发表于 2022-12-15 23:05 | 显示全部楼层
没有细看你的代码,只是在这里发现,出现错误的时候,k1和k2都是空值,我想这就是问题所在了。
image.png

TA的精华主题

TA的得分主题

发表于 2022-12-15 23:48 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-16 10:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 cysczhumh 于 2022-12-16 11:04 编辑
洋务德雷 发表于 2022-12-15 23:04
你的主要问题是在这两句代码。求出的k1,k2都是空值,当然类型不对了

在  For j = k1 To k2前加msgbox k1和msgbox k2,运行后,可以出来数值啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-16 10:54 | 显示全部楼层
半百 发表于 2022-12-15 23:48
是不是if k1=" " or k2=" "这里,双引号中间多了空格?

除掉空格,程序可运行,但没有结果数据。

TA的精华主题

TA的得分主题

发表于 2022-12-16 11:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
    s = CDate(Sheets("欠注井").[i1])
    e = CDate(Sheets("欠注井").[k1])

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-16 11:50 | 显示全部楼层
lele6809 发表于 2022-12-16 11:26
s = CDate(Sheets("欠注井").)
    e = CDate(Sheets("欠注井").[k1])

高手啊,实在是高,改了这2句,程序全通了。正确程序如下:
Sub 按钮1_单击()
   Application.ScreenUpdating = False '冻结屏幕,以防屏幕抖动
   
    '删除上次筛选结果
    Sheets("欠注井").Select
    Sheets("欠注井").Select
    Range("C2:I1000").Select
    Selection.ClearContents
   
  '以下为确定表2中的井在表1中设定时间范围内的初始行号和结束行号
    Set D = CreateObject("scripting.dictionary")
    arr = Sheets("欠注井").[a1].CurrentRegion
    brr = Sheets("水井日报").UsedRange
    s = CDate(Sheets("欠注井").[i1])
    e = CDate(Sheets("欠注井").[k1])
    For i = 2 To UBound(brr)
        If CDate(brr(i, 1)) >= s And CDate(brr(i, 1)) <= e Then
           D(brr(i, 3)) = D(brr(i, 3)) & "," & i
        End If
    Next i
   
    For i = 2 To UBound(arr)
        str1 = arr(i, 2)
        If D.exists(str1) Then
            brr = Split(D(str1), ",")
            arr(i, 3) = brr(1)
            arr(i, 4) = brr(UBound(brr))
        Else
            arr(i, 3) = ""
            arr(i, 4) = ""
        End If
    k1 = arr(i, 3) '表1中单井初始行号
    k2 = arr(i, 4) '表1中单井结束行号
      
    Dim k3, k4, k5 As String
    Dim jryy, pz, jrsz, pjyy, pjpz, pjsz, qzcd As Variant
  
    k3 = 0: k4 = 0: k5 = 0
    jryy = 0: pz = 0: jrsz = 0: pjyy = 0: pjpz = 0: pjsz = 0 '变量赋值0
  
    If k1 = "" Or k2 = "" Then GoTo e2 '表2中的井不在表1中时结束以下计算
   
    For j = k1 To k2
    If Sheet2.Cells(i, 2) = Sheet1.Cells(j, 3) And Sheet1.Cells(j, 7) = "开" And Sheet1.Cells(j, 15) > Sheet1.Cells(j, 17) Then k3 = k3 + 1  '求欠注天数
    If Sheet2.Cells(i, 2) = Sheet1.Cells(j, 3) And Sheet1.Cells(j, 17) > 0 Then jryy = jryy + Sheet1.Cells(j, 10): pz = pz + Sheet1.Cells(j, 15): jrsz = jrsz + Sheet1.Cells(j, 17) '计算油压、配注和实注
    If Sheet2.Cells(i, 2) = Sheet1.Cells(j, 3) And Sheet1.Cells(j, 17) > 0 Then k4 = k4 + 1 '实注水量大于0的行数
    If Sheet2.Cells(i, 2) = Sheet1.Cells(j, 3) And Sheet1.Cells(j, 17) = 0 And Sheet1.Cells(j, 7) = "开" Then k5 = k5 + 1  '今日油压大于0的行数
    Next j
   
   '计算平均值
    If k4 = 0 Then GoTo e1
    Sheet2.Cells(i, 3) = k3
    pjyy = Round(jryy / k4, 1): Sheet2.Cells(i, 4) = pjyy
    pjpz = Round(pz / k4, 1): Sheet2.Cells(i, 5) = pjpz
    pjsz = Round(jrsz / k4, 1): Sheet2.Cells(i, 6) = pjsz
e1:
   
  '判断欠注程度,以下为非完全注不进井
    If Sheet2.Cells(i, 6) = "关井" Then GoTo e2
    If pjpz = 0 Then GoTo e2
    qzcd = Application.Round(pjsz / pjpz, 2)
    If qzcd > 0 And qzcd <= 0.5 Or pjsz = 0 Then Sheet2.Cells(i, 7) = "严重"
    If qzcd > 0.5 And qzcd <= 0.8 Then Sheet2.Cells(i, 7) = "中等"
    If qzcd > 0.8 And qzcd <= 0.95 Then Sheet2.Cells(i, 7) = "一般"
    If qzcd > 0.95 And qzcd <= 1.2 Then Sheet2.Cells(i, 7) = "合格"
    If qzcd > 1.2 Then Sheet2.Cells(i, 7) = "超注"
e2:

    '水井日报表中关井或欠注井表中井号在水井日报中没有的井标注为“关井”
    If Sheet2.Cells(i, 2) <> Sheet1.Cells(j - 1, 3) Then Sheet2.Cells(i, 3) = "关井": Sheet2.Cells(i, 4) = "关井": Sheet2.Cells(i, 5) = "关井": Sheet2.Cells(i, 6) = "关井"
    If Sheet1.Cells(j - 1, 7) = "关" Then Sheet2.Cells(i, 3) = "关井": Sheet2.Cells(i, 4) = "关井": Sheet2.Cells(i, 5) = "关井": Sheet2.Cells(i, 6) = "关井"
    Next i
   
  Application.ScreenUpdating = True '结屏幕,此类语句一般成对使用
    MsgBox "汇总完成,请查看!", 64, "提示"
End Sub

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

本版积分规则

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

GMT+8, 2024-11-20 07:11 , Processed in 0.040446 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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