Возврат содержимого ячеек из диапазона - PullRequest
0 голосов
/ 29 марта 2020

Вчера я узнал здесь, как скопировать строку на второй лист.

Sub maJolieProcedure(Texte As String)
    With Worksheets("employes").Range("A:A")
        Set c = .Find(what:=Texte)
        If Not c Is Nothing Then
            firstAddress = c.Row
            Worksheets("employes").Rows(firstAddress).Copy _
    Destination:=Worksheets("rapport").Range("A1")
            MsgBox "Ok"
        Else
            MsgBox "Nok"
        End If
    End With
End Sub

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

Я могу определить номер строки. Однако я не могу понять, как объект Range может возвращать каждую ячейку одну за другой. Например, содержимое C3, если Rows = 3.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

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

Более эффективно делать специальные вставки, как вы делаете с мышь:

Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues

очень хорошо работает и с большими диапазонами, если вам нужно:

Range("A1:A12").Copy
Range("B1:B12").PasteSpecial Paste:=xlPasteValues

или даже

Range("A1:A12").Copy
Range("D3").PasteSpecial Paste:=xlPasteValues

Если ваша цель - действительно получить доступ ко всем ячейка диапазона индивидуально, вы просто итерируете диапазон. Например:

For Each cell In Range("A1:A12")
    cell.Value = cell.Value + 2
Next cell
0 голосов
/ 29 марта 2020

Если вы не хотите вставлять форматирование только из одного диапазона в другой, вставьте только значения.

Worksheets("employes").Rows(firstAddress).Copy
Worksheets("rapport").Range("A1").PasteSpecial xlValues

То же самое для всех диапазонов, будь то 1 ячейка или миллион. Процесс копирования копирует объект в память как один блок. Любой синтаксический анализ должен быть выполнен до инструкции копирования. Альтернативой является чтение диапазона в массив.

Dim Arr As Variant
Arr = Worksheets("employes").Rows(firstAddress).Value

Это создаст трехмерный массив из 1 строки и около 16000 столбцов. Вы можете решить ограничить свой энтузиазм только тем, что вам нужно.

With Worksheets("employees")
    Arr = .Range(.Cells(firstAddress, 1), .Cells(firstAddress, .Columns.Count).End)xlToLeft)).Value
End With

Обратите внимание на ведущие периоды в утверждении «С». Каждый такой период обозначает объект, указанный в операторе «С».

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