Xin viết giúp đoạn VBA để Copy cột.

Liên hệ QC

thanhtam348

Thành viên thường trực
Tham gia
9/3/07
Bài viết
288
Được thích
62
Anh chị hay bạn nào Cho tôi xin đoạn mã để Copy; Từ Sheet1, cột B3 sang Sheet2 Cột A3, và sắp nó lại theo thứ tự A,B,C.
Cám ơn.
 
Lần chỉnh sửa cuối:
thanhtam348 đã viết:
Anh chị hay bạn nào Cho tôi xin đoạn mã để Copy; Từ Sheet1, cột B3 sang Sheet2 Cột A3, và sắp nó lại theo thứ tự A,B,C.
Cám ơn.
Cái này tương đối đơn giản, bạn có thể tự mình làm dược bằng cách vào Menu Tools / Macro / Record new Macro... Rồi làm thật chính xác từng thao tác là OK
Bạn bổ sung thêm và sắp nó lại theo thứ tự A,B,C. (trở tay không kịp luôn. hi hi) : Còn sắp theo thứ tự A B C thì còn tùy theo bảng mã mà bạn sử dụng để có đoạn code thích hợp
Bạn hãy thử xem

TDN
 
Lần chỉnh sửa cuối:
tedaynui đã viết:
Cái này tương đối đơn giản, bạn có thể tự mình làm dược bằng cách vào Menu Tools / Macro / Record new Macro... Rồi làm thật chính xác từng thao tác là OK
Bạn bổ sung thêm và sắp nó lại theo thứ tự A,B,C. (trở tay không kịp luôn. hi hi) : Còn sắp theo thứ tự A B C thì còn tùy theo bảng mã mà bạn sử dụng để có đoạn code thích hợp
Bạn hãy thử xem

TDN

Hi AnhTedynui,
sau khi record macro rồi thì làm thế nào để file đã record đó hoạt động
 
tedaynui đã viết:
Cái này tương đối đơn giản, bạn có thể tự mình làm dược bằng cách vào Menu Tools / Macro / Record new Macro... Rồi làm thật chính xác từng thao tác là OK
Bạn bổ sung thêm và sắp nó lại theo thứ tự A,B,C. (trở tay không kịp luôn. hi hi) : Còn sắp theo thứ tự A B C thì còn tùy theo bảng mã mà bạn sử dụng để có đoạn code thích hợp
Bạn hãy thử xem

TDN
Bạn cho xin một file VD đi! - tôi chưa từng vào Menu Tools / Macro / Record new Macro để làm những việc tương tự vậy bao giờ nên chưa biết.
 
Record new macro giống như một máy ghi âm vậy nó khi lại những thao tác bạn đã làm bằng mã lệnh. Nếu bạn chưa từng làm thì hãy làm thử đi đây là một tiện ích rất hay của excel nó giúp chúng ta thực hiện lại mộo thao tác một cách nhanh chóng. Còn để chạy thì bạn có thể vào toolbars/forms và chọn một nút lệnh và kéo bỏ vào trong sheet sau đó click chọn nút đó và click nút chuột phải chọn Assign macro chọn tên câu lệnh đã được ghi ( Thường excel chọn tên lệnh giúp bạn là Macro1). Chúc bạn thành công
 
Hơớng dẩn cụ thể cho tôi làm một lần việc đó đi!
 
Bấm vào nút Record New macro, đặt tên cho macro... sau đó cứ làm tất cả những công việc gì mà bạn muốn sau này con macro sẽ bắt chước (chẳng hạn như copy, paste, ẩn sheet) Tóm lại tất cả những công việc gì bạn đang làm thì macro sẽ ghi lại tất tần tật, sau này nó bắt chước y như bạn thôi
Muốn chạy macro bằng nút lệnh thì vẽ 1 nút nhấn từ thanh Forms, (hình chử nhật)... Khi bạn vừa vẽ xong, lập tức sẽ có 1 hộp thoại hiện ra hỏi bạn muốn liên kết nút này tới macro nào... Bạn chỉ tên macro mà hồi nảy bạn vừa tạo... vậy là xong... Từ nay, cứ bấm vào nút ấy thì macro sẽ bắt chước toàn bộ công việc mà bạn đã dạy nó
Chúc thành công
ANH TUẤN
 
Cám ơn các bạn!
Qua anhtuan tôi đã hiểu, nhưng sao tôi làm theo hướng dẩn xong cũng không thấy copy Từ Sheet1, cột B3 sang Sheet2 Cột A3 hay một tác dụng gì, tôi cũng tạo Forms và cho chạy macro như bạn nói...nhưng mở Module thì thật sự thấy nó ghi lại thao tác của mình đầy đủ. Tôi sai sót chổ nào chăng?
Hướng dẩn thêm dùm.
 
thanhtam348 đã viết:
Cám ơn các bạn!
Qua anhtuan tôi đã hiểu, nhưng sao tôi làm theo hướng dẩn xong cũng không thấy copy Từ Sheet1, cột B3 sang Sheet2 Cột A3 hay một tác dụng gì, tôi cũng tạo Forms và cho chạy macro như bạn nói...nhưng mở Module thì thật sự thấy nó ghi lại thao tác của mình đầy đủ. Tôi sai sót chổ nào chăng?
Hướng dẩn thêm dùm.
Bạn xem nhé :
 

File đính kèm

  • Copy.rar
    12.1 KB · Đọc: 221
Copy một cột hay nhiều cột

Nên nhớ rằng chỉ có 256 cột trong Excel
Mã:
Sub copy_4()
    Dim sourceRange As Range
    Dim destrange As Range
    Dim Lc As Integer
    Lc = Lastcol(Sheets("Sheet2")) + 1
    Set sourceRange = Sheets("Sheet1").Columns("A:A")
    Set destrange = Sheets("Sheet2").Columns(Lc)
    sourceRange.Copy destrange
End Sub
Sub copy_4_Values_PasteSpecial()
    Dim sourceRange As Range
    Dim destrange As Range
    Dim Lc As Integer
    Application.ScreenUpdating = False
    Lc = Lastcol(Sheets("Sheet2")) + 1
    Set sourceRange = Sheets("Sheet1").Columns("A:A")
    Set destrange = Sheets("Sheet2").Columns(Lc)
    sourceRange.Copy
    destrange.PasteSpecial xlPasteValues, , False, False
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
Sub copy_4_Values_ValueProperty()
    Dim sourceRange As Range
    Dim destrange As Range
    Dim Lc As Integer
    Lc = Lastcol(Sheets("Sheet2")) + 1
    Set sourceRange = Sheets("Sheet1").Columns("A:A")
    Set destrange = Sheets("Sheet2").Columns(Lc). _
                    Resize(, sourceRange.Columns.Count)
    destrange.Value = sourceRange.Value
End Sub

Thay vì dùng
Mã:
Set sourceRange = Sheets("Sheet1").Columns("A:A")
Bạn có thể dùng code sau nếu muốn copy nhiều hơn một cột
Mã:
Set sourceRange = Sheets("Sheet1").Columns("A:C")
Bạn cũng có thể dùng đoạn code sau để copy cột của ô hiện tại
Mã:
Set sourceRange = ActiveCell.column

Theo http://www.rondebruin.nl/tips.htm
 
Chỉnh sửa lần cuối bởi điều hành viên:
kelvin đã viết:
Copy một cột hay nhiều cột

Nên nhớ rằng chỉ có 256 cột trong Excel

Bạn có thể hướng dẩn rỏ hơn được không? Tôi làm theo cách nầy chưa được.
Nếu Copy nhiều cột ở Sheet1; Vd Cột A B C D trong một số hàng không nhất định nào đó (có công thức) sang Sheet2 với dạng Text, và sau đó xóa đi dử liệu ở Sheet1 để sau tiếp nhập dử liệu mới vào đó để được Copy nối tiếp qua Sheet2 có được không?
Nói nôm na cho dể hiểu là Sheet1 như cái cổng vào và Sheet2 như cái kho chứa....??!
 
Bạn hãy làm thế này là đơn giản nhất:
- Bấm chuột phải vào bất kỳ một biểu tượng trên thanh công cụ => chọn Form => chọn nút hình chữ nhật có tên là button => bạn bấm vào một nơi bất kỳ trong bảng tính xuất hiện khung Assign macro => bạn bấm vào nút Record bấm tiếp OK và sau đó bạn làm lần lượt các thao tác như ý mà bạn muốn ( Copy Từ Sheet1, cột B3 sang Sheet2 Cột A3, và sắp nó lại theo thứ tự A,B,C )
và nhớ thật chuẩn xác . xong rồi bạn nhấn vào nút vuông của hộp thoại nhỏ xuất hiện khi bạn ghi Stop record . xong xuôi bạn xoá đi và thể bấm vào nút mà bạn vẽ trong bảng tính nó sẽ làm y hệt như bạn vừa làm . Chúc bạn thành công.
 
Lần chỉnh sửa cuối:
Xin các ban hướng dẫn mình làm công việc sau tí: file mình có 2 sheet Hóa Đơn Bán Lẻ và Lưu Trữ ( HĐBL và LUUTRU). Sau khi nhập số liệu đầy đủ vào sheet HĐBL vd Hóa đơn số 01, số liệu sẽ được copy qua sheet LUUTRU để lưu lại.Sau đó xoá hóa đơn số 01 trong sheet HĐBL để tiếp tục nhập HĐ số 02,03....Có cách nào để mở lại HĐ đã lưu trữ để chỉnh sửa mà không cần phải nhập lại từ đầu không mong các bạn chỉ mình làm tí. Mình xin cảm on nhiều.
 
Lần chỉnh sửa cuối:
Xin các ban hướng dẫn công việc sau: Mình có 2 sheet HĐBL và LUUTRU. Sau khi nhập số liệu đủ vào sheet HĐBL vd Hóa đơn số 01, số liệu sẽ được copy qua sheet LUUTRU

.Sau đó xoá hóa đơn số 01 trong sheet HĐBL để tiếp tục nhập HĐ số 02,03....Có cách nào để mở lại HĐ đã lưu trữ để chỉnh sửa mà không cần phải nhập lại từ đầu không mong các bạn chỉ mình làm tí. Mình xin cảm on nhiều.
Sẽ có 1 số trường hợp diễn ra như sau:
(*) Cần sửa ngay Record vừa nhập; như vậy chu trình của bạn cần cân nhắc, có nên xóa form dữ liệu vừa nhập hay không?!
(+) Tại đây, bạn cũng cần 1 macro để chép vùng chứa record vô 'LuuTru' (Nếu bạn cần, ta sẽ bàn sau)
(*) Một khi cần lôi thằng cũ trước nhiều cái chú đang nhập, ví dụ vừa nhập xong Record thứ 98,đên1 cái 99 này lại gần giống với cái 95-97, thì bạn làm theo hướng dẫn từ xa, như sau:
* Sang trang 'LuủTuu', tô chọn vùng 'A2:A99', Sau đó nhấn chuột vô ngăn trái nhứt của thanh công cụ có thanh côing thức; Bạn nhập vô đó 'KhHg' & {ENTER} - Những hành động đó là ta đã gán tên cho vùng dữ liệu mà ta đã chọn.
* Sang trang tính 'HDBL', Chọn ô [H2], vô menu Data, Chọn dòng Validation & gán ô này với tên bạn vừa thực hiện bên trang tính 'LuuTru'
Công việc theo ý chúng ta muốn đạt được là ở ô này có 1 danh sách khách hàng đổ xuống để ta chọn
(Cần nói thêm, Sau này, chúng ta sẽ chỉ nên làm danh sách đỗ xuống này là duy nhất, không lập lại í mà!)
* Chép macro sau vô ngăn SheetName:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [H2]) Is Nothing Then
    Dim Sh As Worksheet, Rng As Range, sRng As Range
    
    Set Sh = Sheets("LuuTru")
    Set Rng = Sh.Range(Sh.[a1], Sh.[a1].End(xlDown))
    Set sRng = Rng.Find(Target, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Chua Co Du Lieu Nay!", , "GPE.COM":        Exit Sub
    Else
        With sRng
            [g2].Value = .Offset(, 1).Value:            [C3].Value = .Value
            [B4].Value = .Offset(, 2).Value:            [B6].Value = .Offset(, 3).Value
            [c6].Value = .Offset(, 4).Value:            [D6].Value = .Offset(, 5).Value
            [E6].Value = .Offset(, 6).Value:            [F6].Value = .Offset(, 7).Value
        End With
    End If
End Sub
(Cách chép: Phải chuột vô tên 'HDBL' và chọn dòng cuối trong menu vừa xuất hiện để vô cửa sổ VBE; Thực hiện dán macro vô CS này)
Chú ý: Mình đã thêm bên 'LuuTru' cột bên cạnh cột 'A' để lưu số hiệu hóa đơn ('G2')

+ Hễ bạn chọn tên người khách hàng nào đó trong [H2] thì các dữ liệu liên quan sẽ tái hiện đúng nơi bạn thích;
+ Tiến hành chỉnh sửa &
+ Nhấn nút lệnh để chép tiếp vô 'LuuTru' record vừa sửa xong!

Chúc bạn thành công. --=0
 
Chỉnh sửa lần cuối bởi điều hành viên:
Web KT
Back
Top Bottom