WedX - журнал о программировании и компьютерных науках

Скопировать значение N раз в Excel

У меня есть простой список:

  A     B
item1   3
item2   2
item3   4
item4   1

Нужно вывести:

  A
item1
item1
item1
item2
item2
item3
item3
item3
item3
item4
07.08.2012

Ответы:


1

Вот один из способов сделать это без VBA:

  1. Вставьте столбец слева от A, чтобы ваши текущие столбцы A и B теперь были B и C.
  2. Поместите 1 в A1
  3. Поместите =A1+C1 в A2 и скопируйте в A5.
  4. Поместите пустую строку в ячейку B5, просто введя одинарную кавычку (') в ячейку.
  5. Поместите 1 в E1, 2 в E2 и скопируйте вниз, чтобы получить 1, 2, ..., 10
  6. Поместите =VLOOKUP(E1,$A$1:$B$5,2) в F1 и скопируйте вниз.

Это должно выглядеть так:

| A  | B     | C | D | E  | F     |
|----|-------|---|---|----|-------|
| 1  | item1 | 3 |   | 1  | item1 |
| 4  | item2 | 2 |   | 2  | item1 |
| 6  | item3 | 4 |   | 3  | item1 |
| 10 | item4 | 1 |   | 4  | item2 |
| 11 |       |   |   | 5  | item2 |
|    |       |   |   | 6  | item3 |
|    |       |   |   | 7  | item3 |
|    |       |   |   | 8  | item3 |
|    |       |   |   | 9  | item3 |
|    |       |   |   | 10 | item4 |
07.08.2012
  • ... а затем, возможно, скопировать по значениям. 07.08.2012
  • (Visual Basic for Application дает статические результаты) 07.08.2012
  • @MUYBelgium, это зависит. Если вы хотите, чтобы все было динамично, то нет. ОП не был конкретным в этом отношении, поэтому я оставлю его как есть. 07.08.2012
  • @user1581199 user1581199 Вам лучше использовать этот трюк, потому что он позволяет вам сохранять его динамичным. Базовая визуальная процедура, использующая цикл for each, не будет динамической. В общем, всегда лучше использовать «обычный», «графический» или «через меню/формулы» способ работы с Excel, а не использовать VBA, который не так прост, как кажется, и не может быть перенесен в другие офисные пакеты. 07.08.2012
  • Вместо ВПР(E1,$A$1:$B$5,2) можно использовать ВПР(СТРОКА(F1),$A$1:$B$5,2) и забыть о столбце E. 07.08.2012

  • 2

    Вот решение VBA. Я не совсем понимаю комментарий о том, что VBA не будет динамическим. Это так же динамично, как вы это делаете, как формула. Обратите внимание, что этот макрос удалит все данные на Листе 1 и заменит их новыми выходными данными. Если вы хотите получить желаемый результат на другом листе, измените ссылку на Sheet2 или что у вас есть.

    Option Explicit
    
    Sub MultiCopy()
    
    Dim arr As Variant
    Dim r As Range
    Dim i As Long
    Dim currRow As Long
    Dim nCopy As Long
    Dim item As String
    
    'store cell values in array
    arr = Sheet1.UsedRange
    currRow = 2
    
    'remove all values
    Sheet1.Cells.ClearContents
    Sheet1.Range("A1") = "A"
    
    For i = 2 To UBound(arr, 1)
        item = arr(i, 1)
        nCopy = arr(i, 2) - 1
        If nCopy > -1 Then
            Sheet1.Range("A" & currRow & ":A" & (currRow + nCopy)).Value = item
            currRow = currRow + nCopy + 1
        End If
    Next
    
    End Sub
    
    07.08.2012
  • Я также не согласен с комментарием @MUYBelgium о нединамичности VBA. Однако, чтобы доказать свою правоту, не должны ли вы написать функцию, а не подпрограмму? Затем функцию можно вызвать как часть формулы массива, и все будет динамически. 07.08.2012
  • @flodel Возможно, мне следовало бы, но я слишком новичок, чтобы решать проблемы, которые могут возникнуть. Этот подход VBA казался более простым. С помощью функции пользователю пришлось бы вручную выбирать диапазон того же размера, что и ожидаемый результат, или функция должна была бы возвращать значения таким образом, чтобы вы вручную заполняли формулу массива до тех пор, пока ячейки не перестанут получать значения (конец списка - Я думаю, вы могли бы указать это с помощью #VALUE или - и т. д.). Это казалось более эффективным с точки зрения конечного пользователя, и логике было проще следовать. Хотя это могло бы быть немного более общим. :) 07.08.2012
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]