- Tham gia
- 23/3/16
- Bài viết
- 705
- Được thích
- 52
Chào cả nhà GPE ! Em cần 1 đoạn code để đảo ngược từ dưới lên trên như hình bên dưới. Xin chân thành cảm ơn
View attachment 206224
bạn lắp code này vào xem thế nào nhéChào cả nhà GPE ! Em cần 1 đoạn code để đảo ngược từ dưới lên trên như hình bên dưới. Xin chân thành cảm ơn
View attachment 206224
Sub daonguoc()
Dim i, j, a As Long
Dim arr, arr1
arr = Sheets(1).Range("c5:e11").Value
ReDim arr1(1 To UBound(arr, 1), 1 To UBound(arr, 2))
For i = UBound(arr, 1) To 1 Step -1
a = a + 1
For j = 1 To UBound(arr, 2)
arr1(a, j) = arr(i, j)
Next j
Next i
Sheets(1).Range("l5").Resize(a, UBound(arr, 2)).Value = arr1
End Sub
Cách dùng 1 mảng thôi:bạn lắp code này vào xem thế nào nhé
Mã:Sub daonguoc() Dim i, j, a As Long Dim arr, arr1 arr = Sheets(1).Range("c5:e11").Value ReDim arr1(1 To UBound(arr, 1), 1 To UBound(arr, 2)) For i = UBound(arr, 1) To 1 Step -1 a = a + 1 For j = 1 To UBound(arr, 2) arr1(a, j) = arr(i, j) Next j Next i Sheets(1).Range("l5").Resize(a, UBound(arr, 2)).Value = arr1 End Sub
Cách dùng 1 mảng thôi:
i1 = 1
i2 = UBound(arr)
jj = UBound(arr,2)
Do While i2 > i1
For j = 1 to jj
tmp = arr(i1, j)
arr(i1,j) = arr(i2,j)
arr(i2,j) = tmp
i1 = i1 + 1
i2 = i2 - 1
Next j1
Loop
Sub daonguoc2()
Dim i1, i2, jj, tmp, arr
arr = Sheets(1).Range("C5:E11").Value
i1 = 1
i2 = UBound(arr)
jj = UBound(arr, 2)
Do While i2 > i1
For j = 1 To jj
tmp = arr(i1, j)
arr(i1, j) = arr(i2, j)
arr(i2, j) = tmp
i1 = i1 + 1
i2 = i2 - 1
Next j 'j1
Loop
Sheets(1).Range("L5").Resize(i1, UBound(arr, 2)).Value = arr
End Sub
Tham gia ngoài lềXin chào bác VetMini, cháu thử viết theo gợi ý của Bác.
Code báo lỗi ở dòng: Next j1 ,cháu sửa lại Next j
Nhưng kết quả không giống với kết quả minh họa tại bài 1:
Nhờ bác chỉ giúp cháu chỗ sai ạ.Mã:Sub daonguoc2() Dim i1, i2, jj, tmp, arr arr = Sheets(1).Range("C5:E11").Value i1 = 1 i2 = UBound(arr) jj = UBound(arr, 2) Do While i2 > i1 For j = 1 To jj tmp = arr(i1, j) arr(i1, j) = arr(i2, j) arr(i2, j) = tmp i1 = i1 + 1 i2 = i2 - 1 Next j 'j1 Loop Sheets(1).Range("L5").Resize(i1, UBound(arr, 2)).Value = arr End Sub
i1 = i1 + 1
i2 = i2 - 1
Sheets(1).Range("L5").Resize(i1, UBound(arr, 2)).Value = arr
Sub LatDuLieu()
Dim Rng As Range
Dim Col As Byte, Dg As Long
Set Rng = [c5].CurrentRegion
' MsgBox Rng.Columns.Count, , Rng.Rows.Count '
ReDim Arr(1 To Rng.Rows.Count, 1 To Rng.Columns.Count)
For Col = 1 To Rng.Columns.Count
For Dg = 1 To Rng.Rows.Count
Arr(Rng.Rows.Count - Dg + 1, Col) = Rng.Cells(Dg, Col)
Next Dg
Next Col
[l5].Resize(Rng.Rows.Count, Rng.Columns.Count).Value = Arr()
End Sub
Tham gia ngoài lề
Có lẽ phải chuyển
ra ngoài vòng lặp for ... nextMã:i1 = i1 + 1 i2 = i2 - 1
Thay i1 thành Ubound(arr) trong câu lệnh dưới
Mã:Sheets(1).Range("L5").Resize(i1, UBound(arr, 2)).Value = arr
Xin lỗi, tối buồn ngủ quá, viết tùm lum hếtXin chào bác VetMini, cháu thử viết theo gợi ý của Bác.
Code báo lỗi ở dòng: Next j1 ,cháu sửa lại Next j
Nhưng kết quả không giống với kết quả minh họa tại bài 1:
Mã:Sub daonguoc2() Dim i1, i2, jj, tmp, arr arr = Sheets(1).Range("C5:E11").Value i1 = 1 i2 = UBound(arr) jj = UBound(arr, 2) Do While i2 > i1 For j = 1 To jj tmp = arr(i1, j) arr(i1, j) = arr(i2, j) arr(i2, j) = tmp i1 = i1 + 1 i2 = i2 - 1 Next j 'j1 Loop Sheets(1).Range("L5").Resize(i1, UBound(arr, 2)).Value = arr End Sub
Nhờ bác chỉ giúp cháu chỗ sai ạ.
Xin lỗi, tối buồn ngủ quá, viết tùm lum hết
Do While i2 > i1
For j = 1 To jj
tmp = arr(i1, j)
arr(i1, j) = arr(i2, j)
arr(i2, j) = tmp
Next j
i1 = i1 + 1
i2 = i2 - 1
Loop
Xin chào bác SA_DQ,Với dữ liệu như của bạn chủ bài đăng, ta có thể xài:
PHP:Sub LatDuLieu() Dim Rng As Range Dim Col As Byte, Dg As Long Set Rng = [c5].CurrentRegion ' MsgBox Rng.Columns.Count, , Rng.Rows.Count ' ReDim Arr(1 To Rng.Rows.Count, 1 To Rng.Columns.Count) For Col = 1 To Rng.Columns.Count For Dg = 1 To Rng.Rows.Count Arr(Rng.Rows.Count - Dg + 1, Col) = Rng.Cells(Dg, Col) Next Dg Next Col [l5].Resize(Rng.Rows.Count, Rng.Columns.Count).Value = Arr() End Sub
Kết quả trả về 3, và 7Set Rng = [c5].CurrentRegion
MsgBox Rng.Columns.Count, , Rng.Rows.Count
Dim i1 As Integer, i2 As Integer, arr ()
i1 = Rng.Rows.Count
i2 = Rng.Columns.Count
arr(1 To i1, 1 To i2)
thì kết quả vẫn OK. Vậy 2 cách khai báo này có gì giống và khác nhau ? Nhờ bác giải thích giúp cháu về ReDim với ạ.ReDim arr(1 To Rng.Rows.Count, 1 To Rng.Columns.Count)
hoặc:
Dim arr(1 To 7, 1 To 3)
Sub reverse()
Dim r As Long, c As Long, k As Long
Dim Arr, tmp
Arr = ThisWorkbook.Worksheets("Sheet1").Range("C5:E11").Value
k = UBound(Arr) + 1
For r = 1 To UBound(Arr) \ 2
For c = 1 To UBound(Arr, 2)
tmp = Arr(r, c)
Arr(r, c) = Arr(k - r, c)
Arr(k - r, c) = tmp
Next c
Next r
ThisWorkbook.Worksheets("Sheet1").Range("H5").Resize(UBound(Arr), UBound(Arr, 2)).Value = Arr
End Sub
thì mình xin giải thích tỉ mĩ cho bạn:Nhờ bác giải thích giúp cháu hiểu thêm 2 vấn đề này với ạ:
Set Rng = [c5].CurrentRegion
MsgBox Rng.Columns.Count, , Rng.Rows.Count
Kết quả trả về 3, và 7
Set Rng = [c5].CurrentRegion
MsgBox Rng.Address
Dim i1 As Integer, i2 As Integer, arr ()
i1 = Rng.Rows.Count
i2 = Rng.Columns.Count
arr(1 To i1, 1 To i2)
Sub test_revs2D()
Dim arr: arr = revs2D(Range("C5:E11"), True, True)
Znew.Range("E13").Resize(UBound(arr), UBound(arr, 2)).ClearContents
Znew.Range("E13").Resize(UBound(arr), UBound(arr, 2)).Value = arr
End Sub
Function revs2D(ByVal rng As Range, Optional ByVal TOtoBO As Boolean, Optional ByVal BeToAf As Boolean) As Variant
If Not IsArray(rng) Then revs2D = rng: Exit Function
Dim i As Long, j As Long, V As Long, H As Long, revsH, revsV, arr, dArr
arr = rng.Value
revsV = UBound(arr) + 1
revsH = UBound(arr, 2) + 1
ReDim dArr(1 To UBound(arr), 1 To UBound(arr, 2))
For i = 1 To UBound(arr)
V = i: If TOtoBO Then V = revsV - i
For j = 1 To UBound(arr, 2)
H = j: If BeToAf Then H = revsH - j
dArr(V, H) = arr(i, j)
Next j
Next i
revs2D = dArr
End Function
Chủ thớt này thật là vô tâm. mỗi lần nhờ mọi người viết code đều như vậy....! có code ôm đi là chạy mất dép. không có một lời cảm ơn người khác. Không biết mọi người có ý kiến gì không?Chào cả nhà GPE ! Em cần 1 đoạn code để đảo ngược từ dưới lên trên như hình bên dưới. Xin chân thành cảm ơn
View attachment 206224
Chủ thớt này thật là vô tâm. mỗi lần nhờ mọi người viết code đều như vậy....! có code ôm đi là chạy mất dép. không có một lời cảm ơn người khác. Không biết mọi người có ý kiến gì không?
- Đánh số thứ tự cho cột B từ nhỏ đến lớnChào cả nhà GPE ! Em cần 1 đoạn code để đảo ngược từ dưới lên trên như hình bên dưới. Xin chân thành cảm ơn
View attachment 206224
Chuẩn bị có 1 phần mềm mới xuất xưởng tung ra thị trường với phiên bản "Vơ Sình Niu"Có thể chủ thớt chưa biết "like'. Mình vô GPE từ 2008 mà mỗi lần nhờ xong cũng chỉ biết trả lời cám ơn chứ không biết vụ like, sau này mới biết thôi. hihi