Giúp tạo code để fill 1( hoặc nhiều) hàng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

matran25251325

Thành viên tiêu biểu
Tham gia
13/1/11
Bài viết
424
Được thích
39
Ở sheet (TLuong DT) khi em tra được 2 ( hoặc nhiều) mã hiệu, thì bên sheet (DG DT XD TRUOC THUE) em thường làm thủ công bằng cách bôi đen từ A11 đến S11 rồi kéo xuống. Ai giúp em viết code ( có nút lệnh) , và khi nhấp vào nút lệnh đó thì nó tự fill xuống. Em có ghi lại macro, nhưng chưa hiểu để viết ra 1 code.

Sub Fill()
'
' Fill Macro
' Macro recorded 2/15/2013 by User
'

'
Selection.AutoFill Destination:=Range("A11:S12"), Type:=xlFillDefault
Range("A11:S12").Select

End Sub

http://www.mediafire.com/?mulvdj9tkwtgslf
 
Ở sheet (TLuong DT) khi em tra được 2 ( hoặc nhiều) mã hiệu, thì bên sheet (DG DT XD TRUOC THUE) em thường làm thủ công bằng cách bôi đen từ A11 đến S11 rồi kéo xuống. Ai giúp em viết code ( có nút lệnh) , và khi nhấp vào nút lệnh đó thì nó tự fill xuống. Em có ghi lại macro, nhưng chưa hiểu để viết ra 1 code.

Sub Fill()
'
' Fill Macro
' Macro recorded 2/15/2013 by User
'

'
Selection.AutoFill Destination:=Range("A11:S12"), Type:=xlFillDefault
Range("A11:S12").Select

End Sub

http://www.mediafire.com/?mulvdj9tkwtgslf

Bạn thử thế này nhé

[A11:S12].FillDown
 
Upvote 0
Anh quanghai có thể giúp em tạo 1 nút lệnh và thao tác trên nút lệnh đó được không ( giống như Form)?
 
Upvote 0
mình có một đề nghị như vậy, bạn thử kết hợp vào đoạn code cho button chọn

Private Sub CommandButton2_Click()
With Selection
.Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
.Offset(, 1).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
.Offset(, 2).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
End With
Call Fill
End Sub

và tạo thêm một module Fill

Sub Fill()
Application.ScreenUpdating = False
Sheet7.Select
Range([A5000].End(xlUp), [A5000].End(xlUp).Offset(1, 18)).FillDown
Sheet1.Select
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Code báo lỗi khúc này bác:
Private Sub CommandButton2_Click()
With Selection
.Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
.Offset(, 1).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
.Offset(, 2).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
End With
Call Fill
End Sub

Nếu vậy bác giúp em tạo form bên sheet "
DG DT XD TRUOC THUE" để sử dụng có vẻ hay hơn sheet TLuong DT.
 
Upvote 0
Quái lạ lúc thì fill đúng, lúc thì fill thiếu. **~** T
 
Lần chỉnh sửa cuối:
Upvote 0
Cách anh nhapmon oke rồi, nhưng có cách nào tạo form bên sheet (DG DT XD TRUOC THUE) không? Em nghĩ nếu làm các phần việc bên sheet (TLuong DT) thì qua sheet (DG DT XD TRUOC THUE) chỉ cần nhấp vào form nó sẽ tự fill. Với lại em vẫn còn 2 sheet tương tự như thế (cũng fill xuống) nên em muốn áp dụng form ở 2 sheet kia luôn.
 
Upvote 0
thì bạn tạo ra một button ở sheet "DG DT..." rồi gán macro fill vào.
tuy nhiên vấn đề là ở chổ, ko biết bên sheet "TLuong...." bạn tạo ra bao nhiêu dữ liệu mới, như vây bạn phải tính xem có bao nhieu dữ liệu mới được tao ra để qua sheet này bạn fill xuống bao nhiêu dòng.
mình làm biếng tính quá nên đề nghị như vậy.
ở đoạn code cho button chọn, bạn thêm một chút nữa khi bạn chọn thì nó ghi luôn vào 2 sheet
Private Sub CommandButton2_Click()
With Selection
.Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
.Offset(, 1).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
.Offset(, 2).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
Sheet7.[a50000].End(xlUp).Offset(1, 0).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
End With
End Sub

rồi ở module fill thì nó sẻ căn cứ vào số liệu ở cột A mà fill xuống.

Sub Fill()

Application.ScreenUpdating = False


Range([b5000].End(xlUp), "S" & [A5000].End(xlUp).Row).FillDown
Application.ScreenUpdating = True

End Sub

mà sao bạn ko xài macro hết đi, mà phải xài công thức rồi phải fil xuống.
mình thấy code bạn cũng pro lắm rồi còn gì nửa
 
Upvote 0
Dữ liệu mới thì còn tùy vào công trình có nhiều phần việc hay không, nên cách trên cũng chưa tối ưu lắm.
Ví dụ: Khi sheet TLuong thực hiện phần việc như sau:
I) Xây đúc:
AE.23456
AF.11111
II) Phần đất = Thủ công:
AB.12345
III) Phần đất = Máy:
AB.44444
thì khi qua sheet DG DT... ta nhấp Form nó sẽ Fill xuống (Phần I, II, III sẽ không fill công thức)
Nếu anh giúp được em thì tốt quá.
 
Upvote 0
mình không hiểu được ý bạn cho lắm, nhưng cũng thử xem
bạn xem vậy được chưa.
tuy nhiên mình vẫn cảm thấy bạn nên dùng macro cho sheet DG DT thay vì phải fill công thức
 

File đính kèm

Upvote 0
-=.,, Nếu Viết được Macro thì em dùng công thức và Fill làm gì cho nặng file và mệt. Nếu được anh viết giùm macro thì tôt biết mấy.
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi sao code trên đánh chữ nào đó ở vị trí cột A sheet TLuong thì bị báo lỗi:
iHang = Application.WorksheetFunction.Match(Target, Vung, 0)
 
Upvote 0
Cho em hỏi sao code trên đánh chữ nào đó ở vị trí cột A sheet TLuong thì bị báo lỗi:
iHang = Application.WorksheetFunction.Match(Target, Vung, 0)

bạn thêm 2 dòng lệnh này vào code của bạn

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ErrHandler
Application.EnableEvents = False


Dim Vung As Range, iHang As Long, iNhay As Long
Dim Cll As Range
If Not Intersect(Target, [A4:A65536]) Is Nothing Then
If Target.Count = 1 Then
Set Vung = Sheets("MAUCHUAN").Range(Sheets("MAUCHUAN").[B10], _
Sheets("MAUCHUAN").[B10000].End(xlUp)).Offset(, -1)
iHang = Application.WorksheetFunction.Match(Target, Vung, 0)
iNhay = IIf(Vung(iHang + 1) <> "", 1, Vung(iHang).End(xlDown).Row - Vung(iHang).Row)
Vung(iHang).Offset(, 1).Resize(iNhay, 17).Copy Target.Offset(, 1)
If iNhay > 1 Then
End If
End If
End If

ErrHandler:
Application.EnableEvents = True


End Sub
 
Upvote 0
oke tốt quá. Em lấy code ở module thay cột để ứng dụng cho 2 sheet còn lại đều oke rồi. Nhưng ko bít xài có bao lỗi gì không nữa. Nếu rãnh anh viết giùm em macro thì em cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Bổ sung giùm em điều kiện khi cột C đến cột R (sheet TLuong DT) của hàng nào đó là trống thì bên sheet DG DT.. khi fill xuống thì cột C đến cột S của hàng đó là trống (phần tô vàng).
http://www.mediafire.com/?240uzq6cq8idcsz
Vấn đề này thì bạn cứ sửa công thức là được thôi mà
VD tại C3=VLOOKUP(A13;'TLuong DT'!$A$9:$H$492;3;0)
Sửa thành: =IF(MID(A13;3;1)=".";VLOOKUP(A13;'TLuong DT'!$A$9:$H$492;3;0);"")
 
Upvote 0
Bạn xem giùm mình cột P sheet DG DT.. nếu đưa hàm IF(MID..) như trên thì phải sửa như thế nào?
=IF(MID(A13,3,1)=".",VLOOKUP('Trang chủ'!$H$5,$W$8:$Z$9,4,0)%,"")*O13 (lỗi #Value!)
 
Upvote 0
Bạn xem giùm mình cột P sheet DG DT.. nếu đưa hàm IF(MID..) như trên thì phải sửa như thế nào?
=IF(MID(A13,3,1)=".",VLOOKUP('Trang chủ'!$H$5,$W$8:$Z$9,4,0)%,"")*O13 (lỗi #Value!)
Mình làm ví dụ tại 1 cell, bạn tự làm tiếp chứ, hơn nữa bạn đưa O13 nhân trực tiếp vào vào kết quả của hàm VLOOKUP(), không nên nhân với với kết quả của hàm IF
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom