Вы можете использовать функцию JavaScript eval(str)
.
Что эта функция делает, это преобразовать строку, предоставленную в JS-код, а затем выполняет ее.
Например:
eval("console.log('hello world')"); // Logs hello world
Итак, чтобы использовать его как переменную переменную, вы можете сделать следующее:
var a = "hello";
var hello = "world";
console.log(a + " " + eval(a)); // Logs hello world
Это даст тот же результат, что и:
console.log(a + " " + hello); // Logs hello world
(Пример из руководства PHP по переменным переменным .)
Это легко с макросом.
Начните с назначения 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
Обратите внимание, что мои данные были отсортированы по высоким и низким, и код использует это.
Должны быть 14 "2" и 36 "1" с.
Вы можете перефразировать свою проблему следующим образом:
x
- количество строк, назначенных 2 y
, - это количество строки, назначенные 1 IF(Y2>=LARGE($Y$2:$Y$51,14),2,1)
– Scott Craner
13 July 2018 в 16:29
=IF(Row(1:1)<=14,2,1)
– Scott Craner
13 July 2018 в 16:30
Вы имеете в виду, как это?
=1+1*(ROW(C1)<=64-COUNTA($B$1:$B$50))
EDIT: если вы хотите, чтобы длина столбца также была переменной и все равно давала вам 64 на сумму Z, вы можете просто использовать if:
=IF(B1<>"";1+1*(ROW(C1)<=64-COUNTA(B:B));"")
Просто измените точку с запятой для запятых, если ваш Excel должен