Code chuyển hàng bất kỳ lên hàng thứ 3

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

khamha

Không có việc gì khó...
Tham gia
4/6/10
Bài viết
662
Được thích
846
Nghề nghiệp
CNVC Laos
Nhờ các bạn giúp,Như chủ đề mình đã nêu ở trên,Ý của mình là:
khi ta chọn số TT từ hàng thứ tư trở xuống tại ô B1 thì tất cả dữ liệu có trong hàng đó sẽ được
chuyển lên hàng thứ 3,Các bạn xem File đính kèm.Cảm ơn
 

File đính kèm

Nhờ các bạn giúp,Như chủ đề mình đã nêu ở trên,Ý của mình là:
khi ta chọn số TT từ hàng thứ tư trở xuống tại ô B1 thì tất cả dữ liệu có trong hàng đó sẽ được
chuyển lên hàng thứ 3,Các bạn xem File đính kèm.Cảm ơn
Record Macro xem thử có dùng được không nhé.
 

File đính kèm

Upvote 0
Cái này không cần đến VBA
 

File đính kèm

Upvote 0
Cái này không cần đến VBA
Tôi lại hiểu là tác giả muốn "chuyển" nghĩa là "dời vị trí" lên trên, dữ liệu ở dòng cũ không còn nên làm như thế.
Không biết tác giả muốn sao, nếu làm như PTM... tôi nghĩ là tác giả sẽ tự làm được.
Nhờ các bạn giúp,Như chủ đề mình đã nêu ở trên,Ý của mình là:
khi ta chọn số TT từ hàng thứ tư trở xuống tại ô B1 thì tất cả dữ liệu có trong hàng đó sẽ được
chuyển lên hàng thứ 3
,Các bạn xem File đính kèm.Cảm ơn
 
Upvote 0
Nhờ các bạn giúp,Như chủ đề mình đã nêu ở trên,Ý của mình là:
khi ta chọn số TT từ hàng thứ tư trở xuống tại ô B1 thì tất cả dữ liệu có trong hàng đó sẽ được
chuyển lên hàng thứ 3,Các bạn xem File đính kèm.Cảm ơn
Mình cũng có cách làm theo đúng ý bạn nhưng ko dùng VBA mà dùng hàm VLOOKUP.
Bạn thử xem có được ko nhé.
 

File đính kèm

Upvote 0
Tôi lại hiểu là tác giả muốn "chuyển" nghĩa là "dời vị trí" lên trên, dữ liệu ở dòng cũ không còn nên làm như thế.
Không biết tác giả muốn sao, nếu làm như PTM... tôi nghĩ là tác giả sẽ tự làm được.
Mình đang tìm cách sửa dữ liệu đã nhập theo kiểu củ chuối,tức là khi muốn sửa hàng nào thì sẽ đưa hàng đó nên hàng thứ 3,sau đó sẽ liên kết với TextBox trong UserForm để sửa,nếu dùng Filter hoặc công thức thì không thể sửa dữ liệu gốc được.
 
Upvote 0
Còn một việc nữa nhờ các bạn sửa giúp,Là Sort lại dữ liệu,Mình đã Record Macro rồi,Nhưng vì nó dài quá.
Các bạn xem Code:

PHP:
Sub Macro2()
'
' Macro2 Macro
'

'
    Range("A3").Select
    ActiveWorkbook.Worksheets("ChuyenDong").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("ChuyenDong").Sort.SortFields.Add Key:=Range("A3") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("ChuyenDong").Sort
        .SetRange Range("A3:D17")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Các bạn giúp mình nhé,Cảm ơn
 
Upvote 0
Mình đang tìm cách sửa dữ liệu đã nhập theo kiểu củ chuối,tức là khi muốn sửa hàng nào thì sẽ đưa hàng đó nên hàng thứ 3,sau đó sẽ liên kết với TextBox trong UserForm để sửa,nếu dùng Filter hoặc công thức thì không thể sửa dữ liệu gốc được.
"Chời ơi"! Mục đích sao không nói rõ từ đầu, nếu thế thì chỉ cần làm như PTM... và một nút bấm (Có một code nhỏ) nữa là xong mà, đâu cần text box - user form.
Chọn B1, chỉnh sửa dòng 3, ấn nút 1 cái, xong, ngủ!
(Vụ này ptm0412 và các cao thủ GPE làm 10 giây. (Mình làm cái này có thể được nhưng phải nửa tiếng và chưa chắc ổn)
Hic! (Bắt chước concogia). Hic!
----------
Những gì mình hiểu mà giải thích cho người khác hiểu được gần giống giống như mình còn gọi là "Sư phạm". Hic nữa!
 
Upvote 0
Còn một việc nữa nhờ các bạn sửa giúp,Là Sort lại dữ liệu,Mình đã Record Macro rồi,Nhưng vì nó dài quá.
Các bạn xem Code:

PHP:
Sub Macro2()
'
' Macro2 Macro
'

'
    Range("A3").Select
    ActiveWorkbook.Worksheets("ChuyenDong").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("ChuyenDong").Sort.SortFields.Add Key:=Range("A3") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("ChuyenDong").Sort
        .SetRange Range("A3:D17")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Các bạn giúp mình nhé,Cảm ơn
Mã:
  ActiveWorkbook.Worksheets("ChuyenDong").Sort Range("A3"), xlAscending, , , , , , xlNo
Đâu anh thay thế thử code này xem sao
 
Upvote 0
Mình đang tìm cách sửa dữ liệu đã nhập theo kiểu củ chuối,tức là khi muốn sửa hàng nào thì sẽ đưa hàng đó nên hàng thứ 3,sau đó sẽ liên kết với TextBox trong UserForm để sửa,nếu dùng Filter hoặc công thức thì không thể sửa dữ liệu gốc được.
Bạn nói rằng sẽ liên kết với TextBox trong UserForm để sửa vậy cần quái gì di chuyển, dời tới dời lui cho lằng nhằng ---> Thích sửa thì cứ sửa thôi
 
Upvote 0
Bạn nói rằng sẽ liên kết với TextBox trong UserForm để sửa vậy cần quái gì di chuyển, dời tới dời lui cho lằng nhằng ---> Thích sửa thì cứ sửa thôi
Nếu sử dụng một mình thì nói làm gì,nhưng khi đưa cái Code trên vào sử dụng thì không khả thi lắm vì:nếu dữ liệu nhiều,thì nó chạy rất lâu. bạn ndu có cách khác không?
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu sử dụng một mình thì nói làm gì,nhưng khi đưa cái Code trên vào sử dụng thì không khả thi lắm vì:nếu dữ liệu nhiều,thì nó chạy rất lâu. bạn ndu có các khác không?

Làm gì mà lâu chứ! Cứ Find Method là chớp mắt thôi bạn ơi! Bạn gửi File lên đi! Thử gửi File có nhiều hàng đó!
 
Upvote 0
Tôi làm thử một bài cho Khamha tham khảo nhé!

Với 1 Userform, 1 listbox, 2 nút lệnh (một nhập mới, một nhập chỉnh sửa) và các textbox, tôi viết các thủ tục dưới đây:

Mã:
Dim MyRange As Range, MyMsgbox As Integer, i As Long

Private Sub UserForm_Initialize()
    ListBox1.List = Range(Sheet1.[A2], Sheet1.[E65536].End(xlUp)).Value
End Sub


Private Sub CommandButton1_Click()
    MyMsgbox = MsgBox("Ban co chac luu lai chinh sua thong tin cua ID: " & TextBox1, vbYesNo + vbQuestion, "Thông Báo")
    If MyMsgbox = vbYes Then
        Set MyRange = Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp)).Find(Label6.Caption, LookIn:=xlValues, LookAt:=xlWhole)
            If Not MyRange Is Nothing Then
                For i = 0 To 4
                    MyRange.Offset(, i) = Controls("TextBox" & i + 1)
                Next
            End If
    End If
    CommandButton1.Enabled = False
    CommandButton2.Enabled = True
End Sub


Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MyMsgbox = MsgBox("Ban co chac chinh sua thong tin cua ID: " & ListBox1.Value, vbYesNo + vbQuestion, "Thông Báo")
    If MyMsgbox = vbYes Then
        For i = 0 To 4
            Controls("TextBox" & i + 1) = ListBox1.Column(i)
        Next
        Label6.Caption = ListBox1.Value
        CommandButton1.Enabled = True
        CommandButton2.Enabled = False
        ListBox1.List = Range(Sheet1.[A2], Sheet1.[E65536].End(xlUp)).Value
    End If
End Sub


Private Sub CommandButton2_Click()
    Set MyRange = Sheet1.[A65536].End(xlUp).Offset(1)
    For i = 0 To 4
        MyRange.Offset(, i) = Controls("TextBox" & i + 1)
    Next
    ListBox1.List = Range(Sheet1.[A2], Sheet1.[E65536].End(xlUp)).Value
End Sub

Bạn xem file nhé!
 

File đính kèm

Upvote 0
Đúng là tìm bằng find như anh Ptm hay dùng Goto thì cũng rẹt 1 cái là tìm được ID.
Nhưng chủ Topic muốn vậy. Mình tham gia cách tạo Form, không dùng thì xoá.Vị trí là dòng 2.
Nếu F1>0 và cell liên quan có giá trị thì tạo form.
Nếu F1>0 và cell liên quan =0 thì xoá form xoá giá trị F1
Xoá F1 cũng xoá form
Bạn tham khảo file. Mình dùng lại file của Minh Thien nha.
 

File đính kèm

Upvote 0
Nếu dùng VBA thì tôi làm vầy:
Tại ô nào đó, dùng validation chọn ID hoặc STT cần sửa.
Dùng sự kiện worksheet change, nhảy tót xuống dòng đó và sửa.

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$1" Then
On Error Resume Next
    Application.EnableEvents = False
    Set abc = Range("A2:A500").Find(Target.Value)
    abc.Select
    Application.EnableEvents = True
End If
End Sub

Nếu cần thì freeze pane dòng 1 (ẹc ẹc)

Nếu dùng form thì cũng y vậy.
 
Upvote 0
Tôi làm thử một bài cho Khamha tham khảo nhé!

Với 1 Userform, 1 listbox, 2 nút lệnh (một nhập mới, một nhập chỉnh sửa) và các textbox, tôi viết các thủ tục dưới đây:

Mã:
Dim MyRange As Range, MyMsgbox As Integer, i As Long

Private Sub UserForm_Initialize()
    ListBox1.List = Range(Sheet1.[A2], Sheet1.[E65536].End(xlUp)).Value
End Sub


Private Sub CommandButton1_Click()
    MyMsgbox = MsgBox("Ban co chac luu lai chinh sua thong tin cua ID: " & TextBox1, vbYesNo + vbQuestion, "Thông Báo")
    If MyMsgbox = vbYes Then
        Set MyRange = Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp)).Find(Label6.Caption, LookIn:=xlValues, LookAt:=xlWhole)
            If Not MyRange Is Nothing Then
                For i = 0 To 4
                    MyRange.Offset(, i) = Controls("TextBox" & i + 1)
                Next
            End If
    End If
    CommandButton1.Enabled = False
    CommandButton2.Enabled = True
End Sub


Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MyMsgbox = MsgBox("Ban co chac chinh sua thong tin cua ID: " & ListBox1.Value, vbYesNo + vbQuestion, "Thông Báo")
    If MyMsgbox = vbYes Then
        For i = 0 To 4
            Controls("TextBox" & i + 1) = ListBox1.Column(i)
        Next
        Label6.Caption = ListBox1.Value
        CommandButton1.Enabled = True
        CommandButton2.Enabled = False
        ListBox1.List = Range(Sheet1.[A2], Sheet1.[E65536].End(xlUp)).Value
    End If
End Sub


Private Sub CommandButton2_Click()
    Set MyRange = Sheet1.[A65536].End(xlUp).Offset(1)
    For i = 0 To 4
        MyRange.Offset(, i) = Controls("TextBox" & i + 1)
    Next
    ListBox1.List = Range(Sheet1.[A2], Sheet1.[E65536].End(xlUp)).Value
End Sub

Bạn xem file nhé!

Nếu muốn thêm cột thì phải sửa Code lại như thế nào hả bạn,Mình sửa mãi mà không được,bạn hướng dẫn mình với,Cảm ơn bạn.
 
Upvote 0
Nếu muốn thêm cột thì phải sửa Code lại như thế nào hả bạn,Mình sửa mãi mà không được,bạn hướng dẫn mình với,Cảm ơn bạn.

Nếu bạn muốn thêm cột thì làm như vầy, tôi làm thêm cho bạn 2 cột nữa:

1) Thêm 2 cột trong Sheet1

2) Tại ListBox, bạn đặt thuộc tính ColumnCount=7 (thay vì trước là 5)

3) Thêm 2 cái TextBox nữa (TextBox6 và TextBox7)

4) Nguồn của ListBox thay vì:

ListBox1.List = Range(Sheet1.[A2], Sheet1.[E65536].End(xlUp)).Value

Nó sẽ tương đương với như vầy:

ListBox1.List = Range(Sheet1.[A2], Sheet1.[A65536].End(xlUp)).Resize(, 5).Value

Thì thay thế như vầy cho bạn dễ nắm bắt và chắc chắn bound hết hơn:

ListBox1.List = Range(Sheet1.[A2], Sheet1.[A65536].End(xlUp)).Resize(, 7).Value

5) Những cái gì có For i = 0 To 4 thì sửa thành For i = 0 To 6

6) Xem File để dễ hiểu hơn!!! Ẹc Ẹc...
 

File đính kèm

Upvote 0
Nếu mình muốn dùng thêm ComboBox thì phải sửa lại như thế nào?bạn giúp mình nhé,cảm ơn bạn nhiều.
 
Upvote 0
Thế bạn muốn dùng Combobox cho cột nào? Mục đích để làm gì?
Mình định sử dụng cái Form này để sửa dữ liệu trong Sheet"Data",Có các cột cần phải nhập dữ liệu theo quy định sẵn ( chỉ cho nhập dữ liệu có trong List)Khi đưa vào sử dụng thì sẽ có 32 cột,cột sử dụng comboBox là cột 2,3,7,10 và 28.
 
Upvote 0
Web KT

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

Back
Top Bottom