.csv 文件的特殊复制粘贴脚本

Special copy&paste-script for .csv files

我之前问的一个问题已经有了部分解决方案,希望可以开新问题

我有:

.csv 文件 1

00|G1|G2| 
K4|__|X_|
K5|X_|X_|

.csv 文件 2

00|G3|G7|G9|G12  
K6|X_|__|X_|__|  
K7|__|X_|X_|__|  
K8|__|__|__|X_|  

我想要的:

最终 .csv(或 .xls)文件

00|G1|G2|G3|G7|G9|G12  
K4|__|X_|__|__|__|__|  
K5|X_|X_|__|__|__|__|  
K6|__|__|X_|__|X_|__|  
K7|__|__|__|X_|X_|__|  
K8|__|__|__|__|__|X_|  

所以文件 2 的第一行 -- 应该添加到文件 1 的第一行的右边。

文件 2 左侧的第一列 -- 应添加到文件 1 第一列的下方。

然后将相应的 Xes 复制并粘贴到文件 1 Xes 的右下角。

我有很多 .csv 文件,不知道如何使用 VBA。

非常感谢您的帮助!

此致,
汤姆

试试这个,它有点复杂,但我认为这就是你想要的。我已经把它放在同一个工作簿中,但是很容易更改为通过使用 Workbooks.Open()

设置工作簿来打开文件

编辑以展示我如何处理打开的 csv。 (您可以通过多种方式完成以下所有操作)


Sub simplePaste()

Dim lastRow0 As Long
Dim lastColumn0 As Long
Dim lastColumn1

Dim ws0 As Worksheet
Dim ws1 As Worksheet

Dim wb1 As Workbook


Dim CopyRange As Range
Dim pasteRange As Range

Set ws0 = ThisWorkbook.Sheets("Sheet1")
Set wb1 = Workbooks.Open("C:\Users\james\Desktop\source.csv")
Set ws1 = wb1.Sheets(1)

lastRow0 = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lastColumn0 = ws1.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
lastColumn1 = ws0.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column

Set CopyRange = ws1.Range(ws1.Cells(1, 1), ws1.Cells(lastRow0, lastColumn0))
Set pasteRange = ws0.Cells(1, lastColumn1 + 1)

CopyRange.Copy
pasteRange.PasteSpecial

wb1.Close


End Sub

所以这段代码应该可以解决问题,它只是缺少某种功能来爬过您的目录并一个接一个地打开文件。但这似乎并不难写。

子简单粘贴()

Dim lastRow0 As Long
Dim lastColumn0 As Long
Dim lastColumn1

Dim ws0 As Worksheet
Dim ws1 As Worksheet

Dim CopyRange As Range
Dim pasteRange As Range

Set ws0 = ThisWorkbook.Sheets("Sheet1")
Set ws1 = ThisWorkbook.Sheets("Sheet2")

lastRow0 = ws0.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lastColumn0 = ws0.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column


lastRow1 = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
vlastColumn1 = ws1.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column


Set CopyRange = ws1.Range(ws1.Cells(1, 2), ws1.Cells(1, lastColumn1))
Set pasteRange = ws0.Cells(1, lastColumn0 + 1)

CopyRange.Copy
pasteRange.PasteSpecial


Set CopyRange = ws1.Range(ws1.Cells(2, 1), ws1.Cells(lastRow1, 1))
Set pasteRange = ws0.Cells(lastRow0 + 1, 1)

CopyRange.Copy
pasteRange.PasteSpecial

Set CopyRange = ws1.Range(ws1.Cells(2, 2), ws1.Cells(lastRow1 - 1, lastColumn1))
Set pasteRange = ws0.Cells(lastRow0 + 1, lastColumn0 + 1)

CopyRange.Copy
pasteRange.PasteSpecial

End Sub

它的作用:

  1. 获取每个 sheet
  2. 中的行数和列数
  3. 设置第一行的复制范围 sheet 2
  4. 将粘贴单元格设置为 sheet1(第 1 行中没有内容的第一个单元格)
  5. 粘贴

  6. 设置复制范围到sheet2

  7. 中的第一列
  8. 将粘贴单元格设置为 sheet1(第 1 列中没有内容的第一个单元格)
  9. 粘贴

  10. 将sheet2中的复制范围设置为从B2到坐标为(lastColumn|lastRow)的单元格((所有X都在那里)

  11. 在sheet1中设置粘贴单元格,这是Sheet1
  12. 中Xes块之后的单元格
  13. 粘贴
  14. 任务完成!

感谢您的帮助!

汤姆