2015-03-09 4 views
0

Я копирую данные из одной книги в другую. Я постоянно борюсь с Range и не могу понять, как мне вставлять данные, как я хочу.Выбор подходящего диапазона в Excel

  Workbook A         Workbook B 
     ID   Name       Id   Name 
     1A          3C   Sarah 
     2A          4J   Joy 
     5D          R8   Lucas 

Результат

   (Expected)        Reality 
     ID   Name       Id   Name 
     1A          1A   Sarah 
     2A          2A   Joy 
     5D          5D   Lucas 
     3C   Sarah      3C 
     4J   Joy       4J 
     R8   Lucas      R8 


    Sub CopyOttiCoverage() 

Dim x As Workbook 
Dim y As Workbook 
Dim rng As Range 
Dim LastRow As Long 
Dim NextRow As Long 

Set x = Workbooks.Open("H\A.xlsm") 
Set y = ThisWorkbook 'Workbooks.Open("H:\B.xlsx") 

x.Worksheets("Sheet1").Activate 
Range("A65536").Select 
ActiveCell.End(xlUp).Select 
LastRow = ActiveCell.Row 
Range("A2:A" & LastRow).Copy y.Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 0) 
Range("B2:B" & LastRow).Copy y.Worksheets("Sheet1").Range("b65536").End(xlUp).Offset(1, 0) 
Application.CutCopyMode = False 

Как показано выше, при копировании записей из B в A, где А имеет все пробелы в поле Имя, результат ставит имен в неправильных местах. Поэтому я думаю, что это имеет какое-то отношение к диапазону, который я вставляю. Также, если кто-то скажет мне, возможно ли вставить столбец даты перед столбцом ИД и обновить его с помощью системной даты. Заранее спасибо.

+0

Не является ли идентификатор радости 4J? Почему ожидаемый ID 1A? – Alex

+0

@Alex Да, я исправил его. – Jain

ответ

1

Изменение нижней пасты линия:

Range("B2:B" & LastRow).Copy y.Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 1) 

и поставить его выше другой линии. Так это будет выглядеть следующим образом:

Sub CopyOttiCoverage() 

Dim x As Workbook 
Dim y As Workbook 
Dim rng As Range 
Dim LastRow As Long 
Dim NextRow As Long 

Set x = Workbooks.Open("H\A.xlsm") 
Set y = ThisWorkbook 'Workbooks.Open("H:\B.xlsx") 

x.Worksheets("Sheet1").Activate 
Range("A65536").Select 
ActiveCell.End(xlUp).Select 
LastRow = ActiveCell.Row 
Range("B2:B" & LastRow).Copy y.Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 1) 
Range("A2:A" & LastRow).Copy y.Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 0) 
    Application.CutCopyMode = False 

Это, вероятно, не самый лучший способ сделать это, но он должен работать.

EDIT: Кроме того, вы можете скопировать весь спектр сразу, делая это:

Range("A2:B" & LastRow).Copy y.Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1,0) 

Затем, если вы измените «B» до «C, D, X» независимо, вы можете получить всю куча связанных столбцов.

+0

Спасибо. Просто небольшой вопрос, что мне делать, если это так для 5-го столбца, я имею в виду то же самое, что и в 5-м или каком-то другом столбце? Как изменить смещение. Спасибо ' – Jain

+0

Если вам нужно скопировать другие столбцы, вы можете изменить смещение на «offset (1, x)», где x - столбец, который вы хотите компенсировать. – OpiesDad

Смежные вопросы