Kontoanalys

Detta tips visar hur vi kan jämföra textsträngar med varandra och vid överensstämmelse kopiera relevanta rader från ett arbetsblad till ett annat arbetsblad.

Det kan vara av stort intresse vid t ex kontoanalyser och för de transaktioner som har registrerats på kontot.

Exemplet har sin utgångspunkt i följande uppställning:

 

Problemet i exemplet är att identifiera de rader som har samma värden kolumnområdet C:F.

1:a radens värden ska jämföras med 2:a radens värden och därefter upprepas denna process med 3:e och 4:e radens värden osv.

För att underlätta jämförelsen sätts varje rads värden ihop till en textsträng i en annan kolumn och utifrån dessa strängvärden sker  jämförelsen. Överensstämmer värdena med varandra ska respektive rads värden kopieras över till ett annat blad.

Option Explicit

Sub Konto_Analys()
'© 2001 Alla rättigheter XL-Dennis
Dim wsBlad1 As Worksheet, wsBlad2 As Worksheet
Dim rnOmrade As Range, rnCell As Range
Dim stTal As String
Dim lnNastaRad As Long
Dim iRader As Integer, i As Integer, j As Integer

Set wsBlad1 = ThisWorkbook.Worksheets("Blad1")
Set wsBlad2 = ThisWorkbook.Worksheets("Blad2")
Set rnOmrade = wsBlad1.Range(Range("C2"), Range("F65536").End(xlUp))

Application.ScreenUpdating = False

iRader = rnOmrade.Rows.Count

On Error Resume Next


'Här sätts jämförelsevärdena ihop i kolumn J
For i = 1 To iRader
        If IsEmpty(rnOmrade(i, 2)) Then
           stTal = CStr(rnOmrade(i, 1).Value & rnOmrade(i, 4).Value & _
           rnOmrade(i, 3).Value)
        Else
           For j = 1 To 4
              If Application.WorksheetFunction.IsText(rnOmrade(i, j).Value) = True  _
              Then
                   stTal = stTal & rnOmrade(i, j).Value
              ElseIf rnOmrade(i, j).Value < 0 Then
                   stTal = stTal & CStr(Abs(rnOmrade(i, j).Value))
              Else
                   stTal = stTal & CStr(rnOmrade(i, j).Value)
              End If
           Next j
          End If
          rnOmrade(i, 4).Offset(0, 4).Value = stTal
          stTal = ""
Next i


'Här sker jämförelse mellan värdena i kolumn J,
'rad 2 jämförs med rad 3 osv.
'Är värdena lika kopieras motsvarande rader ut i Blad1
'och klistras in i Blad 2
For i = 1 To iRader
        lnNastaRad = _
        Application.WorksheetFunction.CountA(wsBlad2.Range("A:A")) + 1
        If rnOmrade(i, 4).Offset(0, 4).Value = _
        rnOmrade(i + 1, 4).Offset(0, 4).Value Then
             Range(rnOmrade(i, 1), rnOmrade(i + 1, 4)).Copy _
                 wsBlad2.Range("A" & lnNastaRad)
             i = i + 1
        End If
Next i


wsBlad2.Columns("A:D").EntireColumn.AutoFit

'Här tas jämförelsesträngarna i kolumn J bort
Range(rnOmrade(1, 4).Offset(0, 4), _
rnOmrade(iRader, 4).Offset(0, 4)).Clear

Application.ScreenUpdating = True
End Sub