@gauravb20ui, Sorry for the delayed response and this scary post ! 
Different ways
NOTE: Code not tested 
1)Extract two sheets values separately and Merge them
(Quite Time Consuming process) - Like for each (two)
dtFilteredTable1 = (From rowSheet1 In dtInputExcelSheet1.Select()
Where (From rowSheet2 In dtInputExcelSheet2.Select()
Where CInt(rowSheet1("PersonId").ToString).Equals(CInt(rowSheet2("PersonId").ToString)) And
(Math.Abs(CInt(rowSheet1("Tax1").ToString)-CInt(rowSheet2("Tax1").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax2").ToString)-CInt(rowSheet2("Tax2").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax3").ToString)-CInt(rowSheet2("Tax3").ToString))>500)
Select rowSheet2).Count>0
Select rowSheet1).CopyToDatatable()
dtFilteredTable2 = (From rowSheet2 In dtInputExcelSheet2.Select()
Where (From rowSheet1 In dtInputExcelSheet1.Select()
Where CInt(rowSheet1("PersonId").ToString).Equals(CInt(rowSheet2("PersonId").ToString)) And
(Math.Abs(CInt(rowSheet1("Tax1").ToString)-CInt(rowSheet2("Tax1").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax2").ToString)-CInt(rowSheet2("Tax2").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax3").ToString)-CInt(rowSheet2("Tax3").ToString))>500)
Select rowSheet1).Count>0
Select rowSheet2).CopyToDatatable()
Merge the both to get desire output
2)Union method of IEnum
(Only in a single query)[Same like above method but only one assign]
dtFilteredTable1 = (From rowSheet1 In dtInputExcelSheet1.Select()
Where (From rowSheet2 In dtInputExcelSheet2.Select()
Where CInt(rowSheet1("PersonId").ToString).Equals(CInt(rowSheet2("PersonId").ToString)) And
(Math.Abs(CInt(rowSheet1("Tax1").ToString)-CInt(rowSheet2("Tax1").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax2").ToString)-CInt(rowSheet2("Tax2").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax3").ToString)-CInt(rowSheet2("Tax3").ToString))>500)
Select rowSheet2).Count>0
Select rowSheet1).UNION(
(From rowSheet2 In dtInputExcelSheet2.Select()
Where (From rowSheet1 In dtInputExcelSheet1.Select()
Where CInt(rowSheet1("PersonId").ToString).Equals(CInt(rowSheet2("PersonId").ToString)) And
(Math.Abs(CInt(rowSheet1("Tax1").ToString)-CInt(rowSheet2("Tax1").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax2").ToString)-CInt(rowSheet2("Tax2").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax3").ToString)-CInt(rowSheet2("Tax3").ToString))>500)
Select rowSheet1).Count>0
Select rowSheet2)).CopyToDatatable()
3)Use Join clause and Add to datatable
(Comparatively takes less time as we have only one main query and chance of neglecting non-matching PersonId column values) [But needs a careful supervision ]
String strvalues = String.Join(vblf,
(From rowSheet1 In dtInputExcelSheet1.Select()
Join rowSheet2 In dtInputExcelSheet2.Select() On rowSheet1("PersonId").ToString Equals
(rowSheet2("PersonId").ToString)
Where (Math.Abs(CInt(rowSheet1("Tax1").ToString)-CInt(rowSheet2("Tax1").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax2").ToString)-CInt(rowSheet2("Tax2").ToString))>500 Or
Math.Abs(CInt(rowSheet1("Tax3").ToString)-CInt(rowSheet2("Tax3").ToString))>500)
Select String.Join(",",rowSheet1.ItemArray.Select(Function(x)
x.ToString.Trim))+vblf+String.Join(",",rowSheet2.ItemArray.Select(Function(x)
x.ToString.Trim))))
Above returns only values to add the header and append to the output of the string use the below query,
String strColumnHeaders = String.Join(",",(From col In dtInputExcelSheet1.Columns.Cast(Of System.Data.DataColumn)
Select CStr(col.ColumnName).Trim))
Manipulate the string - as the columnValues are separated by “,” and rows separated by vblf[Environment.NewLine], build a datatable and add the values by using add data row
4)Traditional For Each row with IF Condition
For each row and place a IF condition and add it to new datatable
Lets too wait for others response… Expecting some other shortcuts as well as I am in pace of exploring LINQ.