Как дублировать строку на основе значения столбца или ячейки

Я пытаюсь дублировать строки в Excel с помощью VBA и объединять столбцы в один.

Приведенный ниже код VBA скрывает некоторые столбцы. Мне нужна помощь в редактировании кода, чтобы отобразить все столбцы (скопируйте столбцы с A по Q).

Вот как выглядят исходные данные

Вот как я бы хотел закончить до

Вот как я могу использовать код, указанный ниже ( проблема : не отображается или копируется столбец B в столбец P)

Я хотел бы показать все столбцы между A и Q. Код ниже скрывает все столбцы, кроме первого и объединенного (столбец A и объединенный столбец в столбце B).

  Sub SortMacro () Dim SourceSheet As Worksheet Dim OutSheet As Worksheet Установить SourceSheet = ActiveSheet Set OutSheet = Sheets.Add With SourceSheet Out_i = 1 Для r = 1 В .Cells (Rows.Count, 1)  .End (xlUp) .Row Для i = 17–20 'или Для каждого i в массиве (17,18,20) OutSheet.Cells (Out_i, 1) = .Cells (r, 1) OutSheet.Cells (Out_i, 2  ) = .Cells (r, i) Out_i = Out_i + 1 NextEnd WithEnd Sub  

Спасибо!


Это мой интерпретация того, что ты тебе нужно. Я добавил цикл для копирования столбцов A: P в каждую новую строку

  Sub SortMacro () Dim SourceSheet As WorksheetDim OutSheet As WorksheetSet SourceSheet = ActiveSheetSet OutSheet = Sheets.AddWith SourceSheet  Out_i = 1 For r = 1 To .Cells (Rows.Count, 1) .End (xlUp) .Row 'Создать новую строку для каждой записи столбца в Q: T Для i = 17 To 20' Проверить, что ячейка не  пусто перед созданием новой строки If (.Cells (r, i) .Value  "") Then 'Копировать столбцы A: P Для j = 1 в 16 OutSheet.Cells (Out_i, j) = .Cells (r, j  ) Next j 'Копировать текущий столбец из Q: T OutSheet.Cells (Out_i, 17) = .Cells (r, i) Out_i = Out_i + 1 End If Next i Next rEnd WithEnd Sub  


Как автоматически делать копии строк в Excel?

У меня есть файл excel, который выглядит так:
row1_cell1 row1_cell2 row1_cell3
row2_cell1 row2_cell2 row2_cell3
row3_cell1 row3_cell2 row3_cell3

Как я могу сделать три (или любое количество) копий каждой строки, которая у меня есть в лист, который я буду хотите, чтобы их добавляли после копирования строки? Итак, в конце я хотел бы получить такой результат:
row1_cell1 row1_cell2 row1_cell3
row1_cell1 row1_cell2 row1_cell3
row1_cell1 row1_cell2 row1_cell3
row2_cell1 row2_cell2 # row2_cell3 br> row2_cell1 row2_cell2 row2_cell3
row2_cell1 row2_cell2 row2_cell3
row3_cell1 row3_cell2 row3_cell3
row3_cell1 row3_cell2 row3_cell3
row3_cell1 row3_cell2
row3_cell1 row3_cellp> hr>

Вот как я бы сделал это для всех строк на листе:

   Опция ExplicitSub MultiplyRows () Dim RwsCnt As Long, LR As Long, InsRw As LongRwsCnt = Application. InputBox («Сколько копий каждой строки следует вставить?», «Вставить счетчик», 2, Тип: = 1) Если RwsCnt = 0, то выйти из SubLR = Range («A» & Rows.Count) .End (xlUp)  .RowApplication.ScreenUpdating = FalseFor InsRw = LR To 1 Step -1 Rows (InsRw) .Copy Rows (InsRw + 1) .Resize (RwsCnt) .Insert xlShiftDownNext InsRwApplication.ScreenUpdating = TrueEnd Sub    div> 


Нет прямого способа вставить их с чередованием, как вы хотели. Однако вы можете создать временный VBA, чтобы делать то, что вы хотите.

Например, вы можете: —

  1. Создать процедуру VBA (например, приведенный ниже) в файле Excel.
  2. Назначьте ему сочетание клавиш (например, Ctrl + Q).
    • Для этого нажмите Alt + F8 , затем выберите макрос, затем нажмите «Параметры».
  3. Выберите ячейки, которые хотите скопировать, затем нажмите Ctrl + C.
  4. Выберите ячейку, которую хотите вставить, затем нажмите Ctrl + Q (или любое другое сочетание клавиш, которое вы выбрали).
  5. Введите количество раз, которое вы хотите скопировать. (В вашем примере это будет 3.)
  6. WHAMMO! : D
  7. Теперь вы можете удалить процедуру VBA. 🙂

Код VBA:

  Sub PasteAsInterleave () Dim startCell As Range Dim endCell As Range Dim firstRow As Range Dim pasteCount  As Long Dim rowCount As Long Dim colCount As Long Dim i As Long Dim j As Long Dim inputValue As String If Application.CutCopyMode = False Then Exit Sub 'Получить количество раз для копирования.  inputValue = InputBox ("Введите количество раз, чтобы вставить чередование:", _ "Вставить чередование", "") Если inputValue = "" Затем Exit Sub 'отменен пользователем. При ошибке GoTo Error pasteCount = CInt (inputValue) Если pasteCount  


Старый тред, однако кому-то это может пригодиться: информация ниже была скопирована отсюда

Мне нужно было сделать почти противоположное. Мне нужно, чтобы формула увеличивалась на 1 каждые 22 строки, оставляя 21 строку между пустыми. Я использовал модификацию приведенной выше формулы, и она отлично сработала. Вот что я использовал:

  = ЕСЛИ ОШИБКА (КОСВЕННАЯ ("J" & ((СТРОКА () - 1) * 1/22) +1), "")  

Информация была в столбце «J».

Часть «ЕСЛИОШИБКА» обрабатывает ошибку, полученную, когда результат вычисления строки не является целым числом, и помещает пробел в этой ячейке.

Надеюсь, кому-то это пригодится. Некоторое время я искал это решение, но сегодня оно мне действительно понадобилось. Спасибо.

Оцените статью
clickpad.ru
Добавить комментарий