我有大量包含数值的数据。但由于对数值数据的最大值和最小值有较新的要求,我必须修改许多单元格,将每个单元格的值设置为其当前值,除非它超出范围,在这种情况下我应该只取最小值或最大值并将其存储在同一个单元格中。
请注意,我不想将公式存储在 Excel 文件中,而只是将其应用于一系列值一次并在单元格中存储结果值而不是公式。
我会尽量说得更清楚。假设第 1 行有 A、B 和 C 列的值:
20 42 53
我想要选择范围 A1:C1,并将公式应用于每个范围:
= if($cell > 50; 50; if($cell < 25;25; $cell))
我用了$单元格来表示进行计算的当前单元格,这不起作用,这只是为了说明我正在尝试做的事情。
因此我期望:
25 42 50
但再次强调,只是值而不是公式。还请注意,我不能不在单元格 A1 中为该单元格写入上面的公式,因为它是一个循环引用,这会引发错误。
一种可能的方法是使用两张表,一张包含当前值,另一张包含正确范围内值的公式,但这是不可能的,因为该文件是由一个既不需要公式也不需要多张表的程序处理的。
希望我已经表达清楚了我的观点。
答案1
Excel 中的单元格包含公式或值。您可以在公式中使用当前单元格,但它会被忽略以进行计算。
正如您提到的,您可以将值放在一页上,将公式放在另一页上。我不确定这个其他程序如何处理 Excel 文件,但如果您将其保存为 CSV 之类的文件,则只会导出值(并且您可以指定导出哪个工作表)。
我能想到的唯一其他选择是使用公式来修改值,从而创建新的行/列。然后使用“复制/选择性粘贴”功能将修改后的值粘贴回原始单元格。
答案2
我猜您想将公式叠加在已包含数据的单元格区域上。如果是这样,我认为唯一可以实现此目的的方法是使用 VBA,它会选择相关区域并在这些区域填满时应用公式。如果您想使用直接公式,也可以隐藏行,但这可能并不理想。
答案3
事实上,解决方案非常简单,几分钟前我才想到。我可以通过编写一个简单的 VBA 宏来实现我的目标,只需将所需的范围应用于选定的单元格即可。代码:
Function applyMakeInRange(minVal As Double, maxVal As Double, cells As Range)
Dim cellVal As Double
For Each cell In cells.cells
cellVal = cell.Value
If cellVal > maxVal Then
cellVal = maxVal
Else
If cellVal < minVal Then
cellVal = minVal
End If
End If
cell.Value = cellVal
Next
End Function
Sub makeInRange()
Dim maxVal As Double
Dim minVal As Double
Dim cells As Range
Set cells = Selection
maxVal = InputBox("Max Value")
minVal = InputBox("Min Value")
res = applyMakeInRange(minVal, maxVal, cells)
End Sub
只需将文件保存为不带宏(一旦执行)即可解决问题