VBA Script для копирования и вставки последнего столбца данных на нескольких листах в книгу - PullRequest
1 голос
/ 11 апреля 2019

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

Sub CopyPaste()

Dim sArray
Dim lc As Long

Set sArray = Sheets(Array("sht3", "sht5", "sht7", "sht9", "sht11", "sht13", "sht15", "sht17" _
, "sht19", "sht21", "sht23", "sht25", "sht27", "sht29"))

For Each Sheet In sArray

lc = Cells(1, Columns.Count).End(xlToLeft).Column
Columns(lc).Copy
Cells(1, lc + 1).PasteSpecial Paste:=xlPasteAll

Next

End Sub

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Если я понял ваш вопрос, это должно решить его:

Option Explicit
Sub CopyPaste()

    Dim ws As Worksheet
    Dim lc As Integer
    Dim sArray As Variant

    Set sArray = Sheets(Array("sht3", "sht5", "sht7", "sht9", "sht11", "sht13", "sht15", "sht17" _
                        , "sht19", "sht21", "sht23", "sht25", "sht27", "sht29"))

    For Each ws In sArray
        With ws
            lc = .Cells(1, .Columns.Count).End(xlToLeft).Column
            .Cells(1, lc).EntireColumn.Copy .Cells(1, lc + 1)
        End With
    Next ws

End Sub
0 голосов
/ 11 апреля 2019

Ниже я приведу две альтернативы для просмотра отдельных листов, чтобы вы могли начать:

Dim sht As Worksheet
For Each sht In ThisWorkbook.Worksheets
    If sht.Name = "Something" Or sht.Name = "Something else" Then 'and so on and so forth...
        'do something
    End If
Next sht

или

Dim shtCollection As New Collection
Dim sht As Worksheet
With shtCollection
    .Add ThisWorkbook.Worksheets("Something")
    .Add ThisWorkbook.Worksheets("Something else")
    'and so on and so forth...
End With
For Each sht In shtCollection
    'do something
Next sht
0 голосов
/ 11 апреля 2019

Вам просто нужно добавить ссылки на листы внутри цикла, чтобы ссылаться на правильный лист.(В противном случае на активный лист будет ссылаться, и это не изменится в вашем коде.)

Sub CopyPaste()

Dim sArray
Dim lc As Long

Set sArray = Sheets(Array("sht3", "sht5", "sht7", "sht9", "sht11", "sht13", "sht15", "sht17" _
                    , "sht19", "sht21", "sht23", "sht25", "sht27", "sht29"))

For Each Sheet In sArray
    lc = Sheet.Cells(1, Columns.Count).End(xlToLeft).Column
    Sheet.Columns(lc).Copy
    Sheet.Cells(1, lc + 1).PasteSpecial Paste:=xlPasteAll
Next

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