Excel 如何根据几个标准分配1或2(有趣的难题)

Excel 如何根据几个标准分配1或2(有趣的难题),excel,excel-formula,Excel,Excel Formula,我有一个有趣的谜题。我试图根据以下几个标准分配1或2: 2获得最高值 1被分配到最低的值 1和2的总和必须为64 我有一个有50个变量的数据集。有点像这样 x y z 50 100 49 97 ... ... 1 40 基本上,我要做的是Z列,分配1或2。此图表已排序,因此Y中的值从最高到最低。我需要为Y列中的最高值指定2(为最低值指定1)。但是,我需要1和2的总和为64 我在这件事上已经耽搁了一段时间。任何帮助都将不胜感激 谢谢 这对于宏来说很容易 首先为每个项目分配1。

我有一个有趣的谜题。我试图根据以下几个标准分配1或2:

  • 2获得最高值
  • 1被分配到最低的值
  • 1和2的总和必须为64
  • 我有一个有50个变量的数据集。有点像这样

    x    y    z
    50  100
    49  97
    ... ...
    1   40
    
    基本上,我要做的是Z列,分配1或2。此图表已排序,因此Y中的值从最高到最低。我需要为Y列中的最高值指定2(为最低值指定1)。但是,我需要1和2的总和为64

    我在这件事上已经耽搁了一段时间。任何帮助都将不胜感激

    谢谢


    这对于宏来说很容易

    首先为每个项目分配1。然后,从最高值开始,逐步向下,在项目中添加1,直到总数达到64

    Sub assign_values()
        Range("C1:C50").Value = 1
        For i = 1 To 50
            If Application.WorksheetFunction.Sum(Range("C:C")) = 64 Then Exit Sub
            Cells(i, "C").Value = Cells(i, "C").Value + 1
        Next i
    End Sub
    


    请注意,我的数据已从高到低排序,代码利用了这一点。

    使用宏很容易做到这一点

    首先为每个项目分配1。然后,从最高值开始,逐步向下,在项目中添加1,直到总数达到64

    Sub assign_values()
        Range("C1:C50").Value = 1
        For i = 1 To 50
            If Application.WorksheetFunction.Sum(Range("C:C")) = 64 Then Exit Sub
            Cells(i, "C").Value = Cells(i, "C").Value + 1
        Next i
    End Sub
    

    请注意,我的数据已从高到低排序,代码利用了这一点。

    您的意思是,像这样

    =1+1*(ROW(C1)<=64-COUNTA($B$1:$B$50))
    
    =1+1*(第(C1)行)你是说,像这样

    =1+1*(ROW(C1)<=64-COUNTA($B$1:$B$50))
    
    =1+1*(第(C1)行)必须有14“2”和36“1”

    您可以这样重新表述您的问题:

  • x
    是分配给2的行数
  • y
    是分配给1的行数
  • 2x+y=64
  • x+y=50
  • 解x和y
  • 必须有14“2”和36“1”

    您可以这样重新表述您的问题:

  • x
    是分配给2的行数
  • y
    是分配给1的行数
  • 2x+y=64
  • x+y=50
  • 解x和y


  • 为了确保我正确理解这一点,请创建一个包含1的列。运行此宏,它将从上到下向单元格中添加+1,直到该列的总和等于64?@GCC我编写的宏在每个单元格中添加一个首字母1。@GCC您不需要再创建一个包含1的列。代码将在C列中为您添加+1。谢谢谢谢你的帮助。这几乎是我所需要的方式。我还需要一些其他东西。如果有一个值等于或小于0,我需要它为它赋值0,并且1和2仍然等于64。另外,我如何让循环在接下来的50行数据中继续运行,等等?一旦你得到了问题的答案@GCC请不要更改要求。尝试修改给出的答案以满足您的需要。如果您无法修改,请提出一个新的问题,链接到此问题,显示您尝试回答自己的问题的内容以及失败的地方。为了确保我正确理解这一点,请创建一个包含1的列。运行此宏,它将向其中添加+1从上到下直到列的和等于64为止的单元格?@GCC我编写的宏在每个单元格中放一个初始值1。@GCC您不需要再创建一个带1的列,代码会在C列中为您完成。感谢您的帮助。这几乎是我需要的方式。我还需要一些其他东西。如果有值that等于或小于0,我需要它将0分配给它,并且1和2仍然等于64。另外,我如何使循环在接下来的50行数据中继续进行,以此类推?@GCC一旦您得到所提问题的答案,请不要更改要求。尝试修改给出的答案以满足您的需要。如果您不能,请询问新问题链接回这个问题,显示您试图回答自己的问题的内容以及失败的地方。因此,基于该逻辑,将其放入Z2,假设X2是50:
    如果(Y2>=LARGE($Y$2:$Y$51,14),2,1)
    假设Y中的数据没有从大到小排序。如果是
    =IF(行(1:1)@ScottCraner是的,直到OP-我的观点是“你可以用简单的数学计算出答案”:我知道我只是在你的答案的基础上建立了一些公式,这些公式将返回OP想要的东西。我并没有质疑这个答案的有效性,因为它是合理的。我喜欢你使用的代数方法。因此,基于这个逻辑,把它放在Z2中,假设X2是50:
    如果(Y2>=LARGE($Y$2:$Y$51,14),2,1)
    假设Y中的数据不是从大到小排序的。如果是,则
    =If(行(1:1)@ScottCraner是的,直到OP-我的观点是“你可以用简单的数学计算出答案”:我明白了,我只是在你的答案的基础上建立了一些公式,这些公式将返回OP想要的东西。我并没有质疑这个答案的有效性,因为它是合理的。我喜欢你使用的代数方法。我不懂,盖伊甚至不回答我,即使我是第一个用Excel公式解决问题的人。我不懂,盖伊不懂即使我是第一个用Excel公式解决问题的人,我也不会回复我