Tạo macro chép lại số liệu cho liền dòng.

Liên hệ QC

bluecat

Thành viên mới
Tham gia
7/10/06
Bài viết
37
Được thích
1
Hiện tại số trong cột A là cách 7 dòng có 1 số nên khó xem, các bạn giúp mình macro chép lại số sang cột B cho liền dòng để xem cho dễ, mình làm không được. Cảm ơn các bạn.
 

File đính kèm

  • ChepLaiSo.xls
    29 KB · Đọc: 48
Các ô của bạn chỉ nằm trên cột A và dòng cách đều theo quy luật, vì vậy bạn có thể sử dụng hàm INDIRECT() để chép lại số.
 
Nếu vấn đề chỉ như ví dụ của bạn đưa thì không cần phải viết Macro đâu bạn ạ. Bạn thực hiện như thế này nhé.
Chọn cột A
Edit/Goto/Specials/Constant ok
copy

chọn ô bạn muốn copy rồi paste vào,

Vậy là bạn có được danh sách liên tục
Thân mến.
 
(ó lẻ bạn cần nó, vậy thì macro đây:

Các bạn giúp mình macro chép lại số sang cột B cho liền dòng để xem cho dễ, mình làm không được. Cảm ơn các bạn.
Mã:
Option Explicit[b]
Sub ChepAToB()[/b]
 Dim lCuoi As Long, iJ As Long
 
 lCuoi = Range("A65432").End(xlUp).Row
  For iJ = 1 To lCuoi
    If Range("A" & iJ) <> "" Then _
        Range("B" & Range("B65432").End(xlUp).Row + 1) = Range("A" & iJ)
  Next iJ[b]
End Sub[/b]
 
Lần chỉnh sửa cuối:
Mã:
Option Explicit
[B]Sub ChepAToB()[/B]
 Dim lCuoi As Long, iJ As Long
 lCuoi = Range("A65432").End(xlUp).Row
  For iJ = 1 To lCuoi
    If Range("A" & iJ) <> "" Then _
        Range("B" & Range("B65432").End(xlUp).Row + 1) = Range("A" & iJ)
  Next iJ
[B]End Sub[/B]
Theo cách viết vòng lặp For-Next trên, macro chạy chậm vì phải duyệt qua từng ô, dù là ô trống. Nếu vô tình ô A65000 có dữ liệu, For Next phải lặp đến 65.000 lần.
Dùng câu lệnh ra= Cells(ra, 1).End(xlDown).Row để gán số dòng của ô trong cột A có dữ liệu bên dưới vào biến ra (bỏ qua các ô trống) macro chạy nhanh hơn.
Với macro AtoB này, nếu cột A có n ô dữ liệu thì Do Loop lặp n lần.
Mã:
Sub AtoB()
Dim ra As Long, rb As Long
ra = 1
rb = 1
Do
  ra = Cells(ra, 1).End(xlDown).Row
  Cells(rb, 2) = Cells(ra, 1)
  rb = rb + 1
  If ra = 65536 Then Exit Sub
Loop
End Sub
 

File đính kèm

  • AtoB.zip
    11.1 KB · Đọc: 46
SoiBien đã viết:
Nếu vấn đề chỉ như ví dụ của bạn đưa thì không cần phải viết Macro đâu bạn ạ. Bạn thực hiện như thế này nhé.
Chọn cột A
Edit/Goto/Specials/Constant ok
copy

chọn ô bạn muốn copy rồi paste vào,

Vậy là bạn có được danh sách liên tục
Thân mến.
Bác Soibien lúc nào cũng Đơn giản, gọn nhẹ, hiệu quả...Thanks
 
Cách của Soibien hình như ko dc... Tôi thấy Excel chỉ cho phép chọn mãng ko liên tục chứ ko cho copy.. thử lại xem
ANH TUẤN
 
Em làm được mà bác Tuấn. copy thủ công thôi
 
(ảm ơn Long một lần nữa!

phamduylong đã viết:

Mình thử định lượng đây:
Mã:
[b]
Sub AtoB()[/b]
Dim ra As Long, rb As Long, lCuoi As Long, iJ As Long
Dim ThGian1 As Double, ThGian2 As Double

ra = 1:         rb = 1
lCuoi = Range("A65432").End(xlUp).Row
ThGian1 = Timer
Do
  ra = Cells(ra, 1).End(xlDown).Row
  Cells(rb, 2) = Cells(ra, 1)
  rb = rb + 1
  If ra = 65536 Then Exit Do
Loop
ThGian1 = Timer - ThGian1
 For iJ = 1 To lCuoi
    If Range("A" & iJ) <> "" Then _
        Range("B" & Range("B65432").End(xlUp).Row + 1) = Range("A" & iJ)
   
 Next iJ
 ThGian2 = Timer - ThGian1
 MsgBox Str(ThGian1 / ThGian2)[b]
End Sub[/b]
' Sau khi chạy, macro sẽ cho kết quả như sau:
Mã:
     '                [B][COLOR="Purple"] [SIZE="4"][B]9.92345542656717E-07 [/B][/SIZE][/COLOR][/B]
 
phamnhukhang đã viết:
Em làm được mà bác Tuấn. copy thủ công thôi
Bạn thử tạo 1 file mới rồi gõ vào A1= 5, B3=5 và C1=5 rồi dùng phím Ctrl chọn 3 cell này và copy thử xem...
Tôi chọn hoài ko dc... nó cứ báo lỗi "That command cannot be use on multiple selections"
vậy là sao?
 
ý của bác có phải là copy dữ liệu từ nhiều cột không ạ. Ở đề bài của bạn Blucat thì cách của bác Soibien là nhanh và hiệu quả, nó sẽ tự động chọn (bôi đen) tất cả dữ liệu có trong cột, nếu cột có quá nhiều dữ liệu thì mới thây hay. e nghĩ thế. còn mở rộng hơn em nghĩ lại cần phải dùng đến code của các bác. Em làm như bác cũng cho ra lỗi tương tự
 
Lần chỉnh sửa cuối:
Thì tôi biết cách của Soibien.. nhưng quan trọng là tôi ko thể copy dc, chăng hiểu tại sao? Này nhé.. khi Ctrl + G gì gì đó, nó sẽ bôi đen các cell ta cần.. giờ thì bấm Ctrl + C đễ copy, đúng ko? Đến bước này thì.. báo lỗi như tôi nói ở trên, vì thế mà tôi nhờ bạn kiểm tra hộ trên máy tính bạn có hiện tượng này ko?
Test bằng cách gỏ vào A1 số 5, B3 số 5 và C1 số 5, sau đó copy 3 cell này giống như Soibien chỉ.. thử có dc ko?
ANH TUẤN
 
anhtuan1066 đã viết:
Thì tôi biết cách của Soibien.. nhưng quan trọng là tôi ko thể copy dc, chăng hiểu tại sao? Này nhé.. khi Ctrl + G gì gì đó, nó sẽ bôi đen các cell ta cần.. giờ thì bấm Ctrl + C đễ copy, đúng ko? Đến bước này thì.. báo lỗi như tôi nói ở trên, vì thế mà tôi nhờ bạn kiểm tra hộ trên máy tính bạn có hiện tượng này ko?
Test bằng cách gỏ vào A1 số 5, B3 số 5 và C1 số 5, sau đó copy 3 cell này giống như Soibien chỉ.. thử có dc ko?
ANH TUẤN
Em chỉ làm được khi các số được đánh cách quãng trên 1 cột, khi chọn dữ liệu trên nhiều cột thì em cũng bị như bác. Có lẽ Bill không cho copy trong trường hợp này cũng đúng, vì khi bác pates vào một ô trên một cột sẽ mất đi tính quy luật của dữ liệu (thứ tự chẳng hạn). Em nghĩ như thế không biết có đúng không?
 
Lần chỉnh sửa cuối:
Uh... đúng... nên tôi mới nói giả sử trong bảng tính cụ thể thì chưa chắc dùng dc, vì đâu phải chỉ có 1 cột A duy nhất có số chứ, đúng ko? Có lẽ Record macro trong trường hợp đơn giản, sau đó sửa lại cho thích hợp...
------------------------------------------
Tôi đã record macro theo gợi ý của Soibien, sửa lại 1 tí và đã thành công... Cám ơn Soibien nhé!
ANH TUẤN
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Uh... đúng... nên tôi mới nói giả sử trong bảng tính cụ thể thì chưa chắc dùng dc, vì đâu phải chỉ có 1 cột A duy nhất có số chứ, đúng ko? Có lẽ Record macro trong trường hợp đơn giản, sau đó sửa lại cho thích hợp...
ANH TUẤN

Chắc chắn là dùng được vì trước khi thực hiện Edit/Goto/Specials/Constant mình phải chọn cột A trước. Vấn đề là yêu cầu của từng bài toán cụ thể mới là quan trọng.
 
Không cho sửa mã số

Cột A tôi dùng để nhập mã số, tôi sẽ nhập lần lượt từ trên xuống. Tôi muốn khi nhập sai mã số mà muốn sửa lại thì xuất hiện hộp thoại yêu cầu xác nhận lại và phải nhập mật khẩu để tránh tình trạng vô tình bị sửa mã số???
 
(ảm ơn sự thảo luận của bạn & AnhTuan1066

phamnhukhang đã viết:
Chắc chắn là dùng được vì trước khi thực hiện Edit/Goto/Specials/Constant mình phải chọn cột A trước. Vấn đề là yêu cầu của từng bài toán cụ thể mới là quan trọng.
Đối với mình đây là 1 gợi í quan trọng, vì tạo được macro ver 2.00, như sau:
Mã:
[b]Sub CopyAToB()[/b]
 Dim Timer_ As Double
   Timer_ = Timer
    Columns("A:A").Select
    Selection.SpecialCells(xlCellTypeConstants, 1).Select
    Selection.Copy Destination:=Range("B" & Range("B65432").End(xlUp).Row + 1)
  MsgBox Str(Timer - Timer_)[b]
End Sub[/b]
(/ậy là ~ zì làm = tay, giao lại cho máy làm sẽ nhanh hơn!
 
Lần chỉnh sửa cuối:
nokiano258vn đã viết:
Cột A tôi dùng để nhập mã số, tôi sẽ nhập lần lượt từ trên xuống. Tôi muốn khi nhập sai mã số mà muốn sửa lại thì xuất hiện hộp thoại yêu cầu xác nhận lại và phải nhập mật khẩu để tránh tình trạng vô tình bị sửa mã số???
Bác có thể tạo một danh sách bao gồm các mã số cho trước. sau đó tạo Datavalidition\list . Dữ liệu nguồn bác có thể dùng name hoặc tham chiếu trực tiệp tới vùng dữ liệu chứa danh sach cho trước đã tạo. Bỏ đánh dấu tại ô Ignore blank. Như vậy chỉ những mã số có trong danh sach cho trước mới được chấp nhận. Bác có thể đưa thông báo gì tùy thích.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom