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

  • Thread starter Kiệt Dương
  • Ngày gửi
K

Kiệt Dương

Sơ cấp
15/11/05
5
0
0
48
Vũng Tàu
#1
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
 
Sửa lần cuối:
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#2
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:
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#3
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
 
K

Kiệt Dương

Sơ cấp
15/11/05
5
0
0
48
Vũng Tàu
#4
SA_DQ nó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:
 
K

Kiệt Dương

Sơ cấp
15/11/05
5
0
0
48
Vũng Tàu
#5
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
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#6
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: .
 

Đính kèm

K

Kiệt Dương

Sơ cấp
15/11/05
5
0
0
48
Vũng Tàu
#7
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
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#8
Kiệt Dương nói:
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é.
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.
 
HongViet

HongViet

Thành viên thân thiết
10/11/05
286
10
18
Đà nẵng
#9
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
 
Sửa lần cuối:
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#10
HongViet nói:

Error, Error$ , Error

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
Row(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
 
Sửa lần cuối:

Thành viên trực tuyến

  • sthink.com.vn
  • daongocnam0603
  • auyeuch
  • xediengiatot




Xem nhiều