2012-08-02 73 views
0

我剛接觸VBA,需要一些幫助來完成我的需求。我有2個工作表。一個工作表的整數會根據用戶的輸入而有所不同(B列表1)。另一個工作表將具有1到255的恆定整數,每個整數256次(在B-Sheet 2-256 1列,256-2列中)。 ..)(即總共65280個單元格)。我需要比較兩個工作表中的兩個B列,並在D-Sheet 2列中寫入結果。如果兩個表中的列值都匹配,那麼結果列應該等於B列表2。如果不是,結果欄應該有0.我該怎麼做?VBA Excel 2個工作表中的單列比較

聽力細胞比較將消耗更多時間用於大型輸入。有沒有其他方法可以做到這一點?

回答

0

要做到這一點,你可以遍歷所有的行,並比較各行的單元格並將結果寫入。這裏是代碼:

Public FirstSheetName As String 
Public SecondSheetName As String 
Public ResultSheetName As String 
Public FirstSheetCol As String 
Public SecondSheetCol As String 
Public ResultSheetCol As String 
Public StartIndex As Long 
Public EndIndex As Long 
Public Sub CompareTwoCols() 
Dim i As Long 
Dim ii As Long 
FirstSheetName = "Sheet1" 
FirstSheetCol = "B" 
SecondSheetName = "Sheet2" 
SecondSheetCol = "B" 
ResultSheetName = "Sheet2" 
ResultSheetCol = "D" 
StartIndex = 1 
EndIndex = 65280 
'Initialized result with 0's 
For i = StartIndex To EndIndex 
If Sheets(SecondSheetName).Range(SecondSheetCol & i).Text <> "" Then 
    Sheets(ResultSheetName).Range(ResultSheetCol & i).Formula = 0 
End If 
Next i 
'Loop throuh all first sheet items skip if blank 
For ii = StartIndex To EndIndex 
If Sheets(FirstSheetName).Range(FirstSheetCol & ii).Text <> "" Then 
'Loop through all second sheet items 
    For i = StartIndex To EndIndex 
    'skip if blank or has a value in it 
    If Sheets(SecondSheetName).Range(SecondSheetCol & i).Text <> "" _ 
    And Sheets(ResultSheetName).Range(ResultSheetCol & i).Text = "0" Then 
     If Sheets(FirstSheetName).Range(FirstSheetCol & ii).Value = Sheets(SecondSheetName).Range(SecondSheetCol & i) Then 
      ' Match Found 
      Sheets(ResultSheetName).Range(ResultSheetCol & i).Formula = ThisWorkbook.Sheets(SecondSheetName).Range(SecondSheetCol & i) 
     End If 
    End If 
    Next i 
End If 
Next ii 
End Sub 

只需將FirstSheetName,SecondSheetName和ResultSheetName設置爲適用的工作表。然後,設置FirstSheetCol,SecondSheetCol和ResultSheetCol。最後將StartIndex設置爲第一行,將End Index設置爲LastRow。 我希望它有幫助, 邁克

+0

@Mike多謝邁克。這適用於sheet1和2的B列中的相同數量的整數。正如我所提到的,sheet1將具有來自用戶的可變輸入(範圍從1到255)。即它可能只包含2個值或甚至255個值。但是所有值都是不同的。如果sheet1在B列中有'2',那麼表2中的結果列D應該有256個2,它等於Sheet 2的B列。我怎樣才能修改代碼。希望我的要求對您有所幫助 – 2012-08-02 14:09:00

+0

使用嵌套循環更新上述腳本。它應該適合你。 – 2012-08-06 18:40:03

0

你並不需要爲此使用VBA。用於在表陣列的第一列中的值VLOOKUP

搜索和從表陣列中的另一個列返回 同一行中的值:

可以創建具有的功能。

例:

=IF(ISERROR(VLOOKUP(Sheet1!A1;Sheet2!A1:A15;1;0))=TRUE;0;Sheet1!A1) 

http://office.microsoft.com/en-us/excel-help/vlookup-HP005209335.aspx

+0

謝謝德克斯。這只是我最初的要求。我需要VBA在這裏開發我的應用程序。 – 2012-08-02 13:47:11