【问题标题】:vba if a condition in cells is metvba 如果满足单元格中的条件
【发布时间】:2021-12-05 10:31:26
【问题描述】:

一直在绞尽脑汁解决我在 Excel 中面临的问题。我在这里很新。

在单元格I2 我有一个值。根据某些条件,该值每天都在变化。假设今天的值为-1500

在单元格L7L186 的列L 中,我有一些公式可以根据其他单元格不断计算数字,这些单元格每分钟都会使用来自外部数据源的数据进行更新

我希望L7L186 中的值永远不会超过单元格I2 中的值,在本例中为-1500

因此,如果L7L186 范围内的任何单元格中的值在当天的任何时间违反单元格I2 中的值,我希望该单元格中的公式被@987654333 中的现有值替换@。

换句话说,我希望该单元格中的计算停止并由I2中的值替换

如果语句可以解决这个问题,但唯一的问题是,由于值正在动态更新,它们可能会在 -1500 下再次下降,然后该数字将显示在该单元格中,我不希望这种情况发生,

公式是一个if语句=IFS(I10="","",I10="long",(F10-E10)*K10,I10="short",(E10-F10)*K10)

谁能帮帮我

【问题讨论】:

  • 看来最小公式可以为你解决这个问题
  • L7:L186中的公式是怎么写的?不能加上条件,如果超过I2,则显示I2?
  • 公式是if语句......=IFS(I10="","",I10="long",(F10-E10)*K10,I10="short ",(E10-F10)*K10)

标签: excel vba excel-formula


【解决方案1】:

只需使用=MIN($I$2, IFS(I10="","",I10="long",(F10-E10)*K10,I10="short",(E10-F10)*K10)),公式的值不会高于I2 中的值,因为您总是取这两者中较低的值(MIN)。

例如,如果您的公式IFS(I10="","",I10="long",(F10-E10)*K10,I10="short",(E10-F10)*K10) 的结果是-1600,那么MIN(-1500, -1600) 将返回-1600,因为它是两个值中较小的一个。

【讨论】:

  • 感谢您的回复......我的声明“我希望 L7 到 L186 中的值永远不应超过单元格 I2 中的值,在这种情况下为 -1500”似乎已经创建一些混乱。我的意思是一旦值达到-1500,它应该保持在-1500,并且不应该高于或低于这个值。它应该在那里冻结。因此,如果有人可以建议一个 vba 代码,其中公式只是将自身转换为单元格 I2 中的值。我的想法是 Min 或 Max 可能不起作用,因为细胞每分钟都在动态变化
  • @DigantBhansali 那么你需要展示你到目前为止所尝试的内容,因为这不是免费的代码编写服务 (No attempt was made)。您需要做的是在每分钟更改您的数据的代码中进行此检查。请做一些研究并自己尝试一些东西。然后在您的问题中发布您的尝试并提出一些问题。
  • Private Sub Worksheet_Change(ByVal Target As Range) If Range("f18").Value
  • 这是我设法到达的地方......已经让它适用于单个单元格“F18”......希望它适用于“f18:f40,在保持 g15 不变的同时....我无法弄清楚的是如何将代码应用于 f18:f40 范围内的所有单元格.......任何人都可以建议如何做到这一点...我经历了“没有尝试”,我真的很抱歉没有让这里的成员知道我已经尝试过什么
  • @DigantBhansali 请注意,理解您的问题(代码等)所需的一切都应该在问题本身中(您可以随时编辑它并添加信息)。 • 另请注意,Worksheet_Change 仅在单元格内容更改时才会在单元格更改时触发。如果公式值发生变化(没有这样的事件),它不会触发。检查在计算任何单元格时运行的Worksheet_Calculate 事件。但请注意,此事件没有Target,因此您必须遍历所有要检查的单元格(在每个 计算中)。这是你得到的唯一方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多