Excel-在Excel中复制数据的更清晰的方法是什么?

我正在尝试进行数据的项目数量将每天更改,我将只需要运行macros将数据复制到工作簿。 我目前的工作。 我只相信这不是最有效的方法。 我希望能够在复制新数据之前清除表单。

Sub Data() Application.ScreenUpdating = False 'Disables "Screen flashing" between 2 workbooks Dim colA As Integer, colAA As Integer Dim colB As Integer, colBB As Integer Dim colC As Integer, colCC As Integer Dim colD As Integer, colDD As Integer Dim colE As Integer, colEE As Integer Dim colF As Integer, colFF As Integer Dim colG As Integer, colGG As Integer Dim colH As Integer, colHH As Integer Dim colI As Integer, colII As Integer Dim colJ As Integer, colJJ As Integer Dim colK As Integer, colKK As Integer Dim colL As Integer, colLL As Integer Dim colM As Integer, colMM As Integer Dim colN As Integer, colNN As Integer Dim colO As Integer, colOO As Integer Dim rowA As Integer, rowAA As Integer Dim rowB As Integer, rowBB As Integer Dim rowC As Integer, rowCC As Integer Dim rowD As Integer, rowDD As Integer Dim rowE As Integer, rowEE As Integer Dim rowF As Integer, rowFF As Integer Dim rowG As Integer, rowGG As Integer Dim rowH As Integer, rowHH As Integer Dim rowI As Integer, rowII As Integer Dim rowJ As Integer, rowJJ As Integer Dim rowK As Integer, rowKK As Integer Dim rowL As Integer, rowLL As Integer Dim rowM As Integer, rowMM As Integer Dim rowN As Integer, rowNN As Integer Dim rowO As Integer, rowOO As Integer Dim wbA As Workbook, wbB As Workbook Dim bws As Worksheet Set wbA = Workbooks.Open("C:\Users\Carrak\Desktop\Data\New Format\Maximo.xlsx.") Set wbB = ThisWorkbook colAA = 1 'Replace "1" with the number of the column FROM which you're copying colBB = 45 'Replace "1" with the number of the column FROM which you're copying colCC = 6 'Replace "1" with the number of the column FROM which you're copying colDD = 7 'Replace "1" with the number of the column FROM which you're copying colEE = 8 'Replace "1" with the number of the column FROM which you're copying colFF = 9 'Replace "1" with the number of the column FROM which you're copying colGG = 10 'Replace "1" with the number of the column FROM which you're copying colHH = 11 'Replace "1" with the number of the column FROM which you're copying colII = 28 'Replace "1" with the number of the column FROM which you're copying colJJ = 31 'Replace "1" with the number of the column FROM which you're copying colKK = 34 'Replace "1" with the number of the column FROM which you're copying colLL = 53 'Replace "1" with the number of the column FROM which you're copying colMM = 54 'Replace "1" with the number of the column FROM which you're copying colNN = 55 'Replace "1" with the number of the column FROM which you're copying colOO = 56 'Replace "1" with the number of the column FROM which you're copying colA = 1 'Replace "1" with the number of the column TO which you're copying colB = 3 'Replace "1" with the number of the column TO which you're copying colC = 5 'Replace "1" with the number of the column TO which you're copying colD = 6 'Replace "1" with the number of the column TO which you're copying colE = 7 'Replace "1" with the number of the column TO which you're copying colF = 8 'Replace "1" with the number of the column TO which you're copying colG = 9 'Replace "1" with the number of the column TO which you're copying colH = 10 'Replace "1" with the number of the column TO which you're copying colI = 11 'Replace "1" with the number of the column TO which you're copying colJ = 12 'Replace "1" with the number of the column TO which you're copying colK = 13 'Replace "1" with the number of the column TO which you're copying colL = 14 'Replace "1" with the number of the column TO which you're copying colM = 15 'Replace "1" with the number of the column TO which you're copying colN = 16 'Replace "1" with the number of the column TO which you're copying colO = 17 'Replace "1" with the number of the column TO which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowAA = 2 'Replace "1" with the number of the starting row of the column FROM which you're copying rowA = 2 'Replace "1" with the number of the row of the column TO which you're copying rowB = 2 'Replace "1" with the number of the row of the column TO which you're copying rowC = 2 'Replace "1" with the number of the row of the column TO which you're copying rowD = 2 'Replace "1" with the number of the row of the column TO which you're copying rowE = 2 'Replace "1" with the number of the row of the column TO which you're copying rowF = 2 'Replace "1" with the number of the row of the column TO which you're copying rowG = 2 'Replace "1" with the number of the row of the column TO which you're copying rowH = 2 'Replace "1" with the number of the row of the column TO which you're copying rowI = 2 'Replace "1" with the number of the row of the column TO which you're copying rowJ = 2 'Replace "1" with the number of the row of the column TO which you're copying rowK = 2 'Replace "1" with the number of the row of the column TO which you're copying rowL = 2 'Replace "1" with the number of the row of the column TO which you're copying rowM = 2 'Replace "1" with the number of the row of the column TO which you're copying rowN = 2 'Replace "1" with the number of the row of the column TO which you're copying rowO = 2 'Replace "1" with the number of the row of the column TO which you're copying wbA.Activate lastAA = Cells(Rows.Count, colAA).End(xlUp).Row 'This finds the last row of the data of the column FROM which you're copying For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colAA) wbB.Sheets("Data").Activate Cells(rowA, colA) = yourData rowA = rowA + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colBB) wbB.Sheets("Data").Activate Cells(rowB, colB) = yourData rowB = rowB + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colCC) wbB.Activate Cells(rowC, colC) = yourData rowC = rowC + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colDD) wbB.Activate Cells(rowD, colD) = yourData rowD = rowD + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colEE) wbB.Activate Cells(rowE, colE) = yourData rowE = rowE + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colFF) wbB.Activate Cells(rowF, colF) = yourData rowF = rowF + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colGG) wbB.Activate Cells(rowG, colG) = yourData rowG = rowG + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colHH) wbB.Activate Cells(rowH, colH) = yourData rowH = rowH + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colII) wbB.Activate Cells(rowI, colI) = yourData rowI = rowI + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colJJ) wbB.Activate Cells(rowJ, colJ) = yourData rowJ = rowJ + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colKK) wbB.Activate Cells(rowK, colK) = yourData rowK = rowK + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colLL) wbB.Activate Cells(rowL, colL) = yourData rowL = rowL + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colMM) wbB.Activate Cells(rowM, colM) = yourData rowM = rowM + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colNN) wbB.Activate Cells(rowN, colN) = yourData rowN = rowN + 1 'Increments the current line of destination workbook Next x 'Skips to next row For x = rowAA To lastAA 'Loops through all the rows of A wbA.Activate yourData = Cells(x, colOO) wbB.Activate Cells(rowO, colO) = yourData rowO = rowO + 1 'Increments the current line of destination workbook Next x 'Skips to next row Application.ScreenUpdating = True 'Re-enables Screen Updating End Sub 

这里有很多可以改进的地方:

  1. 指定你的WorkSheet的,而不是依赖于隐式的ActiveSheet
  2. 使用对象引用而不是激活书籍/表单
  3. 使用一个更紧凑,更容易迭代的数据结构,例如一个数组
  4. 将重复的代码(复制)分成单独的例程
  5. 复制每个整个范围,而不是循环

像这样的东西:

 Sub Demo() ' Declare all your variables Dim wbA As Workbook, wbB As Workbook Dim wsA As Worksheet, wsB As Worksheet Dim Data() As Variant Dim i As Long ' Specify Source and Destination, Workbook and WorkSheet Set wbA = Workbooks.Open("C:\Users\Carrak\Desktop\Data\New Format\Maximo.xlsx.") Set wsA = wbA.Worksheets("SpecifySheetName") Set wbB = ThisWorkbook Set wsB = wbA.Worksheets("SpecifySheetName") ' Set up source and destination data ' RowFrom , ColFrom, RowTo, ColTo Data = Array( _ Array(2, 1, 2, 1), _ Array(2, 45, 2, 3), _ Array(2, 6, 2, 5), _ Array(2, 7, 2, 6), _ Array(2, 8, 2, 7), _ Array(2, 9, 2, 8), _ Array(2, 10, 2, 9), _ Array(2, 11, 2, 10), _ Array(2, 28, 2, 11), _ Array(2, 31, 2, 12), _ Array(2, 34, 2, 13), _ Array(2, 53, 2, 14), _ Array(2, 54, 2, 15), _ Array(2, 55, 2, 16), _ Array(2, 56, 2, 17)) ' Clear Destination sheet wsB.Cells.Clear ' Copy Data For i = LBound(Data, 1) To UBound(Data, 1) CopyData wsA, Data(i)(0), Data(i)(1), wsB, Data(i)(2), Data(i)(3) Next End Sub Sub CopyData(wsSource As Worksheet, rwSource As Variant, clSource As Variant, _ wsDest As Worksheet, rwDest As Variant, clDest As Variant) Dim rng As Range With wsSource Set rng = .Range(.Cells(rwSource, clSource), .Cells(.Rows.Count, clSource).End(xlUp)) End With With wsDest .Cells(rwDest, clDest).Resize(rng.Rows.Count, rng.Columns.Count).Value = _ rng.Value End With End Sub 

清除表单:

 Sheets("sheet1").Select Selection.AutoFilter Sheets("sheet1").Cells.Clear 

如果复制工作表的文件名始终相同,则可以尝试:logging复制macros并粘贴所有数据,复制所有数据或整个工作表,然后进入并操作代码,使其从活动表格格式指定像你这样的path已经在你编码了。

可能录制macros并右键单击工作表选项卡并select复制或移动。

我认为使用这些任务的数据连接更简单。 这样你可以通过Data-> Connections-> Refresh刷新数据。

更多信息: https : //www.google.pl/search?sourceid=chrome-psyapi2&ion=1&espv=&ie=UTF-8&q=data%20connection%20to%20excel%20workbook

或者:我还创build了一个简单的加载项,用于在Excel数据上运行SQL查询(运行查询一次将创build数据连接)。

  1. 你可以在这里查找加载项: http : //blog.tkacprow.pl/?p=91
  2. 假设你有一个名为Source.xlsx的工作簿,在名为“Sheet1”的工作表中有数据(两个数据列“A”和“B”),并且你想把数据复制到当前工作簿。 SQL将是:

     SELECT `Sheet1$`.A, `Sheet1$`.B FROM `C:\Users\USERNAME\Desktop\Source.xlsx`.`Sheet1$` `Sheet1$` 

这将从Source.xlsx工作簿的工作表“Sheet1”的名为“A”和列“B”的列中的所有数据复制到表单的第一个参数中指定的数据范围。 3.要刷新数据,只需进入数据 – >连接,find连接并点击刷新

给这个镜头:

 Sub Test() ' Declare all your variables Dim wbA As Workbook, wbB As Workbook Application.ScreenUpdating = False ' Specify Source and Destination, Workbook and WorkSheet Set wbA = Workbooks.Open("C:\Users\Carrak\Desktop\Data\New Format\Maximo.xlsx.") Set wbB = ThisWorkbook wbB.Sheets("Data").Select Selection.AutoFilter wbB.Sheets("Data").Cells.Clear wbA.sheets("sheet1").range("A1:Z500").copy 'change sheet1 as needed A1:Z500 to your range wbB.sheets("Data").range("A1").pastespecial 'change sheet1 as needed wbB.Save wbA.Close wbB.Activate Application.ScreenUpdating = True 'Re-enables Screen Updating End sub () 

或者由于数据量在白天是dynamic的。

 wbA.sheets("sheet1").cells.copy 

代替

 wbA.sheets("sheet1").range("A1:Z500").copy