Không biết dữ liệu 1 của bạn thế nào, thử cách củ chuối này xem sao?Thế còn vấn đề một thì sao anh ?
Hướng dẫn sử dụng thì có hướng dẫn.Hườn dẫn sử dụng bạn ơi. Mình chỉ biết sơ sơ về Excel thui. >_<
Function Rev(text) As String
Rev = StrReverse(text)
End Function
Sub tinh()
Dim kt As Integer, dg As Range
kt = MsgBox("Co dao khong. Co nhan OK?", vbOKCancel)
Set dg = Sheet1.[b56536].End(xlUp)
For i = 1 To 9
If kt = 1 Then
dg.Offset(i) = Rev(Sheet1.[a1].Offset(IIf(i < 4, 0, IIf(i < 7, 1, 2))))
Else
dg.Offset(i) = Sheet1.[a1].Offset(IIf(i < 4, 0, IIf(i < 7, 1, 2)))
End If
Next
End Sub
Thế còn vấn đề một thì sao anh ?
Option Explicit
Sub ChuyenThanh3Dong()
Dim Clls As Range
Columns("B:B").ClearContents
[B1].Value = "KQua"
For Each Clls In Range([A1], [A1].End(xlDown))
With [B65500].End(xlUp).Offset(1)
.Resize(3).Value = Clls.Value
End With
Next Clls
End Sub
Khoa Vu à, việc đảo chuỗi thì UDF thua hẳn StrReverse(text) của VBA vậy nên dùng cách lôi nó tư VBA vào Excell như bác ChanhTQ làm là ngon nhất.
Còn sub tính thì sao để nhiều vòng lặp và nhiều lệnh trùng quá.Mã:Function Rev(text) As String Rev = StrReverse(text) End Function
Mình sửa lại chút và sử dụng đảo chuỗi nha
Có thể bỏ hàm Rev (Để 2 in 1) bằng cách thay câu lệnh sauMã:Sub tinh() Dim kt As Integer, dg As Range kt = MsgBox("Co dao khong. Co nhan OK?", vbOKCancel) Set dg = Sheet1.[b56536].End(xlUp) For i = 1 To 9 If kt = 1 Then dg.Offset(i) = Rev(Sheet1.[a1].Offset(IIf(i < 4, 0, IIf(i < 7, 1, 2)))) Else dg.Offset(i) = Sheet1.[a1].Offset(IIf(i < 4, 0, IIf(i < 7, 1, 2))) End If Next End Sub
dg.Offset(i) = Rev(Sheet1.[a1].Offset(IIf(i < 4, 0, IIf(i < 7, 1, 2))))
Bằng
dg.Offset(i) = StrReverse(Sheet1.[a1].Offset(IIf(i < 4, 0, IIf(i < 7, 1, 2))))
Sub Tinh()
Dim m, n, i, j As Integer
m = Range("D65000").End(xlUp).Row
Range("D1:D" & m).Clear
n = Range("A65000").End(xlUp).Row
For j = 1 To 3
For i = 1 To n
Range("D" & 3 * i - 3 + j) = Range("A" & i)
Next i
Next j
End Sub
Private Sub ChuyenHang_Click()
Const solan As Long = 3
Dim n As Long, i As Long, fR As Long
Range("D1:D1000").Clear
n = Range("A65000").End(xlUp).Row
fR = 1
For i = 1 To n
Range("D" & fR & ":D" & fR + solan - 1).Value = Range("A" & i).Value
fR = fR + solan
Next i
End Sub
Nếu tổng quát hơn nữa thì nên dùng code sau
Muốn gán mấy dòng thì thay 3 = XMã:[COLOR=Silver]Private Sub ChuyenHang_Click() Const solan As Long = 3 Dim n As Long, i As Long, fR As Long Range("D1:D1000").Clear n = Range("A65000").End(xlUp).Row fR = 1 For i = 1 To n[/COLOR] [B] Range("D" & fR & ":D" & fR + solan - 1).Value = Range("A" & i).Value[/B] [COLOR=Silver] fR = fR + solan Next i End Sub[/COLOR]
Const solan As Long = 3
Thú thật em cũng chả muốn code hay ct gì cả, chỉ cần copy, tính số lượng dòng cần dán = bội số của số lần và dán, xong sort lại, nếu cần thêm cột stt cho dễ sort.Câu 2 bất đắc dĩ mới dùng VBA, còn câu 1 tôi thích làm công thức hơn:
=INDEX($A$2:$A$6,INT((ROW(A1)-1)/3)+1,1)
(dùng cho dữ liệu gốc 5 ô từ A2 đến A6. Sửa thành bao nhiêu cũng được)
Fill down.
Công thức bình thường, không gây chậm máy.
Do không biết VBA, tôi dùng cách "cùi bắp" như thế này:Thế còn vấn đề một thì sao anh ?