VBA: вставить видимые ячейки (отфильтрованные) в те же строки, но в другой столбец - PullRequest
0 голосов
/ 04 апреля 2019

Мне было интересно, как вставить отфильтрованные данные в те же соответствующие строки, но в другой столбец.

У меня есть отфильтрованная таблица в Excel, например:

#Row    |      A      |     B
 1      |      foo    |  
 5      |      bar    | 
 8      |      fish   | 

Теперь я хочу вставить значения из столбца A в B, сохраняя положение строки.

#Row    |     A       |     B
 1      |     foo     |     foo
 2      |             |
 3      |             | 
 4      |             |
 5      |     bar     |     bar 
 ...    |             |
 ...    |             |
 8      |    fish     |     fish

обычный метод вставки вставляет значения как последовательный блок.

last = db_ws.Rows(Rows.Count).End(xlUp).Row
db_ws.Range("A11:BC" & last).SpecialCells(xlCellTypeVisible).Copy
tgt_ws.Range("A11").PasteSpecial

Любая помощь приветствуется.

Ответы [ 2 ]

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

Для завершения темы здесь вы идете с решением для массива.

count = -1 ' array has to start with 0

On Error GoTo errHndlr:
For Each cl In rng.SpecialCells(xlCellTypeVisible)
    count = count + 1
    ReDim Preserve arr(count)
    arr(count) = cl.Row
    Debug.Print cl.Row
Next cl
errHndlr:

For Each Item In arr
    db_ws.Cells(Int(Item), 55) = db_ws.Cells(Int(Item), 1).Value
Next Item
1 голос
/ 04 апреля 2019

Фрагмент кода:

Dim i as Long
last = db_ws.Rows(Rows.Count).End(xlUp).Row

For i = 11 to last
If db_ws.Range("A"& i).EntireRowHidden=False Then
    tgt_ws.Range("A"& i).Value = db_ws.Range("A" & i).Value
    tgt_ws.Range("B" & i).Value = db_ws.Range("A" & i).Value
End If
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...