huonglien1901
GPE là ngôi nhà thứ 2 của tôi!!!
- Tham gia
- 17/4/16
- Bài viết
- 2,701
- Được thích
- 2,434
- Giới tính
- Nam
- Nghề nghiệp
- Nhân viên kỹ thuật in ấn
Chị nói rõ hơn chút được hem em chưa hiểu ý chị muốnChào mọi người!
Em có vấn đề nhờ mọi người hố trợ.
Em muốn fill hết công thức khi gặp các ô chứa dữ liệu,(trong sheet 2 em có nêu yêu cầu)
Em cảm ơn mọi người nhiều!
Ý là khi sử dụng công thức tham chiếu khi kéo xuống thì gặp dòng có dữ liệu nó dừng lại. Ý là có cách nào làm nhanh nhất không? Và kéo xuống tiếp gặp dòng có dữ liệu nơ dừng lại.Chị nói rõ hơn chút được hem em chưa hiểu ý chị muốn
'Để sử dụng phím tắc đặt sub OnKeyFillBlank vào sự kiện Workbook Open'
'Hoặc chạy sub OnKeyFillBlank bằng tay
Sub OnKeyFillBlank()
Application.OnKey "^+q" , "test_FillBlank"
'Phím tắt Ctrl + Shift + q'
' Đặt Application.OnKey "^+q" , "" để xóa phím tắt
'Chú ý Không thay đổi các phím tắt của Excel
End Sub
Sub test_FillBlank()
FillBlank RngA:=[a2], Rupt:=True ', RngF:=[b2]
'Rupt = True thì chỉ copy đến khi gặp ô chứa dữ liệu hoặc công thức đầu tiên sẽ dừng
'Nếu RngF bỏ trống thì RngF sẽ là cells nằm sau RngA
'Để thể thực hiện ở 2 trang tính : FillBlank RngA:=Sheet1.[a2] , RngF:=Sheet2.[b2], Rupt:=True
End Sub
Sub FillBlank(RngA As Range, Optional ByVal RngF As Range, _
Optional ByVal Rupt As Boolean = False)
Dim LRow&, TRow&, Col&, Rng, Rngs, isRupt As Boolean
TRow = RngA.Row: Col = RngA.Column
With RngA.Parent
If RngF Is Nothing Then
Set RngF = .Cells(TRow, Col + 1)
End If
LRow = .Cells(Rows.Count, Col).End(xlUp).Row
Set Rngs = RngF.Parent.Range(RngF, RngF.Parent.Cells(LRow, RngF.Column))
For Each Rng In Rngs
If Rng.Formula = "" Then
If Not isRupt Then isRupt = True
Rng.Formula = RngF.FormulaR1C1
Else
If isRupt And Rupt Then Exit Sub
End If
Next Rng
End With
Set Rngs = Nothing
End Sub
Dữ liệu của mình khoảng 35000 dòng đó. Có cách nào hay hơn không?Nếu dữ liệu không quá lớn, đơn giản nhất bạn có thể làm như sau:
- B1: Copy công thức đó
- B2: chọn vùng dữ liệu chứa các khoảng trống cần paste công thức vào (ví dụ trong file mẫu là B2:B49)
bước này nếu bạn biết sử dụng các phím tắt di chuyển & bôi đen thì thao tác sẽ rất nhanh
- B3: nhấn Ctrl + G > Special > Blanks (bước này dùng để chọn các ô trống cần paste công thức)
- B4: nhấn Ctrl + V => done
Như bài 4 của anh HesanBiDữ liệu của mình khoảng 35000 dòng đó. Có cách nào hay hơn không?
Sub test_FillBlank()
FillBlank RngA:=[a2], Rupt:=False 'Chỉnh True thành False
End Sub
Sub FillBlank(RngA As Range, Optional ByVal RngF As Range, _
Optional ByVal Rupt As Boolean = False)
Dim LRow&, TRow&, Col&, Rng, Rngs, isRupt As Boolean
TRow = RngA.Row: Col = RngA.Column
With RngA.Parent
If RngF Is Nothing Then
Set RngF = .Cells(TRow, Col + 1)
End If
LRow = .Cells(Rows.Count, Col).End(xlUp).Row
Set Rngs = RngF.Parent.Range(RngF, RngF.Parent.Cells(LRow, RngF.Column))
For Each Rng In Rngs
If Rng.Formula = "" Then
If Not isRupt Then isRupt = True
Rng.Formula = RngF.FormulaR1C1
Else
If isRupt And Rupt Then Exit Sub
End If
Next Rng
End With
Set Rngs = Nothing
End Sub
Anh ơi! Anh có thể tổng quát cho trường hợp dựa vào điều kiện cần tham chiếu.Bạn biết Excel lâu quá nên từ Fill ăn sâu vào tìm thức.
Ý của bạn là copy công thức giống như khi Fill vào các cells trống ở cột B. Cho đến ô cuối cột A có chứa dữ liệu phải không?
Nếu bạn không muốn File Excel của bạn chứa Macro thì làm tạo Add-ins, nếu bạn muốn dùng VBA, Và thêm cho nó 1 phím tắc.
copy code dưới vào một module và lưu dạng xls / xlsb/ xlsm/ xlam/ xla
PHP:'Để sử dụng phím tắc đặt sub OnKeyFillBlank vào sự kiện Workbook Open' 'Hoặc chạy sub OnKeyFillBlank bằng tay Sub OnKeyFillBlank() Application.OnKey "^+q" , "test_FillBlank" 'Phím tắt Ctrl + Shift + q' ' Đặt Application.OnKey "^+q" , "" để xóa phím tắt End Sub Sub test_FillBlank() FillBlank RngA:=[a2], Rupt:=True ', RngF:=[b2] 'Rupt = True thì chỉ copy đến khi gặp ô chứa dữ liệu hoặc công thức đầu tiên sẽ dừng 'Nếu RngF bỏ trống thì RngF sẽ là cells nằm sau RngA 'Để thể thực hiện ở 2 trang tính : FillBlank RngA:=Sheet1.[a2] , RngF:=Sheet2.[b2], Rupt:=True End Sub Sub FillBlank(RngA As Range, Optional ByVal RngF As Range, _ Optional ByVal Rupt As Boolean = False) Dim LRow&, TRow&, Col&, Rng, Rngs, isRupt As Boolean TRow = RngA.Row: Col = RngA.Column With RngA.Parent If RngF Is Nothing Then Set RngF = .Cells(TRow, Col + 1) End If LRow = .Cells(Rows.Count, Col).End(xlUp).Row Set Rngs = RngF.Parent.Range(RngF, RngF.Parent.Cells(LRow, RngF.Column)) For Each Rng In Rngs If Rng.Formula = "" Then If Not isRupt Then isRupt = True Rng.Formula = RngF.FormulaR1C1 Else If isRupt And Rupt Then Exit Sub End If Next Rng End With Set Rngs = Nothing End Sub
Với giá trị dò không cố định thì tôi chưa gặp để viết code trong VBA, vì VBA thì dữ liệu phải ngay hàng thẳng lối.Anh ơi! Anh có thể tổng quát cho trường hợp dựa vào điều kiện cần tham chiếu.
Vlookup(giá trị dò. Bảng dò. Cột dò. Kiểu dò)
Điều kiện ở đây la giá trị dò. Mà giá trị dò không nằm ở cột cố định đó Anh.
Em cảm ơn Anh nhiều!