Исключение некоторых столбцов при копировании одной строки в другую.

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

В настоящее время я использую следующий код для копирования данных из предыдущей строки.

rngCurrent.Offset(-1).Copy rngCurrent.PasteSpecial (xlPasteValues) 

но я хочу пропустить некоторые столбцы. Итак, допустим, если есть 20 столбцов, я хочу скопировать все столбцы, кроме столбцов 4 и 14. Как это можно сделать в VBA?

Пример:

Предположим следующее: данные в строке.

 Row to be copied........> 1 2 3 4 5 6 7 8 .... 14 15 16 Target Row Before Copy..> ABCDEFGH .... NOP Target Row After Copy...> 1 2 3 D 5 6 7 8 .... N 15 16 

Таким образом, все копируется, за исключением столбцов 4 и 14. Обратите внимание, что исходные значения D и N в столбцах 4 и 14 строки Цели сохраняются.

Сэм

Я точно не знаю, как вы хотите использовать макрос (т. Е. Вы выбираете диапазон в листе или одну ячейку?), Но следующий код может начать:

EDIT – код обновлен, чтобы отразить ваши комментарии. Я добавил функцию, чтобы проверить, находятся ли столбцы, которые вы хотите сохранить, в массиве.

 Sub SelectiveCopy() 'Set range based on selected range in worksheet Dim rngCurrent As Range Set rngCurrent = Selection 'Define the columns you don't want to copy - here, columns 4 and 14 Dim RemoveColsIndex As Variant RemoveColsIndex = Array(4, 14) 'Loop through copied range and check if column is in array Dim iArray As Long Dim iCell As Long For iCell = 1 To rngCurrent.Cells.Count If Not IsInArray(RemoveColsIndex, iCell) Then rngCurrent.Cells(iCell).Value = rngCurrent.Cells(iCell).Offset(-1, 0) End If Next iCell End Sub Function IsInArray(MyArr As Variant, valueToCheck As Long) As Boolean Dim iArray As Long For iArray = LBound(MyArr) To UBound(MyArr) If valueToCheck = MyArr(iArray) Then IsInArray = True Exit Function End If Next iArray InArray = False End Function 

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

 Set rngCurrent = Selection.EntireRow 

Надеюсь это поможет

Другой способ сделать это ….. меньше. петель.

Предположения
1. Пропустить столбцы в порядке возрастания.
2. Пропустить значение столбца начинается с 1, а не 0.
3. Диапазон («Источник») – это первая ячейка в исходных данных.
4. Диапазон («Цель») – это первая ячейка целевых данных.

 Sub SelectiveCopy(rngSource As Range, rngTarget As Range, intTotalColumns As Integer, skipColumnsArray As Variant) If UBound(skipColumnsArray) = -1 Then rngSource.Resize(1, intTotalColumns).Copy rngTarget.PasteSpecial (xlPasteValues) Else Dim skipColumn As Variant Dim currentColumn As Integer currentColumn = 0 For Each skipColumn In skipColumnsArray If skipColumn - currentColumn > 1 Then 'Number of colums to copy is Nonzero.' rngSource.Offset(0, currentColumn).Resize(1, skipColumn - currentColumn - 1).Copy rngTarget.Offset(0, currentColumn).PasteSpecial (xlPasteValues) End If currentColumn = skipColumn Next If intTotalColumns - currentColumn > 0 Then rngSource.Offset(0, currentColumn).Resize(1, intTotalColumns - currentColumn).Copy rngTarget.Offset(0, currentColumn).PasteSpecial (xlPasteValues) End If End If Application.CutCopyMode = False End Sub 

Как позвонить:

 SelectiveCopy Range("Source"), Range("Target"), 20, Array(1) 'Skip 1st column' SelectiveCopy Range("Source"), Range("Target"), 20, Array(4,5,6) 'Skip 4,5,6th column' SelectiveCopy Range("Source"), Range("Target"), 20, Array() 'Dont skip any column. Copy all. 

Благодарю.

Попробуйте использовать два диапазона:

 Union(Range("Range1"), Range("Range2")) 
Interesting Posts

vba solver – добавление задержки к итерациям

Вставка страницы SUM на конце страницы Excel через XSLT

Запись в Excel: невозможно получить доступ к закрытому потоку с помощью EPPLUS

Delphi cxGrid rowcount

Любые подсказки к тому, чтобы сделать excel dsum быстрее?

Как извлечь путь в текстовом файле и использовать его в VBA?

Извлечение чисел, погребенных в excel, количеством цифр

Как решить эту «ошибку времени выполнения» -2147023706 (800704a6) »?

Python Openpyxl выбрать ячейку, чтобы начать печать numpy-массива

Макросъемка для вставки изображения в ячейку создает ссылку, которая приводит к ошибке «Связанное изображение не может быть отображено»

Как заставить ADO.Net использовать только System.String DataType в чтениях TableSchema

Так что я действительно не могу использовать Excel Object Model для использования на стороне сервера?

Как добавить макрос к кнопке в Access для экспорта в excel?

Использование .NET-объектов в Excel

Как использовать Office из Visual Studio C #?

Давайте будем гением компьютера.