Bài tập VBA - Macro

Liên hệ QC
Bạn co câu kết rất chuẩn.thnks
 
chào các bạn,


mình có câu hỏi muốn tham khảo


mình muốn copy dữ liệu giữa hai file excel sử dụng Macro.


yêu cầu: khi chạy Macro thì sẽ kiểm tra trên file SOURCE, khi Column 1 có giá trị là A thì copy:


Column 2 -> Colume 5 (của file TARGET)
Column 3 -> Colume 4 (của file TARGET)
Column 4 -> Colume 7 (của file TARGET)
Column 5 -> Colume 2 (của file TARGET)
Column 6 -> Colume 8 (của file TARGET)
Column 7 -> Colume 3 (của file TARGET)
Column 8 -> Colume 6 (của file TARGET)
Column 9-> Colume 9 (của file TARGET)


Các bạn có thể chỉ cho mình cách làm với.
 

File đính kèm

  • TARGET.xlsx
    8.2 KB · Đọc: 14
  • SOURCE.xlsx
    8.5 KB · Đọc: 15
chào các bạn,
yêu cầu: khi chạy Macro thì sẽ kiểm tra trên file SOURCE, khi Column 1 có giá trị là A thì copy:
Column 2 -> Colume 5 (của file TARGET)
Column 3 -> Colume 4 (của file TARGET)
Column 4 -> Colume 7 (của file TARGET)
Column 5 -> Colume 2 (của file TARGET)
Column 6 -> Colume 8 (của file TARGET)
Column 7 -> Colume 3 (của file TARGET)
Column 8 -> Colume 6 (của file TARGET)
Column 9-> Colume 9 (của file TARGET)
Các bạn có thể chỉ cho mình cách làm với.
Thử thế này xem sao. Lưu ý là file Source đang mở và dòng tiêu đề phải chuẩn
 

File đính kèm

  • Copy of TARGET.rar
    9.8 KB · Đọc: 57
Thử thế này xem sao. Lưu ý là file Source đang mở và dòng tiêu đề phải chuẩn

Cám ơn bạn đã hướng dẫn, nhưng đoạn code sau mình chưa hiểu lắm, bạn có thể giải thích giúp mình không?

.Range(.[C2], .[C65536].End(3)).Resize(, 10).AdvancedFilter 2, [B1:B2], [C4:J4]

Bây giờ mình đã có Format chuẩn của hai file mình muốn copy, bạn có thể xem giúp mình được không? Trong file SOURCE mình đã ghi rõ cột nào mình muốn copy.

*** Chỉ khi nào ô của cột G (file Source) có giá trị là "Thực hiện" thì mới copy giá trị của các ô trong cột J,L,P,R,S,T,W,X sang các cột của file Target.

Cám ơn các bạn!
 

File đính kèm

  • SOURCE.xls
    50 KB · Đọc: 24
  • TARGET.xls
    38 KB · Đọc: 17
Cám ơn bạn đã hướng dẫn, nhưng đoạn code sau mình chưa hiểu lắm, bạn có thể giải thích giúp mình không?

.Range(.[C2], .[C65536].End(3)).Resize(, 10).AdvancedFilter 2, [B1:B2], [C4:J4]

Bây giờ mình đã có Format chuẩn của hai file mình muốn copy, bạn có thể xem giúp mình được không? Trong file SOURCE mình đã ghi rõ cột nào mình muốn copy.

*** Chỉ khi nào ô của cột G (file Source) có giá trị là "Thực hiện" thì mới copy giá trị của các ô trong cột J,L,P,R,S,T,W,X sang các cột của file Target.

Cám ơn các bạn!
Bấm nút GPE trong sheet1, file Target.
2 file Source và Target phải để chung 1 folder.
 

File đính kèm

  • TARGET.rar
    13.6 KB · Đọc: 52
Chào bạn Ba Tê,

Mình đã copy vào chung một Folder và chạy Macro (Click nút GPE trong file Target) nhưng nó vẫn chưa copy được, bạn có thể xem lại giúp mình được không?

Cám ơn bạn,
 
Chào bạn Ba Tê,

Mình đã copy vào chung một Folder và chạy Macro (Click nút GPE trong file Target) nhưng nó vẫn chưa copy được, bạn có thể xem lại giúp mình được không?

Cám ơn bạn,
File kia phải đúng tên file là SOURCE.xls, tôi thử không bị lỗi, bạn đặt tên khác là "tèo"
 
File kia phải đúng tên file là SOURCE.xls, tôi thử không bị lỗi, bạn đặt tên khác là "tèo"

Hôm nay mình mới có thời gian để làm tiếp cái Macro này, cám ơn sự hỗ trợ của bạn Ba Tê rất nhiều.


Bạn cho mình hỏi, mình vẫn chưa chạy được đoạn code này để thực hiện copy dù đã làm đúng theo hướng dẫn của bạn(đã đặt đúng tên là cùng trong một Folder).
Liệu version của Office có ảnh hưởng gì đến vc chạy đoạn code này không bạn? Hiện tại mình đang dùng Office 2003, chưa test thử trên Office 2007 hoặc cao hơn.


Cám ơn bạn Ba Tê rất nhiều!
 
Ai biết sài macro lập cung thức Ẽ mới giúp mình làm file này với

Vui Lòng xem file đính kèm
Cảm ơn
 

File đính kèm

  • Tính số cuộn new.xlsx
    16.2 KB · Đọc: 17
Chưa ai giup dc mình file EX này sao??????????????????????.
 
Các bác cho em hỏi sao không thấy có box hay Topic nào hướng dẫn về Word cơ bản nhỉ? Bác nào biết thì dẫn link cho em nhé. Em là thành viên mới có gì sai mong mod thông cảm và chỉ bảo :). Thanks
 
Bài tập cho những thành viên mới bắt đầu

Tôi có 4 cột số liệu (như trong hình)
Các bạn chép giúp tôi lần lượt từng cột số liệu sang cột [G:G]
 

File đính kèm

  • Chép nối.JPG
    Chép nối.JPG
    101.1 KB · Đọc: 119
Tôi có 4 cột số liệu (như trong hình)
Các bạn chép giúp tôi lần lượt từng cột số liệu sang cột [G:G]
Tôi xin đưa ra 1 cách giải:
Mã:
Public Sub Ghep()
Dim i As Long, rng As Range, kq(), DongCuoi As Long
    Set rng = Sheet1.Range("B2:E" & [B65536].End(xlUp).Row)
For i = 1 To rng.Columns.Count
    DongCuoi = Sheet1.Range("F65536").End(xlUp).Row
    rng(1, i).Resize(rng.Rows.Count, 1).Copy
    Sheet1.Range("F" & DongCuoi + 1).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
Next i
End Sub
 
Rất cảm ơn bạn đã hưởng ứng & tham gia.

(1) Bạn nào có thể dịch từ ngôn ngữ VBA của macro của bạn này sang tiếng Việt được không vậy?

(2) Bạn nào có thể khái quát chu trình của macro của bạn í không vậy các bạn?

(3) Câu lệnh
Mã:
Set rng = Sheet1.Range("B2:E" & [B65536].End(xlUp).Row)
Có thể thay bằng câu lênh nào khác, nhưng vẫn đạt mục đích không, các bạn?

(4) Bạn nào thử sức viết một macro khác không các bạn?

Chúc ngày mới tốt lành!
 
..........................................................................
(4) Bạn nào thử sức viết một macro khác không các bạn?

Chúc ngày mới tốt lành!
Em thử dùng mảng xem sao!
Mã:
Public Sub Ghep()
Dim i As Integer, j As Integer, k As Integer
Dim data(), kq()
    data = Sheet1.Range("B2:E" & Sheet1.Range("E65536").End(xlUp).Row)
    ReDim kq(1 To UBound(data, 1) * UBound(data, 2))
    For i = 1 To UBound(data, 2)
        For j = 1 To UBound(data, 1)
            k = k + 1
            kq(k) = data(j, i)
        Next j
    Next i
    [G2].Resize(UBound(data, 1) * UBound(data, 2), 1) = Application.Transpose(kq)
End Sub
 
Tôi có 4 cột số liệu (như trong hình)
Các bạn chép giúp tôi lần lượt từng cột số liệu sang cột [G:G]

xin được nộp bài
(ko có số liệu nên chưa test.....hiihihihi)
Mã:
vSub coopy()
Application.ScreenUpdating = False
Dim LastRow, i As Long
LastRow = [b10000].End(3).Row - 1

For i = 1 To 3
[g10000].End(3).Row.Offset(1).Resize(LastRow).Value = [a2].Offset(, i).Resize(LastRow).Value
Next

Application.ScreenUpdating = True

End Sub
 
xin được nộp bài
(ko có số liệu nên chưa test.....hiihihihi)
Mã:
vSub coopy()
Application.ScreenUpdating = False
Dim LastRow, i As Long
LastRow = [b10000].End(3).Row - 1

For i = 1 To 3
[g10000].End(3).Row.Offset(1).Resize(LastRow).Value = [a2].Offset(, i).Resize(LastRow).Value
Next

Application.ScreenUpdating = True

End Sub
Code này báo lỗi tại dòng:
Mã:
[G10000].End(3).Row.Offset(1).Resize(LastRow).Value = [a2].Offset(, i).Resize(LastRow).Value
 
Nên hạn chế dùng hàng cuối cùng (65536 của 2003) trong lập trình, vì chỉ vô tình có dữ liệu là sẽ bị sai lệch. Bài toán như ở hình đơn giản nhất là xác định vùng chứa dữ liệu trong 1 cột từ ô đầu tiên và ô cuối cùng (giống chọn Ctr+shìft+ mũi tên chỉ xuống).

Ví dụ: Range(Range("A1"), Range("A1").End(xlDown)) sẽ chọn ô chứa dữ liệu từ A1 đến hàng cuối cùng trên 1 cột.
 
(1) Bạn nào có thể dịch từ ngôn ngữ VBA của macro của bạn này sang tiếng Việt được không vậy?

(2) Bạn nào có thể khái quát chu trình của macro của bạn í không vậy các bạn?

(3) Câu lệnh
Mã:
Set rng = Sheet1.Range("B2:E" & [B65536].End(xlUp).Row)
Có thể thay bằng câu lênh nào khác, nhưng vẫn đạt mục đích không, các bạn?

(4) Bạn nào thử sức viết một macro khác không các bạn?

Chúc ngày mới tốt lành!
Em nghĩ ý ba có thể viết thế này
PHP:
Sub Test()
Dim Lastrow As Long, rng As Range
Lastrow = Sheet1.Cells(Sheet1.Columns(2).Rows.Count, 2).End(xlUp).Row
ser rng = Sheet1.Range("B2:E" & Lastrow)
End Sub
 
Web KT
Back
Top Bottom