Это просто, чтобы скопировать вставку строк с Excel VBA? - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть столбцы в 3 листах Excel, как это:

Sheet1
ColA   ColB
5        4
5        5
45       56
56       56

Sheet2
ColA   ColB
53      24
55      55

Sheet3
ColA   ColB
45       56
56       56
3        4

Я хочу скопировать столбцы вставки из листов 2 и 3 в лист 1, и я не уверен в номерах строк, так как они могут изменяться в зависимости отна данные.

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

Я был бы очень признателен за ваше предложение.

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

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

Sub CopyToSheet1()

  Dim Row1Max As Long
  Dim Row1Next As Long
  Dim Row23Max As Long
  Dim Values() As Variant

  ' Find bottom rows of sheets 1 and 2
  ' These statements position a virtual cursor to the bottom of column 1
  ' and then move up until they find data.  For Sheet 1 it adds one because
  ' it needs the first blank row 
  Row1Next = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
  Row23Max = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
  ' Extract data from sheet 2
  Values = Worksheets("Sheet2").Range("A1:B" & Row23Max).Value
  ' Drop into  sheet 1
  Row1Max = Row1Next + Row23Max - 1
  Worksheets("Sheet1").Range("A" & Row1Next & ":B" & Row1Max).Value = Values
  Row1Next = Row1Max + 1
  ' Find bottom row of sheet3
  Row23Max = Worksheets("Sheet3").Cells(Rows.Count, 1).End(xlUp).Row
  ' Extract data from sheet 3
  Values = Worksheets("Sheet3").Range("A1:B" & Row23Max).Value
  ' Drop into  sheet 1
  Row1Max = Row1Next + Row23Max - 1
  Worksheets("Sheet1").Range("A" & Row1Next & ":B" & Row1Max).Value = Values
  End Sub
0 голосов
/ 23 декабря 2011

Я часто использовал функцию

Function CountRows(r as Range) As Long
    CountRows = r.Worksheet.Range(r,r.End(xlDown)).Rows.Count
End Function

Затем скопировать и вставить

Sub CopyRange(r_src as Range, r_dst as Range, numrows as Long, numcols as Long)
    r_dst.Resize(numrows,numcols).Value2 = r_src.Resize(numrows,numcols).Value2
End Dub

Что вы используете, как это

Dim N as Long
Dim r_dst as Range, r_src as Range
' Pick first cell on sheet 1
Set r_dst = Sheet1.Range("A1")
' Count existing data and move to end
N = CountRows(r_dst)
Set r_dst = r_dst.Offset(N,0)
 ' Pick first cell of sheet 2 and count rows
Set r_src = Sheet2.Range("A1")
N = CountRows(r_src)
' Copy rows to sheet 1
CopyRange r_src, r_dst, N, 2
' Move to end of data on sheet 1
Set r_dst = r_dst.Offset(N,0)
' Pick first cell on sheet 2 and count rows
Set r_src = Sheet3.Range("A1")
N = CountRows(r_src)
' Copy rows to sheet 1
CopyRange r_src, r_dst, N, 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...