Sub SelectNoDeselectCells()
Dim LRng As Range, DRng As Range, SRng
Dim LDgD As Long, LDgC As Long
Dim DDgD As Long, DDgC As Long
Dim LCTr As Integer, LCF As Integer
Dim DCTr As Integer, DCF As Integer
Set LRng = Selection
LDgD = LRng.Cells(1, 1).Row
LDgC = LDgD + LRng.Rows.Count - 1
LCTr = LRng.Cells(1, 1).Column
LCF = LCTr + LRng.Columns.Count - 1
Set DRng = Range(InputBox("Hay Chon Dia Chi Bo Chon:"))
DDgD = DRng.Cells(1, 1).Row
DDgC = DDgD + DRng.Rows.Count - 1
DCTr = DRng.Cells(1, 1).Column
DCF = DCTr + DRng.Columns.Count - 1
If DDgD < LDgD Or DDgC > LDgC Or _
DCTr < LCTr Or DCF > LCF Then
MsgBox "Dien Khong Vay?", , "GPE": Exit Sub
1 ElseIf DDgD = LDgD And DCF < LCF And DDgC < LDgC _
And DCTr = LCTr Then
DDgD = LDgD + DRng.Rows.Count
Union(Range(Cells(LDgD, DCF + 1), Cells(LDgC, LCF)), _
Range(Cells(DDgD, LCTr), Cells(LDgC, LCF))).Select
2 ElseIf DDgD = LDgD And DCTr > LCTr And _
DCF < LCF And DDgC < LDgC Then
Set SRng = Union(Range(Cells(LDgD, LCTr), Cells(LDgC, DCTr - 1)), _
Range(Cells(LDgD, DCF + 1), Cells(LDgC, LCF)))
Union(SRng, Range(Cells(DDgC + 1, DCTr), _
Cells(LDgC, DCF))).Select
3 ElseIf DDgD = LDgD And DCF = LCF And DDgC < LDgC _
And DCTr > LCTr Then
DDgD = LDgD + DRng.Rows.Count
Union(Range(Cells(LDgD, LCTr), Cells(LDgC, DCTr - 1)), _
Range(Cells(DDgD, DCTr), Cells(LDgC, LCF))).Select
4 ElseIf DDgD = LDgD And DCF = LCF And DDgC < LDgC _
And DCTr = LCTr Then
DDgD = LDgD + DRng.Rows.Count
Range(Cells(DDgD, LCTr), Cells(LDgC, LCF)).Select
5 ElseIf DDgD = LDgD And DCF < LCF And DDgC = LDgC _
And DCTr = LCTr Then
Range(Cells(LDgD, DCF + 1), Cells(LDgC, LCF)).Select
6 ElseIf DDgD = LDgD And DCF < LCF And DDgC = LDgC _
And DCTr > LCTr Then
Union(Range(Cells(LDgD, LCTr), Cells(LDgC, DCTr - 1)), _
Range(Cells(LDgD, DCF + 1), Cells(LDgC, LCF))).Select
7 ElseIf DDgD = LDgD And DCF = LCF And DDgC = LDgC _
And DCTr > LCTr Then
Range(Cells(LDgD, LCTr), Cells(LDgC, DCTr - 1)).Select
8 ElseIf DDgD = LDgD And DDgC = LDgC And _
DCTr = LCTr And DCF = LCF Then
MsgBox "No More Select", , "GPE"
9 ElseIf DDgD > LDgD And DCF < LCF And DDgC < LDgC _
And DCTr = LCTr Then
Set SRng = Union(Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)) _
, Range(Cells(DDgC + 1, LCTr), Cells(LDgC, LCF)))
Union(SRng, Range(Cells(DDgD, DCF + 1), Cells(DDgC, LCF))).Select
10 ElseIf DDgD > LDgD And DDgC < LDgC And _
DCTr > LCTr And DCF < LCF Then
Set SRng = Union(Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)) _
, Range(Cells(DDgC + 1, LCTr), Cells(LDgC, LCF)))
Union(SRng, Range(Cells(DDgD, LCTr), Cells(DDgC, DCTr - 1)) _
, Range(Cells(DDgD, DCF + 1), Cells(DDgC, LCF))).Select
11 ElseIf DDgD > LDgD And DDgC < LDgC And _
DCTr > LCTr And DCF = LCF Then
Set SRng = Union(Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)) _
, Range(Cells(DDgC + 1, LCTr), Cells(LDgC, LCF)))
Union(SRng, Range(Cells(DDgD, LCTr), Cells(DDgC, DCTr - 1))).Select
12 ElseIf DDgD > LDgD And DDgC < LDgC And _
DCTr = LCTr And DCF = LCF Then
Union(Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)) _
, Range(Cells(DDgC + 1, LCTr), Cells(LDgC, LCF))).Select
13 ElseIf DDgD > LDgD And DDgC = LDgC And _
DCTr = LCTr And DCF < LCF Then
Union(Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)) _
, Range(Cells(DDgD, DCF + 1), Cells(LDgC, LCF))).Select
14 ElseIf DDgD > LDgD And DDgC = LDgC And _
DCTr > LCTr And DCF < LCF Then
Set SRng = Union(Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)) _
, Range(Cells(DDgD, LCTr), Cells(LDgC, DCTr - 1)))
Union(SRng, Range(Cells(DDgD, DCF + 1), Cells(LDgC, LCF))).Select
15 ElseIf DDgD > LDgD And DDgC = LDgC And _
DCTr > LCTr And DCF = LCF Then
Union(Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)) _
, Range(Cells(DDgD, LCTr), Cells(LDgC, DCTr - 1))).Select
16 ElseIf DDgD > LDgD And DDgC = LDgC And _
DCTr = LCTr And DCF = LCF Then
Range(Cells(LDgD, LCTr), Cells(DDgD - 1, LCF)).Select
End If
Set LRng = Nothing: Set DRng = Nothing
End Sub