ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] [第18期]字母编码(已总结)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-12-4 14:17 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

发现VBA竞赛版块大家答题兴致不高,来一道简单的:

难度:

容易 ★★

题目:

1.有一种字符串(全部大写字母)编码方式,如:A=1,B2=2,C=3,…Y=25,Z=26
2.显然, “EXCEL”可编为5243512(E=5,X=24,C=3,E=5,L=12)
          “HOME”可编为815135(H=8,O=15,M=13,E=5)
3.如果某字符串编码5243512,可能不仅仅是“EXCEL”一个词,如“EBDCEAB”(E=5,B   =2,D=4,C=3,A=1)亦可。
4.在A1单元格给出任意编码,试在A2:A65536列出所有编码为[A1]的字符串(全部大写字母)
 如: [A1]=1189
 则: [A2]=AAHI
          [A3]=ARI
          [A4]=KHI

要求:
1    [A1]=INT(10^(RAND()*10))   
2.   代码写到下面事件中

       Private Sub CommandButton1_Click()

       End Sub
评分:
      结果正确给3分,精彩答案另加分。


 


[此贴子已经被作者于2006-12-31 3:41:23编辑过]
单选投票, 共有 2 人参与投票

距结束还有: 3436 天18 小时47 分钟

您所在的用户组没有投票权限

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-12-4 20:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

0怎么办? 如果把编码方式改成A=0,B=1,C=2...Z=25会不会好些?

的确如此,欠考虑。

[此贴子已经被northwolves于2006-12-31 3:13:48编辑过]

TA的精华主题

TA的得分主题

发表于 2006-12-5 08:24 | 显示全部楼层

基本正确,递归函数参数不少。

Sub ZF(s As String, z() As String, L As Integer, t As String, n As Integer, r As Long)

[此贴子已经被northwolves于2006-12-31 2:47:22编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-12-5 14:36 | 显示全部楼层

这种题目用递归做好些. 代码多在处理0的不同情况. 这里0在1或2后做字母处理, 单独时就做0处理.

Dim arr(1 To 26) As String
Private Sub CommandButton1_Click()
    Dim tmpStr As String
    Dim tmp As String
    For i = 65 To 90
        arr(i - 64) = Chr(i)
    Next i
    tmpStr = ""
    tmp = Cells(1, 1)
    Range(Cells(2, 1), Cells(10000, 1)).Clear
    Cells(1, 1).Select
    tm = Timer
    Call GetAlpha(tmp, tmpStr)
    MsgBox "Processed " & Format((Timer - tm), "0.00000") & " seconds"
End Sub
Sub GetAlpha(strInput As String, tmpStr As String)
    Dim tmp As String
    If Len(strInput) = 1 Then
        ActiveCell.Offset(1, 0).Select
        If strInput = "0" Then
            ActiveCell.Value = tmpStr & "0"
        Else
            ActiveCell.Value = tmpStr & arr(strInput)
        End If
    ElseIf Len(strInput) = 2 Then
        ActiveCell.Offset(1, 0).Select
        If strInput > 26 Then
            If Right(strInput, 1) = "0" Then
                tmp = tmpStr & arr(Left(strInput, 1)) & "0"
            Else
                tmp = tmpStr & arr(Left(strInput, 1)) & arr(Right(strInput, 1))
            End If
            ActiveCell.Value = tmp
        ElseIf strInput = "10" Or strInput = "20" Then
            ActiveCell.Value = tmpStr & arr(strInput)
        ElseIf strInput = "00" Then
            ActiveCell.Value = tmpStr & "00"
        ElseIf Left(strInput, 1) = "0" Then
            ActiveCell.Value = tmpStr & "0" & arr(Right(strInput, 1))
        Else
            ActiveCell.Value = tmpStr & arr(Left(strInput, 1)) & arr(Right(strInput, 1))
            ActiveCell.Offset(1, 0).Select
            ActiveCell.Value = tmpStr & arr(strInput)
        End If
    Else
        If Left(strInput, 1) <> "0" Then
            tmp = tmpStr & arr(Left(strInput, 1))
            Call GetAlpha(Mid(strInput, 2), tmp)
            If Left(strInput, 2) <= 26 Then
                tmp = tmpStr & arr(Left(strInput, 2))
                Call GetAlpha(Mid(strInput, 3), tmp)
            End If
        Else
            tmp = tmpStr & "0"
            Call GetAlpha(Mid(strInput, 2), tmp)
        End If
    End If
End Sub

基本正确,速度很快,我个人也比较喜欢递归。

[此贴子已经被northwolves于2006-12-31 2:44:58编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-12-6 12:03 | 显示全部楼层

[原创]

我先抛个砖吧。

用很笨的算法实现的,敬请版主审阅


基本正确。代码优化余地比较大

[此贴子已经被northwolves于2006-12-31 2:01:42编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-12-7 11:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

基本正确,思路不错

'若数字为10,则只有一个结果J.
'本程序先计算一个N位数字有多少种1位2位组合.将每种组合都放入数组.
'如1189为四位,则组合为"1111","211","121","112","22"五种.
'按每种组合从源串中进行取数转换,若所有位都能转换成功(1位不为0,2位在1-26之间),则该组合输出.
'每次运行后A1格的数据都会自动更新,所以程序开始前记录A1的值在A3格.

[此贴子已经被northwolves于2006-12-31 2:05:17编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-12-12 14:23 | 显示全部楼层

版主:

第一次的答题有些问题,现改正了。

另外又加上了又一方法实现的代码

麻烦您了,请批阅


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

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

我也来一下,也不知经不经得起检验

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-12-14 19:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册


重新来个,修正一下

基本正确。运用了DO,FOR两种循环,采用数组操作还可快些。

[此贴子已经被northwolves于2006-12-31 2:11:33编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-12-15 10:25 | 显示全部楼层

做好了.

不过出题时,没说明0的用法.解题时是这样考虑的,10和20是允许的,其它情况下,0视为不存在.


基本正确,工作表函数信手拈来,Ifuleu.

[此贴子已经被northwolves于2006-12-31 3:30:59编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

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

本版积分规则

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

GMT+8, 2024-11-21 19:29 , Processed in 0.042978 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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