首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel比较两张工作表中的数据

问Excel比较两张工作表中的数据
EN

Stack Overflow用户
提问于 2016-06-09 02:50:53
回答 2查看 1.3K关注 0票数 2

我有两张价格表需要比较。有4列。部件号、说明、折扣百分比和价格。

我需要比较旧的工作表和新的,以找到任何定价和百分比更新。

由于零件代号列表可以添加或从一个板材删除到另一个板材,因此不能逐行比较,需要这样做。

请看第一张表中的第一个零件编号。(旧价目表)

在表2中找到相同的部件号。(新增价目表)

比较百分比和价格,如果不同,则在表2中突出显示。

EN

回答 2

Stack Overflow用户

发布于 2018-03-09 16:10:53

将两个表导出为CSV格式的

使用文件比较工具比较文本差异

我的方法(我经常使用)是将两张图纸导出为CSV格式,然后比较两个文本文件。因此,我写了这两个文件:

Xls2Csv.vbs

代码语言:javascript
复制
'Script for conversion of XLS-/XLSX-Files to CSV-Format
'Michael Hutter / April 2016

if WScript.Arguments.Count < 1 Then
    WScript.Echo "There has to be at least one parameter!" & vbCrLf & _
                 "Syntax:" & vbCrLf & _
                 "  Xls2Csv.vbs SourceFile.xls DestFile.xls\n" & vbCrLf & _
                 "  Xls2Csv.vbs SourceFile.xls (a file called SourceDate.xls.csv will be written)"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
if WScript.Arguments.Count = 1 then
  dest_file = src_file & ".csv"
else
  dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
end if

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit

Xls2Csv.bat:(您可能不需要它) ;-)

代码语言:javascript
复制
start %cd%\Xls2Csv.vbs %1 %2 %3

如果您已经安装了Git,您还可以使用以下批处理文件通过Excel内部比较功能或自动CSV导出(使用上面的两个文件)来比较两个xls文件。

DiffScript_xls.bat

代码语言:javascript
复制
@echo off
if X%1==X goto Syntax
goto SyntaxOk

:Syntax
echo This script either compares two xls-/xlsx-files with the Excel-internal compare function
echo or by exporting the sheet content to CSV format and comparing the text files.
echo Written by Michael Hutter in April 2016
echo.
echo Syntax:
echo %0 File1.xls File2.xls
pause
goto Ende

:SyntaxOk
set Datei=%0
set Rcksprung=Pos0
goto TeileDateipfadAuf
:Pos0
rem Pfad ermitteln, in dem die Batch-Datei liegt...
set WorkPfad=%LAUFWERK%%PFAD%
rem Leider liegt die Batch-Datei nicht am Urpsrungsort, da durch die Compilierung zur EXE während der Laufzeit ein Entpacken in einen anderen Ordner erfolgt :-(
set WorkPfad=C:\Tools\Batch\Diff-Scripts\

set base=%1
set mine=%2
echo Compared are the following files:
echo   Base-File=%base%
echo   Mine-File=%mine%
echo.
echo Do you want to compare by [E]xcel or by [C]sv-Format?
C:\Windows\System32\choice /C ec /T 2 /D c
if errorlevel 2 goto CsvVergleich
if errorlevel 1 goto ExcelVergleich

:ExcelVergleich
echo Comparing by Excel...
rem Datei1 vorbereiten
set Datei=%base%
set Rcksprung=PosExcel1
goto TeileDateipfadAuf
:PosExcel1
echo Bei PosExcel1
echo ###
echo LAUFWERK=%LAUFWERK%
echo PFAD=%PFAD%
echo DATEI=%DATEI%
echo ERWEITERUNG=%ERWEITERUNG%
echo ###
ren "%LAUFWERK%%PFAD%%DATEI%%ERWEITERUNG%" "%DATEI%(base)%ERWEITERUNG%"
wscript.exe "C:\Program Files\TortoiseGit\Diff-Scripts\diff-xls.js" "%LAUFWERK%%PFAD%%DATEI%(base)%ERWEITERUNG%" %mine% //E:javascript
goto Ende

:CsvVergleich
echo Comparing by CSV...

set Datei=%1
set Rcksprung=Pos1
goto TeileDateipfadAuf
:Pos1
echo Bei Pos1
echo ###
echo LAUFWERK=%LAUFWERK%
echo PFAD=%PFAD%
echo DATEI=%DATEI%
echo ERWEITERUNG=%ERWEITERUNG%
echo ###

set Datei1=%DATEI%%ERWEITERUNG%
if not exist %TEMP%\CSV1\NUL md %TEMP%\CSV1
if exist "%TEMP%\CSV1\%Datei1%.csv" del "%TEMP%\CSV1\%Datei1%.csv"
if exist "%TEMP%\CSV1\%Datei1%.csv" echo Can't delete File1: "%TEMP%\CSV1\%Datei1%.csv"
copy "%LAUFWERK%%PFAD%%DATEI%%ERWEITERUNG%" "%TEMP%\CSV1"
echo Converting File1 to CSV-Format: "%TEMP%\CSV1\%Datei1%"
%WorkPfad%Xls2Csv.vbs "%TEMP%\CSV1\%Datei1%"

rem Prepare File2
set Datei=%mine%
echo Datei=%Datei%
set Rcksprung=Pos2
goto TeileDateipfadAuf
:Pos2
echo Bei Pos2
echo ####
echo LAUFWERK=%LAUFWERK%
echo PFAD=%PFAD%
echo DATEI=%DATEI%
echo ERWEITERUNG=%ERWEITERUNG%
echo ####
set Datei2=%DATEI%%ERWEITERUNG%
if not exist %TEMP%\CSV2\NUL md %TEMP%\CSV2
if exist "%TEMP%\CSV2\%Datei1%.csv" del "%TEMP%\CSV2\%Datei1%.csv"
if exist "%TEMP%\CSV2\%Datei1%.csv" echo Can't delete file: "%TEMP%\CSV2\%Datei1%.csv"
copy %mine% "%TEMP%\CSV2"
echo Converting File2 to CSV-Format: "%TEMP%\CSV2\%Datei2%"
%WorkPfad%Xls2Csv.vbs "%TEMP%\CSV2\%Datei2%"

"C:\Program Files\TortoiseGit\bin\TortoiseGitMerge.exe" "%TEMP%\CSV1\%Datei1%.csv" "%TEMP%\CSV2\%Datei2%.csv"
goto Ende

:TeileDateipfadAuf
for /f "delims= tokens=1,2" %%i in ("%Datei%") do (
set "LAUFWERK=%%~di"
set "PFAD=%%~pi"
set "DATEI=%%~ni"
set "ERWEITERUNG=%%~xi"
)
goto %Rcksprung%

:Ende
票数 1
EN

Stack Overflow用户

发布于 2016-06-09 22:50:18

我发现自己经常做类似的事情。我发现最好的方法是创建第三个工作表,它将只显示差异。

代码语言:javascript
复制
=IF(Sheet2!A1 =VLOOKUP(Sheet2!$A1,Sheet1!$A:A,COLUMN(Sheet1!A1),FALSE),"",Sheet2!A1 & " / " & VLOOKUP(Sheet2!$A1,Sheet1!$A:A,COLUMN(Sheet1!A1),FALSE))

如果您将其放在新工作表的单元格a1中(适当地替换工作表名称),然后将其拖到所有列中,然后向下拖动到行中,它将显示不同的值,而不会显示其他值。

然后,可以应用滤镜以使其更可见。

这假设您的部件号列是A列,并且在每个列表中只出现一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37710613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档