Giúp mình tạo Macro copy có điều kiện với

  • Thread starter HyperVN
  • Ngày gửi
H

HyperVN

<b>Phu hót rác</b>
17/3/03
1,833
16
0
47
Hải Phòng
www.webketoan.vn
Mình có 2 sheet:
Sheet 1:
Cell A1 chứa tham số điều kiện (ví dụ là dãy 1,2,3,4...)
Cell A2 chứa giá trị cần Copy
Sheet 2:
Cell A1 = 1
Cell B1 = 2
Cell C1 = 3.....
Là các tham số điều kiện tương ứng với giá trị có thể trong sheet1!A1.

Các cell A2, B2, C2 ... sẽ chứa giá trị cần Copy từ Sheet1!A2 theo điều kiện tương ứng của giá trị điều kiện A1.

Ví dụ A1 = 3, A2 = 4 thì Marco thực hiện Copy giá trị 4 vào C2 (tương ứng với giá trị sheet2!C1=3)

Mong các bạn giúp đỡ. Rất cảm ơn.
 
Sửa lần cuối:
Khóa học Quản trị dòng tiền
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
Cái này là lấy dữ liệu từ sheet1 sang điền vào sheet2, chứ sao lại cóp pi nhỉ,

Nếu dùng công thức thì nó vầy:
ở sheet2 nhé:
ô A2 = IF(A1=Sheet1!$A$1,Sheet1!$A$2,"")

kéo công thức đến ô C2 thì ô C2 sẽ bằng 4.
 
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
À nếu muốn dùng marco thì nó lại vầy:

Public Sub SaoChep()
Dim x As Integer
Dim y As Integer
Sheet1.Select
x = Cells(1, 1)
y = Cells(2, 1)
Sheet2.Select
Cells(2, x) = y
End Sub
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
Theo mình nhớ (khi dùng F1Book - cái công cụ này tương đương với Excel) thì bản thân 1 đối tượng sheet có method đại loại có kiểu .CopyRange(nguồn, đích) (cái này mình ko rõ, các bạn phải thử). Mọi người thử suy nghĩ theo hướng đó xem sao.

thông thương thì logic như thế này:
- Chọn sheet (hoặc đối tượng) nguồn
- Select vùng cần copy
- Chọn Copy
- Chọn sheet (hoặc đối tượng) đích
- Chọn Paste

Để mô tả quá trình đó thì thường các đối tượng trong các ứng dụng nói chung (ko riêng gì excel) sẽ cung cấp 1 method làm công việc copy từ nguồn đến đích.

Khi đã có hướng nghĩ như vậy, các bạn thử theo cách suy nghĩ đó để tìm ra phương án chạy được (dùng help hoặc google)

Ví dụ:

Dim oWS as Worksheet
Tắt các sự kiện liên quan đến Excel (mình ko biết lệnh)
oWS.Range("A1:D10").Copy
oWS.Range("A10:D11").Paste (kèm theo đối số chỉ paste value)
Bật các sự kiện liên quan đến Excel (mình ko biết lệnh)

Còn việc copy có điều kiện gì thì phải sử dụng các câu lệnh lập trình thôi. If then, Select case, v.v...

Hyper chắc đang làm cái vụ chấm công "tay" trên Excel, vậy có thử thay đổi cách làm theo kiểu này ko?

Thử "design" cái database trên Excel cho 2 công việc:
- Nhập bảng chấm công chi tiết theo tháng
- Hiển thị và sửa bảng chấm công Tổng hợp theo tháng

Chú ý:
Bảng chấm công chi tiết:
- Có thể chấm đến đơn vị giờ
- Cho phép chấm chi tiết trong 1 ngày có thể nhiều chế độ đi làm (ví dụ đi làm n giờ/ngày (n < 8h), (8 - n) giờ còn lại là nghỉ phép hoặc nghỉ bù, hoặc nghỉ ốm, nghỉ ko lương, v.v...)
- Cho phép hiệu chỉnh giờ làm thêm trong bảng chấm công chi tiết

Bảng chấm công tổng hợp tháng:
- Tự động tính tổng cộng các loại ngày làm việc, nghỉ ko lương, nghỉ ốm, nghỉ phép,...
- Cho phép sửa lại bảng tổng hợp (theo khuôn khổ nhất định)

Chú ý:
- Có các sheets lưu trữ CSDL đối tượng như danh mục nhân viên, danh mục phòng ban, danh mục tổ nhóm,...
- Có 2 sheets trên Excel được thiết kế kiểu Database (tương đương với 2 tables), cho phép lưu dữ liệu chấm công trong thời gian dài mà ko cần xóa.
- Có 2 Sheets hiển thị và nhập thông tin chấm công chi tiết & tổng hợp (dùng làm báo cáo luôn). Dữ liệu lấy từ 2 sheets dữ liệu ở trên, chỉ cần chọn năm/tháng làm việc là tự lấy từ database và tự động tính toán. nếu là tháng mới thì tự động tạo dữ liệu mới. Yêu cầu 2 sheets báo cáo trên cần được Group by Phòng ban, v.v...

Cách thiết kế kiểu trên là cách thiết kế kiểu Database nhưng lại làm trên Excel. Làm như trên, ta sẽ có 1 "ứng dụng" chấm công tay bằng excel chứ ko phải là file "Chấm công" excel thông thường. Với cách thiết kế trên thì lập báo cáo tổng hợp chấm công theo năm cũng được.

Nếu có thể thì tách phần Database ra thành 1 file riêng, còn 1 file là chương trình.
 
Sửa lần cuối:
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Copy...

HyperVN nói:
Mình có 2 sheet:
Sheet 1:
Cell A1 chứa tham số điều kiện (ví dụ là dãy 1,2,3,4...)
Cell A2 chứa giá trị cần Copy
Sheet 2:
Cell A1 = 1
Cell B1 = 2
Cell C1 = 3.....
Là các tham số điều kiện tương ứng với giá trị có thể trong sheet1!A1.

Các cell A2, B2, C2 ... sẽ chứa giá trị cần Copy từ Sheet1!A2 theo điều kiện tương ứng của giá trị điều kiện A1.

Ví dụ A1 = 3, A2 = 4 thì Marco thực hiện Copy giá trị 4 vào C2 (tương ứng với giá trị sheet2!C1=3)

Mong các bạn giúp đỡ. Rất cảm ơn.
Tổng quát thì để làm "cái việc" theo yêu cầu của bạn công việc cụ thể như sau:
_Quét và kiểm tra các giá trị theo yêu cầu.
_Đưa các giá trị vào sheet khác theo yêu cầu của bạn.

Đoạn code ví dụ như sau:
Sub Copy()
Dim iValue as Integer, iValueCom as Integer
Dim i as Integer, j as Integer
Dim iValueCopy1 as Integer, iValueCopy2 as Integer
For i=1 To 10 ' Giả sử tôi quét 10 hàng mà thôi
'Lấy giá trị và so sánh
'Giả sử giá trị ở cột 1 và sheet 1 sẽ so sánh với giá trị cột 2
iValue=WorkSheets("Sheet1").Range("A1").Offset(i-1,0)
iValueCom=WorkSheets("Sheet1").Range("A1").Offset(i-1,1)
iValueCopy1=WorkSheets("Sheet1").Range("A1").Offset(i-1,2)
iValueCopy2=WorkSheets("Sheet1").Range("A1").Offset(i-1,3)
if iValue=iValueCom then
'Bắt đầu copy
WorkSheets("Sheet2").Range("A1").Offset(j,0)=iValueCopy1
WorkSheets("Sheet2").Range("A1").Offset(j,1)=iValueCopy2
j=j+1
End If
'nếu bạn muốn nhìn kết quả thì bạn dùng đoạn code sau
WorkSheets("Sheet2").Range("A1").Select
Next i
End Sub

Bạn cũng có thể dùng cấu trúc
With WorkSheets("Sheet2").Range("A1")
'Code của bạn ở đây
End with
để viết gọn lại.
Trong ví dụ trên bạn sẽ không dùng phương thức Select cho tới khi bạn muốn xem kết quả cuối cùng.
Trong trường hợp dữ liệu của bạn có nhiều công thức thì bạn nên thêm một vài đoạn code ở đầu và cuối thủ tục ở trên nhằm tăng tốc độ chương trình.
Bạn có thể tham khảo tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=37
Thân,

Lê Văn Duyệt
 
P

Peter_Donh

Guest
14/12/16
2
0
1
33
Hi all,
Mình làm trong sản xuất nên cần theo dõi quá trình tiến triển ra sao.
Mình có một sheet Master Plan và muốn copy có chọn lọc sang sheet Production Status theo những điều kiện sau:
-Theo từng line (Chỉ có một số line mình cần theo, không cần hết tất cả)
-Dữ liệu bên sheet Production status thay đổi theo Master plan khi có update, nhưng đồng thời vẫn giữ nguyên các giá trị cũ trước đó
Mình nghĩ theo hướng là sẽ làm nhiều sheet Master Plan và Sheet Production Status sẽ copy theo. Nhưng như vậy không được gọn cho lắm vì hàng tháng mình có 4 sheet Master Plan.
Cảm ơn!!!
 

Đính kèm

  • Production status.xls
    1.7 MB · Lượt xem: 99
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Hi all,
Mình làm trong sản xuất nên cần theo dõi quá trình tiến triển ra sao.
Mình có một sheet Master Plan và muốn copy có chọn lọc sang sheet Production Status theo những điều kiện sau:
-Theo từng line (Chỉ có một số line mình cần theo, không cần hết tất cả)
-Dữ liệu bên sheet Production status thay đổi theo Master plan khi có update, nhưng đồng thời vẫn giữ nguyên các giá trị cũ trước đó
Mình nghĩ theo hướng là sẽ làm nhiều sheet Master Plan và Sheet Production Status sẽ copy theo. Nhưng như vậy không được gọn cho lắm vì hàng tháng mình có 4 sheet Master Plan.
Cảm ơn!!!
Thế thì làm 1 đoạn Macro với inputbox là gõ số dòng cần lấy từ bên sheet kia. Khi dữ liệu thay đổi thì sẽ update lại
Và còn số liệu (tức số cột ghi sang) thì như thế nào? Bên sheet Product status ít trường hơn và có những trường bên sheet master plan không có
 
P

Peter_Donh

Guest
14/12/16
2
0
1
33
Thế thì làm 1 đoạn Macro với inputbox là gõ số dòng cần lấy từ bên sheet kia. Khi dữ liệu thay đổi thì sẽ update lại
Và còn số liệu (tức số cột ghi sang) thì như thế nào? Bên sheet Product status ít trường hơn và có những trường bên sheet master plan không có


Sr mình giải thích chưa rõ ràng, mình chỉ cần copy những dữ liệu liên quan tới Line, BPO date, JO#, BPO qty, và Allocated qty từ master plan sang Production status. Vì mình chỉ cần những dữ liệu thô đó, phần việc chính là bên Production Status mình sẽ xử lý sau.
Mình chỉ biết dùng những hàm excel cơ bản thui nên nghe Marco thấy shock :)
 

Xem nhiều

Webketoan Zalo OA