VBA写入公式(6):排名不重复

排名不重复,即使是相同值,先出现的排名在前。输入的公式是:=RANK(A1,$A 1 : 1: 1:A$17)+COUNTIF(A 1 : A 1 , A 1 ) − 1 , 第 1 次 选 择 一 个 单 元 格 A 1 , 第 1 次 选 择 区 间 1:A1,A1)-1 , 第1次选择一个单元格A1, 第1次选择区间 1:A1,A1)1,1A11A 1 : 1: 1:A$17,第3次选择保存的一个单元格位置。

Sub 排名不重复()
    MsgBox "排名不重复,即使是相同值,先出现的排名在前。输入的公式是:=RANK(A1,$A$1:$A$17)+COUNTIF(A$1:A1,A1)-1 , 第1次选择一个单元格A1, 第1次选择区间$A$1:$A$17,第3次选择保存的一个单元格位置。"
    Set rng1 = Application.InputBox(prompt:="鼠标选择排名中的一个单元格,如A1。", Type:=8)
    a_rc = rng1.Address ' $A$1,双重锁定 lock row and column
    'a_k = rng1.Address(1, 1) '$A$1
    a = rng1.Address(0, 0) 'A1, unlock row and column
    a_r = rng1.Address(1, 0) 'A$1, rng1.Address(行, 列),锁定行就是锁定A1中的1.
    a_c = rng1.Address(0, 1) '$A1
'    Debug.Print a_rc
'    Debug.Print a_k
'    Debug.Print a
'    Debug.Print a_r
'    Debug.Print a_c
    
    'Debug.Print a
'    Debug.Print Split([b3].Address, "$")(1)
'    Debug.Print Split([bc3].Address, "$")(1)
    'Debug.Print Split(a, "$")(1) '列标字母
    'Debug.Print Split(a, "$")(2) '行号
    'Debug.Print ActiveCell.Row
    'Debug.Print rng1.Row '行号
    Set rng2 = Application.InputBox(prompt:="鼠标选择排名中的一列数个单元格,如$A$1:$A$17。", Type:=8)
'    '有些是文本格式,但是也可以计算正确的剩余时间。此处只是作提醒。
    b_rc = rng2.Address ' $A$1,双重锁定 lock row and column
    b = rng2.Address(0, 0) 'A1, unlock row and column
    b_r = rng2.Address(1, 0) 'A$1, rng1.Address(行, 列),锁定行就是锁定A1中的1.
    b_c = rng2.Address(0, 1) '$A1
    Set rng3 = Application.InputBox(prompt:="鼠标选择保存结果的一个单元格,如B1。", Type:=8)
    'rng3.Formula = "RANK(" & a & "," & b_rc & ")" & "+COUNTIF(" & a_r & ":" & a & "," & a & ")-1" '少了等号,运行后可以查看公式
    rng3.Formula = "=RANK(" & a & "," & b_rc & ")" & "+COUNTIF(" & a_r & ":" & a & "," & a & ")-1"
    '=RANK(M4,$M$4:$M$20)+COUNTIF(M$4:M4,M4)-1
    'cell = "$" & Split(a, "$")(1)
    'Debug.Print cell
     'Call lock_rc(a)
'    Debug.Print lock_rc(a, 2)
    
End Sub

上述代码的参考说明:

'Address(0, 0) 相对引用
'Address绝对引用
'Address(1, 0) 混合引用 (相对列绝对行)
'Address(0,1) 混合引用 (相对行绝对列)

'Public Function lock_rc(cell, inte)
'    Select Case inte
'        Case 1
'            lock_rc = "$" & Split(cell, "$")(1)
'            'Debug.Print cell
'        Case 2
'            lock_rc = "2" & Split(cell, "$")(1)
'        Case 3
'            lock_rc = "3" & Split(cell, "$")(1)
'     End Select
'End Function


'Public Function lock_rc(cell)
'    lock_rc = "$" & Split(cell, "$")(1)
'    'Debug.Print cell
'
'End Function

'Function 函数名(参数列表 ... )
'    函数体
'    函数名 = 返回值
'End Function

'
'Function lockRC(cell As String, str2 As String) 'lock row or column, inte is short for integer
'    'cell = "$" & Split(cell, "$")(1) & Split(a, "$")(2)
'    cell = "123"
''    Select Case str2
''    Case r
''    cell = "$" & Split(cell, "$")(1) & Split(a, "$")(2)
''
''    End Select
'
'End Function




'列标 = VBA.Split(Cells(1, 9).Address, "$")(1)  中的红色部分表示什么意思 ?相当于什么 ?还有类似情况吗 ?
'Split()函数是将Cells(1,9).Address,也就是单元格地址:$I$1,依据"$"作为分隔符,分割成一个一维数组,也就是会得到{"","I","1"}'而这个数组里有三个元素,分别是(0)、(1)和(2),(1)就是取数组里的第二个元素……
'
'如果一维数组里有四个元素,那就可以用(0)、(1)、(2)、(3)来代表其中的各个元素……

'"$"为分隔符
'0→“$"前的值(空)
'1→第1个”$"后的数(第2个"$"之前)
'2→第2个"$"后的数(第3个"$"之前)
'‘.......
'如:
'列标 = VBA.Split(Cells(1, 256).Address, "$")(1) '→答案是“iv"
'列号 = VBA.Split(Cells(5, 256).Address, "$")(2) '→答案是“5"


'
'2 VBA过程,函数的返回,对比python等
'python的函数一定会返回,函数带return 不带默认会返回 return none
'VBA的function也是一定有返回值把,至少是none
'VBA的sub 没有返回值
'
'
'返回的方式不同
'python 的function 可以使用 return返回
'VBA的function 直接让 function_name = xxxx 这样返回
'并且VBA的sub不能返回值,sub_name=xxxx 会报错
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值