正确提问问题的方式

案例一

我以前曾经想解决这样一个问题:

比如1-3,里面有1,2,3三个数字,1-3,5,7-9,里面有3+1+3=7,我希望能得到里面含含有的全部数字,实际情况自然是获取里面有几个是奇数的周数/几个是偶数的周数/总周数。我以为很容易理解,于是就这样发起了提问:


各位,这种用excel公式该怎么写?
原始形式 单周 双周 总周数
2-5,7-9,11-12 5 4 9
单周 双周 总周数的公式?


然而,这样的表述竟然令大家都看不明白:

群友们的回复:问问题不是这么问的

你至少得弄个Excel,模拟一下结果

就是在纸上画出来也好

我连问题都看不懂


于是我又截了图:

图片[1]-正确提问问题的方式-Word实用工具

结果群友表示还是不明白:

图片[2]-正确提问问题的方式-Word实用工具

这个表示什么?

于是我又进行了补充:
单周就是:3,5,7,9,11周,共5周,需要5这个数字;

双周就是:2,4,8,12,共4周,需要4这个数字;

总数就是:2,3,4,5,7,8,9,11,12,共9周,要9这个数字。

直至这里,群友表示才明白怎么回事。

图片[3]-正确提问问题的方式-Word实用工具

案例二

在一个正则替换工具交流群里,一个群友这样提问:

阿拉伯数字转中文 怎操作?有中文到阿拉伯数字,阿拉伯数字到中文数字有吗

于是群友们针对这个问题的理解就出现了歧义,给出了Excel公式,用于数字转人民币的公式:
=IF(F2<0,”负”,””)&IF(TRUNC(F2)=F2,TEXT(IF(F2<0,-F2,F2),”[DBNum2]”)&”元整”,IF(TRUNC(F210)=F210,TEXT(TRUNC(IF(F2<0,-F2,F2)),”[DBNum2]”)&”元”&TEXT(RIGHT(F2),”[DBNum2]”)&”角整”,TEXT(TRUNC(F2),”[DBNum2]”)&”元”&IF(ISNUMBER(FIND(“.0″,F2)),”零”,TEXT(LEFT(RIGHT(F2,2)),”[DBNum2]”)&”角”)&TEXT(RIGHT(F2),”[DBNum2]”)&”分”))

提问者看到这样的答案一头雾水:跟我说话吗?我的是word

看到这里,又有群友回复:你就通配符就好了,或者选择内容转大写,不用1324变成一千三百二十四吧

另一网友给出了这样的结果:

图片[4]-正确提问问题的方式-Word实用工具

提问者还是感到很尴尬:[表情]我死了。我只是word里阿拉伯数字转换为中文数字。不人民币

最后一个网友用ai写出了这样的结果:

Sub ReplaceNumbersWithChinese()
    ' 关闭屏幕刷新以提高性能
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' 保存当前撤销记录
    Dim undoRecord As Object
    Set undoRecord = Application.UndoRecord
    undoRecord.StartCustomRecord "替换数字为中文大写"
    
    ' 使用 Word 的 Find-Replace 功能进行批量替换
    With ActiveDocument.Content.Find
        ' 设置通用查找选项
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        
        ' 替换所有阿拉伯数字为中文大写(按最长匹配优先)
        .Text = "0"
        .Replacement.Text = "零"
        .Execute Replace:=wdReplaceAll
        
        .Text = "1"
        .Replacement.Text = "壹"
        .Execute Replace:=wdReplaceAll
        
        .Text = "2"
        .Replacement.Text = "贰"
        .Execute Replace:=wdReplaceAll
        
        .Text = "3"
        .Replacement.Text = "叁"
        .Execute Replace:=wdReplaceAll
        
        .Text = "4"
        .Replacement.Text = "肆"
        .Execute Replace:=wdReplaceAll
        
        .Text = "5"
        .Replacement.Text = "伍"
        .Execute Replace:=wdReplaceAll
        
        .Text = "6"
        .Replacement.Text = "陆"
        .Execute Replace:=wdReplaceAll
        
        .Text = "7"
        .Replacement.Text = "柒"
        .Execute Replace:=wdReplaceAll
        
        .Text = "8"
        .Replacement.Text = "捌"
        .Execute Replace:=wdReplaceAll
        
        .Text = "9"
        .Replacement.Text = "玖"
        .Execute Replace:=wdReplaceAll
        
        ' 可选:处理千位分隔符(如果需要保留)
        .Text = ","
        .Replacement.Text = ","
        .Execute Replace:=wdReplaceAll
        
        ' 可选:处理小数点(如果需要保留)
        .Text = "."
        .Replacement.Text = "点"
        .Execute Replace:=wdReplaceAll
    End With
    
    ' 恢复设置并结束撤销记录
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    undoRecord.EndCustomRecord
End Sub

到最后提问者也没有说可以。


显然,这些都是错误的提问方式。容易让人产生歧义。

正确的提问方式是什么?

我曾经花了接近半个小时来准备材料,模拟结果,当然这样的准备是绝对没有问题的。

案例一的提问方式应该是这样:

图片[5]-正确提问问题的方式-Word实用工具

同时一定要提供Excel附件!不然你还想让别人手动给你敲这些东西么?

既然是提问,那么就不要让别人去猜问题,不要产生任何的歧义,能够直接在现有附件上直接去处理问题!

附件:

案例二的提问方式应该是这样

各位,如何实现这样的替换效果?

图片[6]-正确提问问题的方式-Word实用工具

附件:

附参考答案:

Sub ConvertNumbersToChinese()
    Dim regEx As Object
    Dim matches As Object
    Dim match As Object
    Dim i As Long
    Dim rangeText As String
    Dim chineseNumber As String
    ' 创建正则表达式对象
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Global = True
    regEx.Pattern = "\b\d+\b" ' 匹配一个或多个数字
    ' 遍历文档中的所有段落
    Set rg = Selection.Range
    For Each para In rg.Paragraphs
        rangeText = para.Range.Text
        Set matches = regEx.Execute(rangeText)
        ' 检查是否有匹配的数字
        If matches.Count > 0 Then
            For Each match In matches
                ' 将阿拉伯数字转换为中文数字
                chineseNumber = ConvertToChineseNumber(CLng(match.Value))
                ' 替换文本中的数字
                rangeText = Replace(rangeText, match.Value, chineseNumber)
            Next match
            ' 将修改后的文本放回段落
            para.Range.Text = rangeText
        End If
    Next para
End Sub
Function ConvertToChineseNumber(ByVal num As Long) As String
    Dim units(0 To 4) As String
    Dim tens(0 To 9) As String
    Dim i As Integer
    Dim result As String
    Dim tempNum As Long
    
    ' 定义中文数字单位
    units(0) = ""
    units(1) = "十"
    units(2) = "百"
    units(3) = "千"
    units(4) = "万"
    
    ' 定义中文数字十位
    tens(0) = ""
    tens(1) = "一"
    tens(2) = "二"
    tens(3) = "三"
    tens(4) = "四"
    tens(5) = "五"
    tens(6) = "六"
    tens(7) = "七"
    tens(8) = "八"
    tens(9) = "九"
    
    result = ""
    tempNum = num
    
    ' 处理万位以上的数字
    Do While tempNum > 0
        Dim digit As Long
        digit = tempNum Mod 10 ' 获取当前位的数字
        
        ' 如果当前位不是0,则添加中文数字
        If digit > 0 Then
            result = tens(digit) & units(i) & result
        ElseIf Len(result) > 0 And Left(result, 1) <> "零" Then
            result = "零" & result
        End If
        
        tempNum = tempNum \ 10 ' 移至下一位
        i = (i + 1) Mod 5 ' 更新单位索引
    Loop
    
    ' 处理特殊情况
    If Left(result, 1) = "一" And InStr(result, "十") > 0 Then
        result = Replace(result, "一十", "十")
    End If
    
    ConvertToChineseNumber = result
End Function

总结

正确提问问题的方式就是:

1.尽可能详实的描述问题;

2.一定要提供附件,附件里包含处理前的样子和处理后的样子,这样就能让热心回答者一眼就看透问题的本质;

3.若是实在无法做出处理后的样子,那就手工画图出来,同时录制视频说明。

THE END
喜欢就支持一下吧
抢沙发
头像
提交
头像

昵称

取消
昵称

    请登录后查看评论内容