Функция генератора Python — есть ли эквивалент Excel?

#python #excel #generator

#python #excel #генератор

Вопрос:

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

Я хотел бы сохранить электронную таблицу только Excel (возможно, VBA), но есть ли эквивалент генератора Python или функций yield, доступных в Excel?

т. е.

 gen = (x for x in range(10))
  

Комментарии:

1. Я серьезно сомневаюсь в этом. Я не видел генераторов за пределами python. В python 3 range уже есть генератор, поэтому вам нужно только использовать gen = range(10) .

2. Я видел генераторы и сопрограммы на других языках, но определенно не на VBA.

3. Спасибо @TammoHeeren, я на самом деле этого не знал, так что это бонусная находка! 😉

4. Пожалуйста, опишите, что вы хотите сделать с gen после ее создания. Excel может обрабатывать функции массива, и поэтому VBA также может использовать вычисление.

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

Ответ №1:

Как упоминалось в комментариях, было бы хорошо, если бы вы могли точно описать, что вы пытаетесь сделать в Excel .

Excel может выполнять формулы массива. В этих формулах массива мы можем использовать функцию ROW or COLUMN для получения массивов последовательных целых чисел.

Например:

 {=SUM(ROW(1:10))}
  

введенная в виде формулы массива с помощью [Ctrl] [Shift] [Enter] вычислит сумму целых чисел от 1 до 10.

Чтобы ввести формулу массива, введите формулу в ячейку без фигурных скобок, а затем нажмите [Ctrl] [Shift] [Enter] для подтверждения. После этого фигурные скобки появятся автоматически.

Или с помощью VBA:

 Sub test()

 Dim gen As Variant

 gen = [{0,1,2,3,4,5,6,7,8,9}] 
 ' gen is now an Array Variant(1 to 10) containing integers 0 to 9

 gen = [ROW(1:10)-1] 
 ' gen is now an Array Variant(1 to 10, 1 to 1) containing integers 0 to 9

 For Each i In gen

  MsgBox i

 Next

 Erase gen ' free the memory used by gen

End Sub
  

будет выполняться цикл от 0 до 9.

Комментарии:

1. Извините, я думал, что ответил на этот комментарий. Я думаю, вы указали то, что мне нужно (у меня меньше опыта работы с VBA!). Работает ли это как список, где значения остаются в памяти, или значения удаляются после использования? Я рассматриваю возможность генерации значений с шагом 10 между

2. 0 и 300, прежде чем соединить их с другим списком, чтобы сгенерировать все возможные значения. Комбинаций будет много, поэтому, удаляя значения после использования, я должен сэкономить вычислительное время.

3. gen Находится в памяти до тех пор, пока вы не освободите память с помощью Erase gen . Ваш ответ на мой комментарий был слишком широким. Пожалуйста, отредактируйте свой вопрос и опишите конкретную проблему. Кстати..: Цикл от 0 до 300 на шаге 10 звучит для меня как простой For i = 0 to 300 Step 10 ... Next .

4. Спасибо за это. Извините, но я не могу вдаваться в подробности, кроме того, что у меня есть.

5. Как упоминалось ранее, я не просто перебираю эти приращения, я настроил таблицы запросов для извлечения оперативных данных с веб-сайтов, и их необходимо объединить. Существуют миллиарды комбинаций, поэтому я ищу способы их сокращения.