Làm sao chèn hàng, cắt và dán tự động trong excel

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi Kiệt Dương, 15 Tháng mười một 2005.

12,307 lượt xem

  1. Kiệt Dương

    Kiệt Dương Thành viên sơ cấp

    Bài viết:
    5
    Đã được thích:
    0
    Nơi ở:
    Vũng Tàu
    Các bạn thân mến,

    Bạn nào rành về Excel và VB xin giúp tôi làm một việc như sau (mà theo thiển ý của tôi thì phải tạo một hàm mới trong VB để có thể thực hiện được việc này - Không biết có đúng không?)

    (Tôi không biết phải dùng cách nào để thể hiện bảng tính Excel nơi đây, nên có thể cách trình bày bảng tính bên dưới của tôi sẽ khó xem, tôi cố gắng chú thích thêm để các bạn có thể hình dung ra đựơc, rất mong các bạn thông cảm nhé, cám ơn các bạn)


    Bảng Excel đầu tiên của tôi là như thế này:
    - Tên và địa chỉ ở cột A - tên nằm ở hàng trên, địa chỉ nằm ở hàng kế tiếp
    - số phone và số fax nẳm ở cột B - số phone nằm ở hàng trên, số fax nằm hàng kế tiếp
    - Cột C chỉ có một ít hàng mang số A1
    - Cột D cũng chỉ có ít hàng mang dòng chữ "xem trang..." ở cùng hàng với số A1 trong cột C

    A B C D

    NGUYEN VAN MOT 064-123-4567 A1 xem trang …
    1231 Le Loi, F4, VT fax 064-123-4568
    TRAN VAN HAI 064-123-4569
    1232 Le Lai, F3, VT 064-123-4570
    LY VAN BA 064-123-4575 A1 xem trang …
    1233 Trung Trac, F1, VT 064-123-4572
    HO VAN TU 064-123-4573
    1234 Trung Nhi, F1, VT fax 064-123-4574
    UNG PHONG NAM 064-123-4575
    235 Ba Trieu, F7, VT 064-123-4576
    LE VAN SAU 064-123-4577 A1 xem trang …
    1236 Hung Dao, F8, VT cell 064-123-4578

    Tôi cần kết quả sẽ như thế này: Trong Excel phải làm cách nào đó để khi dò tìm đến cột C mà gặp A1 thì hãy thực hiện 2 việc như sau:
    - chèn một hàng dưới hàng địa chỉ của tên người có số 1 trong cột C
    - Sau đó cắt đoạn text (mang dòng chữ "xem trang...") ở cột D tương ứng với hàng có A1 và rồi dán đoạn text này vào cột B ở hàng vừa mới chèn vào đó

    kết quả phải giống như bảng dưới đây:
    - Dò tìm gặp A1 ở cột C của hàng có mang tên "Nguyen Van Mot", nên chèn thêm một hàng vào bên dưới hàng mang địa chỉ của người này (1231 Le Loi...), đồng thời cắt dòng "xem trang..." ở cột D trong cùng hàng với Nguyen Van Mot, và dán vao cột B của hàng mới vừa chèn vào này
    - Dò tìm gặp thêm 2 chữ A1 ở cộpt C của hai hàng có mang tên "Ly Van Ba" và "Le Van Sau". rồi cũng thực hiện công vịêc tương tự chèn hàng và cắt dán như trên

    A B C D

    NGUYEN VAN MOT 064-123-4567 A1
    1231 Le Loi, F4, VT fax 064-123-4568
    xem trang …
    TRAN VAN HAI 064-123-4569
    1232 Le Lai, F3, VT 064-123-4570
    LY VAN BA 064-123-4575 A1
    1233 Trung Trac, F1, VT 064-123-4572
    xem trang …
    HO VAN TU 064-123-4573
    1234 Trung Nhi, F1, VT fax 064-123-4574
    UNG PHONG NAM 064-123-4575
    1235 Ba Trieu, F7, VT 064-123-4576
    LE VAN SAU 064-123-4577 A1
    1236 Hung Dao, F8, VT cell 064-123-4578
    xem trang …


    Rất mong được các bạn chỉ giúp

    Chân thành cám ơn các bạn
     
    Last edited: 15 Tháng mười một 2005
    #1
  2. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    419
    Đã được thích:
    28
    Nơi ở:
    HCM city
    Macro - phải vậy thôi!

    ~ ghì mà bạn viết thì bảo với macro làm cho bạn;
    Macro phải dò tìm cột C nếu Activecell.Value="A1" thì thực thi 2 công việc cho bạn: 1 Xác định dòng hiện hành & thêm vô 1 dòng nữa & ghi giá trị cột D vô biến tạm
    2 Chép số liệu từ biến tạm xuống dòng vừa tạo;
    Nếu chưa làm được thì báo nha!:two: :atom: :dzo:
     
    #2
  3. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,372
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    Có lẽ bạn cũng đã diễn giải cách làm rồi, vấn đề chuyển nó thành ngôn ngữ VBA thôi. Để đảm bảo tính chính xác trong thông tin bạn cung cấp, bạn nên gửi file cho tôi, tôi sẽ up lên cho.
    Mail: adam_tvn@yahoo.com
     
    #3
  4. Kiệt Dương

    Kiệt Dương Thành viên sơ cấp

    Bài viết:
    5
    Đã được thích:
    0
    Nơi ở:
    Vũng Tàu
     
    #4
  5. Kiệt Dương

    Kiệt Dương Thành viên sơ cấp

    Bài viết:
    5
    Đã được thích:
    0
    Nơi ở:
    Vũng Tàu
    Quả thật tôi cũng chưa làm được việc này, nhờ bạn chỉ giúp cụ thể hơn dùm tôi bạn nhé, rất cám ơn bạn

    Kiệt Dương
     
    #5
  6. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,372
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    Theo file của bạn Kiệt gửi tớ, tớ có cách này rất đơn giản không cần dùng đến VBA.
    (Xem file kèm theo).
    Nếu dùng VBA tất nhiên được, nhưng lấy dao bầu mổ lòng tong hơi phí nhĩ :biggrin: .
     

    Các file đính kèm:

    #6
  7. Kiệt Dương

    Kiệt Dương Thành viên sơ cấp

    Bài viết:
    5
    Đã được thích:
    0
    Nơi ở:
    Vũng Tàu
    Với tài liệu trên vài ngàn người?

    Xin chào các bạn,

    Cám ơn bạn adam_tran nhiều lắm, quả là một phương pháp tuyệt vời

    Nhưng file excel tôi gởi cho bạn chỉ là một thí dụ nho nhỏ với vài nhân vật mà thôi, cho nên cách của bạn làm rất nhanh và hiệu quả.

    Nếu là một tài liệu lớn đến 5 hoặc 7 ngàn nhân vật hoặc nhiều hơn nữa thì sao? Trong trường hợp này thì chắc phải nên dùng VB bạn nhỉ? Vậy nhờ bạn giúp tôi giải quyết nhé.

    Chân thành cám ơn bạn

    Kiệt Dương
     
    #7
  8. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,372
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    VBA thường giải quyết tốt trong những trường hợp tính toán phức tạp và ràng buộc nhiều điều kiện kiểm tra. Trong những trường hợp này, kết hợp các hàm và phương thức sẳn có (bult-in functions and methods) như sort, Find, SpecialCell... trong VBA vẫn hiệu quả hơn là tự coding lấy.
    Trong file bạn Kiệt nếu dữ liệu lớn nhưng có ít trường hợp có chữ A1, nếu dùng VBA có lẽ tớ cũng dùng Find và SpecialCell thay vì chạy vòng lặp.
     
    #8
  9. HongViet

    HongViet Thành viên thân thiết

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà nẵng
    Gởi bạn đoạn cũ chuối, xài tạm nha

    Sub ChepXuongDong
    Dim ii As Integer, ij As Integer
    Dim Chu As String, NoiDung As String
    Application.ScreenUpdating = 0
    'Giả dụ tên Sheet của bạn là "S3"
    Sheets("S3").Select: Range("B1").Select
    1' Đếm số Record:
    Selection.End(xlDown).Select
    ii= 1 + Selection.Row: ij= 1
    2' Tìm "A1" & Chép:
    Do
    ij= 1 + ij
    if ij >ii Then Exit Do
    Chu = "C" & CStr(ij): Range(Chu).Select
    if Activecell.Value = "A1" Then
    Chu = "D" & CStr(ij): Range(chu).Select
    NoiDung = ActiveCell.Value
    Range(CStr(ij+1) & ":" & CStr( 1+ ij)).Select
    Selection.Insert Shift:=xlDown
    ii = 1 + ii: ij = 1 +ij
    Chu = "B" & CStr(ij): Range(Chu).Select
    ActiveCell.Value = NoiDung
    End If
    Loop: Range:)C5").Select
    Application.ScreenUpdating = -1
    End Sub
     
    Last edited: 23 Tháng mười một 2005
    #9
  10. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    419
    Đã được thích:
    28
    Nơi ở:
    HCM city
     
    Last edited: 23 Tháng mười một 2005
    #10

Chia sẻ trang này