Вставить на видимые ячейки в Excel - PullRequest
0 голосов
/ 12 июня 2018

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

1

Cells A1-A3 contain 1,2,3. Cells C3-C5 contain A,B,C

enter image description here

We hide row 2, so that the '2' is no longer visible.

enter image description here

A normal paste will result in the 'B' overwriting the hidden '2'.

enter image description here

This is what the solution would look like, meaning the '2' is unaffected.

В настоящее время мне известна функция Alt+;, которая выбирает только видимые ячейки,однако, пытаясь вставить сюда, Excel жалуется на область вставки.

Может кто-нибудь придумать решение с базовыми функциями Excel, формулами или VBA для достижения этой цели?

1 Ответ

0 голосов
/ 12 июня 2018

Вот один из способов, используя VBA

Он использует массивы, поэтому не копирует форматирование ячеек


Option Explicit

Public Sub CopyVisiblesOnlyAndPasteOverVisiblesOnly()
    Const FROM_COL = 3
    Const TO_COL = 1
    Dim arr As Variant, vis As Variant, ub As Long, i As Long, j As Long, itm As Variant

    With ThisWorkbook.Worksheets("Sheet1")
        arr = .UsedRange.Columns(FROM_COL)
        ub = UBound(arr)
        ReDim vis(1 To ub)
        j = 1
        For i = 1 To ub     'Copy visible cells in column 3
            If Not IsError(arr(i, 1)) Then  'skip errors, empty, and hidden rows to copy
                If Len(arr(i, 1)) > 0 And .Rows(i).Hidden = False Then
                    vis(j) = arr(i, 1)
                    j = j + 1
                End If
            End If
        Next
        ub = j - 1
        ReDim Preserve vis(1 To ub)

        If ub > 0 Then
            j = 1
            For i = 1 To ub
                While .Rows(j).Hidden = True    'skip hidden rows to paste over
                    j = j + 1
                Wend
                .Cells(j, TO_COL) = vis(i)
                j = j + 1
            Next
        End If
    End With
End Sub

Тестовый лист - все строки видимы

TestSheetAllRows

Контрольный лист - только видимые строки

TestSheetVisibleRows

.

Результат - только видимые строки

ResultSheetVisibleRows

Результат - все строки

ResultSheetAllRows

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