View Full Version : comparing columns
harken
09-11-2008, 08:34 AM
I would appreciate some assistance in coding a subroutine to do the following: Given two columns (a and b) with differing numbers of text entries, I?d like to compare the two and have the following results placed in three other columns ? entries that are in col A, but not in col B; entries in B, but not in A; and common entries.  
   
  Thanks for any help
shamsam1
09-11-2008, 08:58 AM
this will help
Sub CompareColumns()
  
 
   Dim Column1 As Range
    Dim Column2 As Range
  
  'Prompt user for the first column range to compare...
  '----------------------------------------------------
    Set Column1 = Application.InputBox("Select First Column to Compare", Type:=8)
    
    'Check that the range they have provided consists of only 1 column...
    If Column1.Columns.Count > 1 Then
    
      Do Until Column1.Columns.Count = 1
      
        MsgBox "You can only select 1 column"
        Set Column1 = Application.InputBox("Select First Column to Compare", Type:=8)
        
      Loop
      
    End If
   
  'Prompt user for the second column range to compare...
  '----------------------------------------------------
    Set Column2 = Application.InputBox("Select Second Column to Compare", Type:=8)
    
    'Check that the range they have provided consists of only 1 column...
    If Column2.Columns.Count > 1 Then
    
      Do Until Column2.Columns.Count = 1
      
        MsgBox "You can only select 1 column"
        Set Column2 = Application.InputBox("Select Second Column to Compare", Type:=8)
        
      Loop
      
    End If
    
  
  'Check both column ranges are the same size...
  '---------------------------------------------
  If Column2.Rows.Count <> Column1.Rows.Count Then
  
    Do Until Column2.Rows.Count = Column1.Rows.Count
    
      MsgBox "The second column must be the same size as the first"
      Set Column2 = Application.InputBox("Select Second Column to Compare", Type:=8)
      
    Loop
    
  End If
  
  'If entire columns have been selected (e.g. $Ahttp://forums.microsoft.com/MSDN/emoticons/emotion-10.gifA), limit the range sizes to the
  'UsedRange of the active sheet. This stops the routine checking the entire sheet
  'unnecessarily.
  '-------------------------------------------------------------------------------
  If Column1.Rows.Count = 65536 Then
 
    Set Column1 = Range(Column1.Cells(1), Column1.Cells(ActiveSheet.UsedRange.Rows.Count))
    Set Column2 = Range(Column2.Cells(1), Column2.Cells(ActiveSheet.UsedRange.Rows.Count))
 
  End If
  
  
  'Perform the comparison and set cells that are the same to yellow
  '----------------------------------------------------------------
  Dim intCell As Long
  
  For intCell = 1 To Column1.Rows.Count
    
    If Column1.Cells(intCell) = Column2.Cells(intCell) Then
    
      Column1.Cells(intCell).Interior.Color = vbYellow
      Column2.Cells(intCell).Interior.Color = vbYellow
      
    End If
  
  Next
  
 End Sub
shamsam1
09-11-2008, 09:06 AM
http://www.vb-helper.com/howto_excel_compare_ranges.html
if ur playing with numbers this will be good
harken
09-11-2008, 11:34 AM
The columns are different sizes...the following code does return the common values, but if I change the = operator to <> in the "if x = y" stmt, it returns all the values in column C rather than those that are different.  I can't figure out why it is doing this.  Can anyone help/  If it makes any difference, the values are text, not numbers.
    Dim CompareRange As Variant, x As Variant, y As Variant
    ' Set CompareRange equal to the range to which you will
    ' compare the selection.
    Set CompareRange = Range("C5:C200")
    ' NOTE: If the compare range is located on another workbook
    ' or worksheet, use the following syntax.
    ' Set CompareRange = Workbooks("Book2"). _
    '   Worksheets("Sheet2").Range("C1:C5")
    '
    ' Loop through each cell in the selection and compare it to
    ' each cell in CompareRange.
    
    Range("a5:a200").Select
    For Each x In Selection
        For Each y In CompareRange
            If x = y Then x.Offset(0, 1) = x
        Next y
    Next x
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.