Excel VBA, как получить дельта адреса ячеек, не используемых между двумя отдельными неконгруэнтными смежными ячейками - PullRequest
0 голосов
/ 07 января 2012

Я собираюсь изо всех сил пытаться найти способ описать то, что я пытаюсь выполнить ...

У меня есть матрица данных, которую я обновляю, добавляя 'n' количество строкна основе уникального ключа (даты) из другого листа.Я уже реализовал копирование ключа в матрицу.Теперь я хочу скопировать последнюю использованную строку, которая содержит формулы, в пустые строки, связанные с обновленными ключами (ключами) n.

Итак, мой вопрос: как мне использовать VBA для определенияколичество пустых строк между тем, что в последний раз использовалось и тем, что я только что вставил?

Я могу перебором, то есть IE Я могу получить адрес строки, в которую я только что скопировал данные, и отделить букву от числакоординат.Сделайте то же самое для последней использованной строки данных, которые были введены последними, вычтите числа и получите мою дельту.Тем не менее, это, похоже, действительно грубое принуждение, которое совершенно не нужно.

 Date   |  col1  |  col2  |  col3  |  col4  |  col5  |  Total  |

 2-Jan  |   0    |    1   |    1   |    0   |    0   |    2    |
 3-Jan  |   2    |    0   |    4   |    1   |    0   |    7    |
 5-Jan  |   0    |    0   |    0   |    1   |    1   |    2    |
 8-Jan  |   X
10-Jan  |
13-Jan  |   Y

Так что, глядя на матрицу выше, с 8 по 13 января - новые вставки.Я пытаюсь определить ячейки от X до Y. После того, как я это выяснил, я вставлю формулы, которые находятся в col1-total, в строки, коррелирующие с X по Y.

1 Ответ

1 голос
/ 07 января 2012

Это случай неизвестных неизвестных. Вы не знаете, чего не знаете, поэтому не можете спрашивать. Мы не знаем, что вы не знаете, так что не говорите.

Следующий код копирует последнюю полностью использованную строку в последующие частично используемые строки. Это то, что вы хотите? Это не так, я надеюсь, это поможет вам уточнить, что вы после.

Option Explicit
Sub CopyDownOverNewRows()

  Dim ColLast As Integer
  Dim RngDest As Range
  Dim RngDestAddr As String
  Dim RngSrc As Range
  Dim RngSrcAddr As String
  Dim RowLastNew As Integer
  Dim RowLastOld As Integer

  With Sheets("Sheet1")

    ' Find last used column
    ColLast = .Cells(1, .Columns.Count).End(xlToLeft).Column

    ' Find last used row in column A
    RowLastNew = .Cells(Rows.Count, "A").End(xlUp).Row

    ' Find last used row in column B
    RowLastOld = .Cells(Rows.Count, "B").End(xlUp).Row

    ' The source range is the used area of the last full row
    ' but excluding column A
    RngSrcAddr = .Range(.Cells(RowLastOld, 2), _
                        .Cells(RowLastOld, ColLast)).Address

    ' Note the destination range includes the source range
    RngDestAddr = .Range(.Cells(RowLastOld, 2), _
                         .Cells(RowLastNew, ColLast)).Address

    ' Turn addresses into ranges
    Set RngSrc = Worksheets("Sheet1").Range(RngSrcAddr)
    Set RngDest = Worksheets("Sheet1").Range(RngDestAddr)

    ' Fill the empty cells of the new rows from the last used row
    RngSrc.AutoFill Destination:=RngDest, Type:=xlFillSeries

  End With

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