Đảo ngược thứ tự giá trị các ô (1 người xem)

  • Thread starter Thread starter Nam CT
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Nam CT

BBB
Tham gia
4/11/13
Bài viết
16
Được thích
1
Donate (Momo)
Donate
Giới tính
Nam
Sub xapxep()
Dim cell As Range
Dim tg As Range
Dim x As Double
For Each cell In Selection
For Each tg In Selection.Offset(0, 1)
x = cell
cell = tg
tg = x
Next tg
Next cell
End Sub
Em muốn đảo ngược thứ tự giá trị các ô được chọn sang ô bên cạnh nhưng vẫn giữ nguyên giá trị ở vùng được chọn ban đầu.
 

File đính kèm

Không biết có phải bạn muốn như thế này không?
Mã:
Sub SapXep()
    Dim Arr
    Dim i As Long, j As Long, Tmp As Double
    Arr = Sheet1.Range("A1:A14")
    For i = 2 To UBound(Arr, 1)
        For j = 1 To UBound(Arr, 1) - 1
            If Arr(j, 1) < Arr(i, 1) Then
                Tmp = Arr(i, 1)
                Arr(i, 1) = Arr(j, 1)
                Arr(j, 1) = Tmp
            End If
        Next
    Next
    Sheet1.Range("B1").Resize(UBound(Arr, 1), 1) = Arr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Sub xapxep()
Dim cell As Range
Dim tg As Range
Dim x As Double
For Each cell In Selection
For Each tg In Selection.Offset(0, 1)
x = cell
cell = tg
tg = x
Next tg
Next cell
End Sub
Em muốn đảo ngược thứ tự giá trị các ô được chọn sang ô bên cạnh nhưng vẫn giữ nguyên giá trị ở vùng được chọn ban đầu.
Sửa tạm vầy coi sao nhá
PHP:
Sub xapxep()
Dim cell As Range
Dim tg As Range
Dim x As Double
Dim TAM
TAM = Selection
For Each cell In Selection
   For Each tg In Selection.Offset(0, 1)
      x = cell
      cell = tg
      tg = x
   Next tg
Next cell
Selection = TAM
End Sub
 
Upvote 0
Nếu chỉ đơn giản copy sang cột bên cạnh và đảo ngược thứ tự thì chỉ cần 1 vòng lặp thôi.

Dim i As Integer
For i = 1 To Selection.Rows.Count
Selection.Offset(0, 1).Cells(Selection.Rows.Count - i + 1) = Selection.Cells(i)
Next i

đương nhiên để tránh tình trạng chọn nhằm nhiều cột hì phải thêm phần code loại trừ nhiều cột đi.

If Selection.Columns.Count <> 1 Then
MsgBox "Vung chon co " & Selection.Columns.Count _
& " cot. Khong dao nguoc duoc"
End If
 
Upvote 0
Sub xapxep()
Dim cell As Range
Dim tg As Range
Dim x As Double
For Each cell In Selection
For Each tg In Selection.Offset(0, 1)
x = cell
cell = tg
tg = x
Next tg
Next cell
End Sub
Em muốn đảo ngược thứ tự giá trị các ô được chọn sang ô bên cạnh nhưng vẫn giữ nguyên giá trị ở vùng được chọn ban đầu.

Mã:
Sub xapxep()
Dim a As Long, cell As Range
    a = 2 * Selection.Row + Selection.Count - 1
    For Each cell In Selection
        cell.Offset(a - 2 * cell.Row, 1) = cell
    Next
End Sub

Nếu ta cần xử lý trường hợp chọn nhiều cột thì tùy vào cách xử lý mà code sẽ khác nhau. Vd. hiển thị MsgBox và không làm gì. Nhưng cũng có thể xử lý bằng cách: có thể chọn 1 hoặc nhiều cột nhưng chỉ có cột đầu được xét.

Mã:
Sub xapxep()
Dim a As Long, cell As Range, rng As Range
    Set rng = Selection.Resize(, 1)
    a = 2 * rng.Row + rng.Count - 1
    For Each cell In rng
        cell.Offset(a - 2 * cell.Row, 1) = cell
    Next
End Sub
 
Upvote 0
Hay là xài mảng cho nói oai thêm tí
PHP:
Sub yyy()
Dim i, j, tam(), kq()
tam = Selection.Value
ReDim kq(1 To UBound(tam), 1 To 1)
For i = UBound(tam) To 1 Step -1
   j = j + 1
   kq(j, 1) = tam(i, 1)
Next
Selection.Offset(, 1) = kq
End Sub
 
Upvote 0
bác quang hải qua topic sửa hộ e code bài sắp xếp số nhé
 
Upvote 0
Hay là xài mảng cho nói oai thêm tí
PHP:
Sub yyy()
Dim i, j, tam(), kq()
tam = Selection.Value
ReDim kq(1 To UBound(tam), 1 To 1)
For i = UBound(tam) To 1 Step -1
   j = j + 1
   kq(j, 1) = tam(i, 1)
Next
Selection.Offset(, 1) = kq
End Sub

Đâu chỉ có oai hả bạn (dùng 1 "hả bạn" thôi nhé. He he). Code là 1 trong số các code hay.
Tất nhiên phải xử lý trường hợp Selection = 1 ô (tam = Selection.Value sẽ có lỗi), và khi chọn >= 2 cột.

Cũng có thể dùng 1 mảng. Code sau có cả xử lý chọn 1 ô hoặc >= 2 cột.

Mã:
Sub yyy()
Dim i As Long, a As Long, x, tam()
    If Selection.Count = 1 Then
        Selection.Offset(, 1) = Selection
        Exit Sub
    Else
        tam = Selection.Value
        ReDim Preserve tam(1 To UBound(tam), 1 To 1)
        a = UBound(tam) + 1
        For i = 1 To UBound(tam) \ 2
           x = tam(i, 1)
           tam(i, 1) = tam(a - i, 1)
           tam(a - i, 1) = x
        Next
        Selection.Resize(, 1).Offset(, 1) = tam
    End If
End Sub
 
Upvote 0
Đâu chỉ có oai hả bạn (dùng 1 "hả bạn" thôi nhé. He he). Code là 1 trong số các code hay.
Tất nhiên phải xử lý trường hợp Selection = 1 ô (tam = Selection.Value sẽ có lỗi), và khi chọn >= 2 cột.

Cũng có thể dùng 1 mảng. Code sau có cả xử lý chọn 1 ô hoặc >= 2 cột.

Mã:
Sub yyy()
Dim i As Long, a As Long, x, tam()
    If Selection.Count = 1 Then
        Selection.Offset(, 1) = Selection
        Exit Sub
    Else
        tam = Selection.Value
        [B][COLOR=#ff0000]ReDim Preserve tam(1 To UBound(tam), 1 To 1)[/COLOR][/B]
        a = UBound(tam) + 1
        For i = 1 To UBound(tam) \ 2
           x = tam(i, 1)
           tam(i, 1) = tam(a - i, 1)
           tam(a - i, 1) = x
        Next
        Selection.Resize(, 1).Offset(, 1) = tam
    End If
End Sub
Hay, nhưng hình như dư dòng màu đỏ rồi anh ơi!
 
Upvote 0
Em muốn đảo ngược thứ tự giá trị các ô được chọn sang ô bên cạnh nhưng vẫn giữ nguyên giá trị ở vùng được chọn ban đầu.

Giả sử vùng chọn là B2:B9, gõ CT sau cho ô C2
Mã:
=OFFSET(B$2,ROW(B$9)-ROW(B2),0)
kéo xuống C9
 
Lần chỉnh sửa cuối:
Upvote 0

Bài viết mới nhất

Back
Top Bottom