Excel – Výpis odlišných hodnot

Úloha:

  1. V Excelu máme v jedné buňce definovanou určitou hodnotu.
  2. Vedle toho máme oblast hodnot a potřebujeme z této oblasti vypsat hodnoty odlišné od hodnoty v definované buňce.
  3. Řešení pomocí vzorců je příliš krkolomné, proto vytvoříme vlastní funkci pomocí VBA makra.

Související aspekty:

  • V oblasti může být více hodnot, které jsou odlišné od zadané hodnoty.
  • Hodnoty “0” a ” ” (prázdná buňka) pro mé potřeby ignoruji.
  • Nechci do jedné buňky vypsat seznam všech těchto odlišných hodnot, protože s nimi dále potřebuji pracovat izolovaně.
  • Přidávám další parametr a tím je pořadí hodnoty, kterou ze všech odlišných hodnot chci získat. Na příkladě to znamená, že pokud mám v této oblasti např. 5 odlišných hodnot, tak si mohu jako parametr zadat i pořadí 1-5, která mi vrátí např. pátou odlišnou hodnotu, která se v oblasti vyskytla.

Řešení:

  • Makro skript ve VBA:

Function diff_value(compare_cell As Range, searched_area As Range, order As Byte)

  Dim items() As Variant
  Dim compare_value As Variant
  Dim array_items As Object
  Dim cell As Range

  Set array_items = CreateObject("Scripting.Dictionary")
  compare_value = compare_cell.Cells(1, 1).Value

  For Each cell In searched_area
    If (cell.Value <> compare_value And cell.Value <> 0 And Trim(cell.Value) <> "") Then
      array_items(cell.Value) = cell.Value
    End If
  Next

  items = array_items.keys
  If (order > array_items.Count Or order < 1) Then
    diff_value = ""
  Else
    diff_value = items(order - 1)
  End If

End Function

  • Pro vyzkoušení a lepší pochopení přikládám soubor s ukázkou použití: diff_value.xlsm