0

これをvbscript(vbaではなく)で達成する必要があります。これを行う方法の例が見つかりません。必要な Excel ファイルに対するすべての主要な処理を行う vbs がありますが、最後に必要なのは、2 つの別々の .xlsx ファイルにある両方のワークシートを単一のワークシートに新しいワークブックにマージすることだけです。

vbaを使用して2つのファイルを別々のシートで単一のwbにマージする例を見つけましたが、同じシートとvbscriptを介してそれらが必要です。基本的には 2 枚のシートを合わせたようなものです。どちらにも、同じタイプのデータを持つ同じ数の列 (6 列) が含まれています。基本的に、スプレッドシートのいずれかからヘッダーをコピーして新しいワークブック/ワークシートに貼り付け、それぞれのすべてのデータをヘッダーの下の新しいワークブック/シートにコピーする必要があります。これが理にかなっていることを願っています。どんな助けでも大歓迎です。

これは、2 つのデータ シートを「マージ」と呼ばれる同じ新しいワークブックにもたらしますが、シートを 1 つにマージする必要があります。

    Set objExcel = WScript.CreateObject ("Excel.Application")

objExcel.Visible = false

strFileName = "c:\excel\merged.xlsx"

 Set objWbA = objExcel.WorkBooks.open("c:\excel\wb1.xlsx")
 Set objWbB = objExcel.WorkBooks.open("c:\excel\wb2.xlsx")

Set objWorkbook = objExcel.Workbooks.Add()

 objwba.worksheets(1).copy _
 objWorkbook.worksheets(1)
 objwbb.worksheets(1).copy _
 objWorkbook.worksheets(2)

objWorkbook.SaveAs(strFileName)
objWorkbook.close

objWbA.Close True
objWbB.Close True

objExcel.Quit
Set objExcel = Nothing

==========================

これが私が思いついた解決策です(CSV出力を使用しました):

Option Explicit
Dim objExcel
Dim strFilename
Dim objWbA
Dim objWbB
Dim Lastrow
Dim Lastrow1
Dim objWorkbook
Dim objSheeta
Dim objSheetb

Set objExcel = WScript.CreateObject ("Excel.Application")

objExcel.Visible = false
objExcel.displayalerts = false

strFileName = "c:\excel\merged.csv"

 Set objWbA = objExcel.WorkBooks.open("c:\excel\wb1.xlsx")

 Set objSheeta = objWbA.Sheets("wb1")

 Set objWbB = objExcel.WorkBooks.open("c:\excel\wb2.xlsx")

 Set objSheetb = objWbB.Sheets("wb2")

Set objWorkbook = objExcel.Workbooks.Add()

Const xlUp = -4162
Const xlPasteValues = -4163
Const xlPasteFormats = -4122
Const xlPasteValuesAndNumberFormats = 12

with objSheeta
Lastrow = .Cells(objSheeta.Rows.Count, 1).End(xlUp).Row
      .Range("B1:F" & Lastrow).Copy
end with

objWorkbook.Worksheets("Sheet1").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats

with objSheetb
Lastrow1 = .Cells(objSheetb.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
      .Range("B2:F" & Lastrow1).Copy
end with

objWorkbook.Worksheets("Sheet1").Range("A" & Lastrow1).PasteSpecial xlPasteValuesAndNumberFormats

'===================================

objExcel.CutCopyMode = False
objExcel.ScreenUpdating = True

objWorkbook.SaveAs(strFileName), 6
objWorkbook.close True

objWbA.Close True
objWbB.Close True

objExcel.Quit
Set objExcel = Nothing
4

1 に答える 1

1

Worksheet.Copy メソッドを実行してコピー先を指定しなかった場合、ワークシートはActiveWorkbook プロパティを保持する新しいブックにコピーされます。これは、新しいワークブックを開始するための最良の方法です。

Set objExcel = WScript.CreateObject ("Excel.Application")

objExcel.Visible = False    'True for testing

strFileName = "c:\tmp\merged"   '<~~ no file extension, FileType:=51 (xlOpenXMLWorkbook) will do that

 Set objWbA = objExcel.WorkBooks.open("c:\tmp\wb1.xlsx")
 Set objWbB = objExcel.WorkBooks.open("c:\tmp\wb2.xlsx")
 rws = objWbA.Worksheets(1).Rows.Count   '<~~ 65536 or 1048576 (need this below)

 objWbA.Worksheets(1).Copy   '<~~ copy to a new workbook with one worksheet
 objWbB.Worksheets(1).Cells(1, 1).CurrentRegion.Copy _
    objExcel.ActiveWorkbook.Worksheets(1).Cells(rws, 1).End(-4162).Offset(1,0)   '-4162 is xlUp

objExcel.ActiveWorkbook.SaveAs strFileName, 51  '<~~ 51 is FileType:=xlOpenXMLWorkbook
objExcel.ActiveWorkbook.Close False   '<~~ saved on the line immediately above

objWbA.Close False   'don't save if we didn't change anything
objWbB.Close False   'don't save if we didn't change anything

objExcel.Quit
Set objExcel = Nothing

FileTypeXlFileFormat 列挙から正しい値を指定すると、 Workbook.SaveAs メソッドは正しいファイル拡張子を指定します。元のファイルは変更を受けていないため、保存する必要はありません。

于 2016-01-16T20:11:37.727 に答える