我目前正在尝试为Excel创建一个宏,其中包含特定值(基本上是数字)的列将以标准化方式显示在新列中(最高数字= 1,最低数字= 0)。
通常,我会使用公式:
=(J2-MIN($J$2:$J$XXX))/(MAX($J$2:$J$XXX)-MIN($J$2:$J$XXX))
但是,由于列的长度是动态的,并且对于每组值都会更改,因此我无法为XXX输入值。
现在,我发现了如何获得动态范围(例如:numRows = Range(Selection, Selection.End(xlDown)).Rows.Count
),但我没有设法合并这两个函数。
我在这个网站上找到了一个关于数据规范化的线程,但我认为这是一个不同的故事,这里的这个应该更简单。
我将不胜感激任何帮助!当我刚刚开始使用宏(2小时前)时,我也很感激,如果这将是简单的语言。
编辑: 首先,感谢您的快速回复!
我天真地尝试使用此代码:
Sub Normalize_TEST()
'
' Normalize_TEST Makro
'
'
Range("A1").Select
numRows = Range(Selection, Selection.End(xlDown)).Rows.Count
Range("K2").Select
ActiveCell.FormulaR1C1 = "=(("J2")-MIN($J$2:$J$numRows$))/((MAX($J$2:$J$numRows$)-MIN($J$2:$J$numRows$))
Range("K2").Select
Selection.AutoFill Destination:=Range(Cells(2, 11), Cells(numRows, 11))
End Sub
但它不起作用,我收到一条错误消息("编译错误")。
答案 0 :(得分:0)
我现在才意识到你是对的,我甚至不需要VBA。您的=(J2-MIN($ J:$ J))/(MAX($ J:$ J)-MIN($ J:$ J))行正常工作。我不知道用$ j:$ J它意识到不包括空单元格。 我现在只使用此代码用于单元格K2,然后为其余部分执行VBA自动填充功能。 我认为这可以关闭。
感谢@tigeravatar的超级快速帮助!