Как зациклить в Excel без VBA или макросов? - PullRequest
37 голосов
/ 09 февраля 2011

Возможно ли выполнить итерацию (цикл) группы строк в Excel без установленных VBA или макросов?Google не дал ничего полезного.

=IF('testsheet'!$C$1 <= 99,'testsheet'!$A$1,"") &
IF('testsheet'!$C$2 <= 99, 'testsheet'!$A$2,"") &
IF('testsheet'!$C$3 <= 99, 'testsheet'!$A$3,"") &
... and so on through !$C$40, !$A$40 ...

На самом деле, мне придется повторять код выше 40 раз в каждой ячейке, и у меня есть более 200 ячеек, которым нужен код. снифф

Я довольно хорошо разбираюсь в PHP / SQL, но только изучаю Excel.

Ответы [ 6 ]

18 голосов
/ 09 февраля 2011

Способ получения результатов по вашей формуле - начать с нового листа.

В ячейку A1 введите формулу

=IF('testsheet'!C1 <= 99,'testsheet'!A1,"") 

Скопируйте эту ячейку в строку 40. В ячейку B1 введите формулу

=A1

В ячейку B2 введите формулу

=B1 & A2

Скопируйте эту ячейку в строку 40.

Требуемое значение теперь находится в этом столбце в строке 40.

Не совсем нужный вам ответ, но этоэто самый быстрый способ добиться успеха в совершенстве, не создавая пользовательскую формулу, которая принимает диапазон и выполняет вычисления (что было бы более увлекательно).

5 голосов
/ 02 июня 2016

Я просто искал что-то похожее:

Я хочу суммировать каждый столбец нечетной строки.

SUMIF имеет два возможных диапазона, диапазон до сумма от и диапазон до с учетом критериев in.

SUMIF (B1: B1000,1, A1: A1000)

Эта функция будет учитывать, если ячейка в диапазоне B равна "= 1", она будет суммировать соответствующую ячейку A, только если она есть.

Чтобы получить "= 1" для возврата в диапазон B, я поместил это в B:

= MOD (ROWNUM (B1), 2)

Затем автоматическое заполнение внизчтобы получить модуль для заполнения, вы можете поместить и вычислить критерии здесь, чтобы получить условия SUMIF или SUMIFS, которые вам нужно пройти по каждой ячейке.

Проще, чем ARRAY, и скрывает заднюю часть петель!

3 голосов
/ 09 февраля 2011

Собираюсь ответить сам (поправьте меня, если я ошибаюсь):

Невозможно перебрать группу строк (например, массив) в Excel без установленного VBA / с включенными макросами.

1 голос
/ 17 июля 2018

@ Нат дал хороший ответ.Но поскольку нет способа сократить код, почему бы не использовать контактен для «генерации» необходимого вам кода.Это работает для меня, когда я ленив (при наборе всего кода в ячейке).

Так что нам нужно просто определить шаблон> использовать Excel для построения шаблона 'структура'> добавить "="и вставьте его в ячейку.

Например, вы хотите достичь (я имею в виду, введите в ячейку):

=IF('testsheet'!$C$1 <= 99,'testsheet'!$A$1,"") &IF('testsheet'!$C$2 <= 99,'testsheet'!$A$2,"") &IF('testsheet'!$C$3 <= 99,'testsheet'!$A$3,"") &IF('testsheet'!$C$4 <= 99,'testsheet'!$A$4,"") &IF('testsheet'!$C$5 <= 99,'testsheet'!$A$5,"") &IF('testsheet'!$C$6 <= 99,'testsheet'!$A$6,"") &IF('testsheet'!$C$7 <= 99,'testsheet'!$A$7,"") &IF('testsheet'!$C$8 <= 99,'testsheet'!$A$8,"") &IF('testsheet'!$C$9 <= 99,'testsheet'!$A$9,"") &IF('testsheet'!$C$10 <= 99,'testsheet'!$A$10,"") &IF('testsheet'!$C$11 <= 99,'testsheet'!$A$11,"") &IF('testsheet'!$C$12 <= 99,'testsheet'!$A$12,"") &IF('testsheet'!$C$13 <= 99,'testsheet'!$A$13,"") &IF('testsheet'!$C$14 <= 99,'testsheet'!$A$14,"") &IF('testsheet'!$C$15 <= 99,'testsheet'!$A$15,"") &IF('testsheet'!$C$16 <= 99,'testsheet'!$A$16,"") &IF('testsheet'!$C$17 <= 99,'testsheet'!$A$17,"") &IF('testsheet'!$C$18 <= 99,'testsheet'!$A$18,"") &IF('testsheet'!$C$19 <= 99,'testsheet'!$A$19,"") &IF('testsheet'!$C$20 <= 99,'testsheet'!$A$20,"") &IF('testsheet'!$C$21 <= 99,'testsheet'!$A$21,"") &IF('testsheet'!$C$22 <= 99,'testsheet'!$A$22,"") &IF('testsheet'!$C$23 <= 99,'testsheet'!$A$23,"") &IF('testsheet'!$C$24 <= 99,'testsheet'!$A$24,"") &IF('testsheet'!$C$25 <= 99,'testsheet'!$A$25,"") &IF('testsheet'!$C$26 <= 99,'testsheet'!$A$26,"") &IF('testsheet'!$C$27 <= 99,'testsheet'!$A$27,"") &IF('testsheet'!$C$28 <= 99,'testsheet'!$A$28,"") &IF('testsheet'!$C$29 <= 99,'testsheet'!$A$29,"") &IF('testsheet'!$C$30 <= 99,'testsheet'!$A$30,"") &IF('testsheet'!$C$31 <= 99,'testsheet'!$A$31,"") &IF('testsheet'!$C$32 <= 99,'testsheet'!$A$32,"") &IF('testsheet'!$C$33 <= 99,'testsheet'!$A$33,"") &IF('testsheet'!$C$34 <= 99,'testsheet'!$A$34,"") &IF('testsheet'!$C$35 <= 99,'testsheet'!$A$35,"") &IF('testsheet'!$C$36 <= 99,'testsheet'!$A$36,"") &IF('testsheet'!$C$37 <= 99,'testsheet'!$A$37,"") &IF('testsheet'!$C$38 <= 99,'testsheet'!$A$38,"") &IF('testsheet'!$C$39 <= 99,'testsheet'!$A$39,"") &IF('testsheet'!$C$40 <= 99,'testsheet'!$A$40,"") 

Я не набрал его, я просто использую символ «&» для объединения упорядоченной ячейкив Excel (другой файл, а не файл, над которым мы работаем).

Обратите внимание:

part1> IF('testsheet'!$C$

part2> 1 to 40

part3> <= 99,'testsheet'!$A$

part4> 1 to 40

part5> ,"") &

  • Введите part1 в A1, part3 в C1, часть в E1.
  • Введите "= A1" в A2, "= C1" в C2, "= E1" в E2.
  • Введите "= B1 + 1" в B2, "= D1 + 1"in D2.
  • Enter" = A2 & B2 & C2 & D2 & E2 "в G2
  • Enter" = I1 & G2 "в I2

Теперь выберите A2: I2 и перетащите его вниз.Обратите внимание, что число добавило инкремент для каждой строки, и сгенерированный текст объединяется, ячейка за ячейкой и строка за строкой.

  • Скопируйте содержимое I41,
  • вставьте его куда-нибудь, добавьте«=» впереди, удалите лишнюю & и заднюю часть.

Результат = код, как вы и предполагали.

Я использую Excel / OpenOfficeCalc, чтобы помочь мне сгенерировать код для моих проектов.Работает для меня, надеюсь, это помогает другим.(

1 голос
/ 28 марта 2017

Добавьте больше столбцов, если у вас есть переменные циклы, которые повторяются с разной скоростью.Я не совсем уверен, что вы пытаетесь сделать, но я думаю, что сделал что-то, что можно применить.

Создание одного цикла в Excel довольно простое.Это на самом деле делает работу за вас.Попробуйте это на новой книге

  1. Введите "1" в A1
  2. Введите "= A1 + 1" в A2

A3 будет автоматически "= A2 + 1 ", как вы тянете вниз.Первые шаги не должны быть такими явными.Excel автоматически распознает шаблон и считает, если вы просто поставите «2» в A2, но если мы хотим, чтобы B1-B5 было «100», а B5-B10 было «200» (считая таким же образом), вы можете понять, почемуЗнание, как это сделать, явно имеет значение.В этом сценарии вы просто вводите:

"100" в B1, перетащите до B5 и "= B1 + 100" в B6

B7 автоматически будет "= B2 + 100" и т. Д., КакВы тянете вниз, так что в основном он увеличивается каждые 5 строк бесконечно.Чтобы сделать цикл чисел 1-5 в столбце A:

Введите "= A1" в ячейку A6.При перетаскивании в ячейке A7 и т. Д. Он автоматически будет равен «= A2» и т. Д. Из-за способа, которым Excel выполняет действия.

Итак, теперь у нас есть столбец A, повторяющий числа 1-5, астолбец B увеличивается на 100 каждые 5 ячеек. Вы можете сделать так, чтобы столбец B повторял, например, числа 100-900, используя тот же метод, что и для столбца A, в качестве способа получения, например, каждой возможной комбинации с несколькимипеременные.Перетащите колонны вниз, и они будут делать это бесконечно.Я не рассматриваю данный сценарий в явном виде, но если вы выполните шаги и поймете их, концепция должна дать вам ответ на проблему, которая включает добавление большего количества столбцов и создание конкатенации или использование их в качестве переменных.

1 голос
/ 09 февраля 2011

Вы можете создать таблицу где-нибудь в расчетной электронной таблице, которая выполняет эту операцию для каждой пары ячеек, и использовать автозаполнение для ее заполнения.

Объединить результаты из этой таблицы в ячейку результатов.

200 ячеек so, которые ссылаются на результаты, могут затем ссылаться на ячейку, которая содержит результаты агрегации.В новейших версиях Excel вы можете назвать ячейку результата и ссылаться на нее для удобства чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...