Witam!
Wklej poniższy kod do modułu w VBA Excel'a i w ten sposób będziesz miał dostępne dwie funkcje (w funkcjach użytkownika): "SzyfrowanieVigenere" i "DeszyfrowanieVigenere"
Kod:
Option Explicit
'deklaracja zmiennych globalnych wykorzystywanych w funkcjach
'szyfrowania i deszyfrowania metodą Vigenere'a
'Jako tablica Vigenere'a posłużyła mi tablica kodów ASCII,
'a dokładnie znaki od 97 do 122 reprezentujące kolejne małe
'litery alfabetu łacińskiego od "a" do "z"
Dim k As Integer, i As Byte, j As Byte, wycHasla As String
Function SzyfrowanieVigenere(TekstJawny As String, haslo As String)
Dim zmSzyfrogram As String
'wycinanie i szfrowanie kolejnego znaku z tekstu jawnego.
'Powtarzaj operację od pierwszego do ostatniego znaku tekstu jawnego
For k = 1 To Len(TekstJawny)
'znajdź w pierwszym wierszu numer kolumny, w której znajduję się
'litera wyciętą z tekstu jawnego i przypisz tą wartość zmiennej "j"
For j = 0 To 25
If LCase(Mid(TekstJawny, k, 1)) = Chr(97 + (j Mod 26)) Then Exit For
Next j
'jeżeli długość teksu jawnego modulo długość tekstu hasła
'wynosi zero, wtedy wytnij ostatnią literę z hasła
If k Mod Len(haslo) = 0 Then
wycHasla = LCase(Mid(haslo, Len(haslo), 1))
'w przeciwnym przypadku wycinaj kolejną literę hasła
Else
wycHasla = LCase(Mid(haslo, k Mod Len(haslo), 1))
End If
'znajdź w pierwszej kolumnie numer wiersza, w którym znajduje się
'litera wycięta z tekstu hasła i przypisz tą wartość zmiennej "i"
For i = 0 To 26
If wycHasla = Chr(97 + (i Mod 26)) Then Exit For
Next i
'zwiększ zmienną szyfrogramu o literę pobraną z i-tego wiersza
'i j-tej kolumny. W ten sposób twórz zakodowany ciąg
zmSzyfrogram = zmSzyfrogram & Chr(97 + ((i + j) Mod 26))
Next k
'zwróć wynik zaszyfrowanego tekstu
SzyfrowanieVigenere = zmSzyfrogram
End Function
Function DeszyfrowanieVigenere(Szyfrogram As String, haslo As String)
Dim zmTekstJawny As String
'wycinanie i dekodowanie kolejnego znaku z szyfrogramu.
'powtarzaj operację od pierwszego do ostatniego znaku szyfrogramu
For k = 1 To Len(Szyfrogram)
'jeżeli długość teksu szyfrogramu modulo długość tekstu hasła
'wynosi zero, wtedy wytnij ostatnią literę z hasła
If k Mod Len(haslo) = 0 Then
wycHasla = LCase(Mid(haslo, Len(haslo), 1))
'w przeciwnym przypadku wycinaj kolejną literę hasła
Else
wycHasla = LCase(Mid(haslo, k Mod Len(haslo), 1))
End If
'znajdź, w którym wierszu tablicy znajduję się jako pierwsza,
'litera wycięta z hasła i przypisz ten wiersz pod zmienną "i"
For i = 0 To 26
If wycHasla = Chr(97 + (i Mod 26)) Then Exit For
Next i
'w znalezionym wierszu znajdź kolumnę zawierającą odpowiednio
'wyciątą literę z szyfrogramu, nr kolumny przypisz pod zmienną "j"
For j = 0 To 25
If LCase(Mid(Szyfrogram, k, 1)) = Chr(97 + ((i + j) Mod 26)) Then Exit For
Next j
'zwiększ zmieną tekstu jawnego (odkodowanego) kolejną literę z
'pierwszego wiersza i "j-tej" kolumny
zmTekstJawny = zmTekstJawny & Chr(97 + (j Mod 26))
Next k
'zwróć wynik odkodowanego tekstu
DeszyfrowanieVigenere = zmTekstJawny
End Function Funkcje są mojego autorstwa więc spokojnie nikt Ci nie zarzuci plagiatu 
Sam je kiedyś pisałem na zaliczenie, daj znać później jaką tym razem ocenę dostałem 
Algorytm nie jest doskonały, szyfruje tylko litery łacińskie bez jakichkolwiek innych znaków drukowanych i niedrukowanych, ale za to masz komentarze do poszczególnych kroków funkcji. Jak chcesz to możesz go dopracować.
Znajdziesz nas na: