So, after a bit of trying I got this code to work:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Intersection
Dim Rng As Range
Set Rng = Range(Cells(3, 6), Cells(500, 7))
Set Intersection = Application.Intersect(Target, Rng)
If Not Intersection Is Nothing Then
If IsNumeric(Selection.Value) And Selection.Value <> "" Then
If (GetAsyncKeyState(vbKeyRButton)) Then 'right mouse button
Selection.Value = (Selection.Value - 1)
ElseIf (GetAsyncKeyState(vbKeyLButton)) Then 'left mouse button
Selection.Value = (Selection.Value + 1)
End If
Cells(Selection.Row, 1).Select
End If
End If
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
You have to paste this code into the code section of the worksheet (most probably "Sheet1" under "Microsoft Excel Objects" in the Visual Basic View). It won't work in other modules but the specific worksheet one. You also have to add the following code to a regular module (most probably "Module1"):
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
It may help you see what this code does: SelectionChange is always called upon a selection in the worksheet, not differing between left click, right click, arrow buttons etc. The Key State function allows us to check specifically for left or right click.
The selected cell is always switched to the same row on the left, because Excel wouldn't be able to detect another left click otherwise (there is no specific event for the left click and the same cell wouldn't trigger SelectionChange again).