ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 创建一位数转换两位数的自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-11-30 16:38 | 显示全部楼层
yjh_27 发表于 2018-11-30 16:23
Function SHUZHEN(a, smin, smax)

你自己调一下就可以了

还真是会者不难难者不会啊!非常感谢老师的悉心指导!

TA的精华主题

TA的得分主题

发表于 2018-11-30 16:45 | 显示全部楼层
玉阳山人 发表于 2018-11-30 16:36
老师:最小值限定为0或者1,不存在>1的情况,所以就不需要测试最小值改为>=2了吧?

抽象,抽象,抽象!!!
算法是抽象的!!!

TA的精华主题

TA的得分主题

发表于 2018-11-30 16:50 | 显示全部楼层

老师:函数语法是: {  =SHUZHEN(数据区域,最小值,最大值),第二、三参数可以是指定数值,也可以是单元格引用。
而您写的代码则是:=SHUZHEN(数据区域,最大值,最小值),怎样修改下面代码,才能使输入公式=SHUZHEN(数据区域,最小值,最大值)后,得出正确的计算结果?

   把代码第一行Function SHUZHEN(rng As Range, x, y),改成Function SHUZHEN(rng As Range, y, x)行不行?

Function SHUZHEN(rng As Range, x, y)
Dim ar, b, i
ar = rng: b = (x - y + 1) / 3
For i = 1 To UBound(ar)
    If ar(i, 1) <> "" Then
        If y = 0 Then ar(i, 1) = ar(i, 1) \ b & ar(i, 1) Mod 3
        If y > 0 Then ar(i, 1) = (ar(i, 1) - 1) \ b & ar(i, 1) Mod 3
    Else
        ar(i, 1) = ""
    End If
Next
SHUZHEN = ar
End Function


TA的精华主题

TA的得分主题

发表于 2018-11-30 16:54 | 显示全部楼层
lsdongjh 发表于 2018-11-30 16:45
抽象,抽象,抽象!!!
算法是抽象的!!!

指定最小值只有0或者1这两种情况发生,绝对没有第三者情况出现的可能。

TA的精华主题

TA的得分主题

发表于 2018-11-30 17:05 来自手机 | 显示全部楼层
把第一行代码→x,y位置调换完全可以!
其实是书写习惯问题!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-30 17:25 | 显示全部楼层
lss001 发表于 2018-11-30 17:05
把第一行代码→x,y位置调换完全可以!
其实是书写习惯问题!

由于自定义函数输入时没有参数说明,为了防止弄混,同类参数我一般都是采取升序输入--最小值-中位值-最大值的。

谢谢老师!

TA的精华主题

TA的得分主题

发表于 2018-11-30 17:43 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2018-12-22 20:11 编辑

'使用时特别注意→第2参数<小>与第3参数<大>
Function SHUZHEN(rng As Range, y, x)
    Dim ar, b, i
    ar = rng: b = Int((x - y + 1) / 3)
    If Not IsArray(ar) Then
        ReDim ar(1 To 1,1 To 1): ar(1, 1) = rng
    Else: ar = rng
    EndIf
    For i = 1 To UBound(ar)
        If ar(i, 1) <> "" Then
            If y = 0 Then ar(i, 1) = Int(ar(i, 1) / b) & ar(i, 1) Mod 3
            If y = 1 Then ar(i, 1) = Int((ar(i, 1) - 1) / b) & ar(i, 1) Mod 3
        Else: ar(i, 1) = ""
        End If
    Next
    SHUZHEN = ar
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-30 17:56 | 显示全部楼层
lss001 发表于 2018-11-30 17:43
综合您以及楼上各位意见代码完善一下
把最小值与最大值位置互换!
当最小值大于1或小于0时将给出提示!

经测试后显示的计算结果完全正确!再次感谢老师!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-1 12:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

老师:VBA抓取指定网页内容,能不能抓取到下拉框里隐藏的内容?
  http://club.excelhome.net/thread-1449108-1-1.html

TA的精华主题

TA的得分主题

发表于 2018-12-2 19:20 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
WYS67 发表于 2018-12-1 12:32
老师:VBA抓取指定网页内容,能不能抓取到下拉框里隐藏的内容?
  http://club.excelhome.net/thread-14 ...

很少写网抓代码!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 21:01 , Processed in 0.023516 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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