Xin giúp em tạo hàm lấp đầy ô trống = giá trị của ô liền trên nó !!

Liên hệ QC

ducky2301

Thành viên chính thức
Tham gia
25/3/08
Bài viết
74
Được thích
15
Do công việc rất thường xuyên phải lấp đầy các Cell trống = với giá trị của Cell liền trên nó. Nên xin các Thầy giúp em tạo 1 Macro hay Add ins (là cái mà nằm trên thanh công cụ đó để khi tạo 1 file mới là có nó đó) sao cho khi em chọn 1 Cột và chạy lệnh đó thì nó sẽ tìm trong Cột đó nhưng Cell nào trống thì nó sẽ gán giá trị cho những Cell đó = giá trị của Cell liền trên Cell đó.
Các Thầy coi file ví dụ em gửi lên và giúp em với nha. xin cám ơn các thầy nhiều.
 

File đính kèm

  • vidu.xls
    18 KB · Đọc: 35
Do công việc rất thường xuyên phải lấp đầy các Cell trống = với giá trị của Cell liền trên nó. Nên xin các Thầy giúp em tạo 1 Macro hay Add ins (là cái mà nằm trên thanh công cụ đó để khi tạo 1 file mới là có nó đó) sao cho khi em chọn 1 Cột và chạy lệnh đó thì nó sẽ tìm trong Cột đó nhưng Cell nào trống thì nó sẽ gán giá trị cho những Cell đó = giá trị của Cell liền trên Cell đó.
Các Thầy coi file ví dụ em gửi lên và giúp em với nha. xin cám ơn các thầy nhiều.
Bạn xem file đính kèm thử nhé
 

File đính kèm

  • vidu(1).xls
    39.5 KB · Đọc: 54
Upvote 0
Thầy NDU giúp em chỉnh lại với ?
1. Em muốn là khi thao tác thì em chỉ chọn Cột thôi, ko phải quét vùng. Code của viehoai khi chọn cột và chạy thì phát sinh lỗi do từ Cell A1 -> Cell A3 không có giá trị
2. Vấn đề Cell cuối cùng như THầy Ndu phát hiện đó, mình có thể nào cho nó kiểm tra xem nếu Cell của cột kế bên (Cột B) có giá trị thì tại Cột được chọn (Cột A) sẽ gán tiếp giá trị như yêu cầu. Còn nếu Cell của cột kế bên đó không có giá trị thì ngừng lại.

3. Các Thầy giúp em tạo Hàm đó thành 1 công cụ trong Excel luôn với (em quên tên gọi là gì gọi) đại khái là giống như trên Thanh Menu (File, Edit,View,Insert.......) đó. Để khi tạo 1 file Excel mới là cũng có nó luôn, không phải mất công copy code từ file này qua file mới đó.

Các Thầy giúp em với nha, cám ơn các Thầy.
 
Lần chỉnh sửa cuối:
Upvote 0
Các Thầy giúp em với, em cần cái này lắm.
 
Upvote 0
Các Thầy giúp em với, em cần cái này lắm.
Tôi chưa hiểu câu này của bạn:
Thầy NDU giúp em chỉnh lại với ?
1. Em muốn là khi thao tác thì em chỉ chọn Cột thôi, ko phải quét vùng..
Bạn giải thích rõ và có file đính kèm thực tế sẽ có người giúp bạn thôi.. Nói chung, chủ đề này chẳng phải thuộc dạng khó khăn gì
 
Upvote 0
Tôi chưa hiểu câu này của bạn:
quote_icon.png
Nguyên văn bởi ducky2301
Thầy NDU giúp em chỉnh lại với ?
1. Em muốn là khi thao tác thì em chỉ chọn Cột thôi, ko phải quét vùng..


Bạn giải thích rõ và có file đính kèm thực tế sẽ có người giúp bạn thôi.. Nói chung, chủ đề này chẳng phải thuộc dạng khó khăn gì

_ Ý của em là khi thao tác, em chỉ việc click chọn cả cột thôi, ko phải quét vùng, vì dữ liệu lên đến hơn 1.000 dòng, nếu phải quét vùng thì lâu lắm.!$@!!
_ Còn về dữ liệu thực tế thì em không up được, vì chính em cũng ko được đem dữ liệu về nhà nữa mà.&&&%$R
_ Em cũng xin thông báo là em đã làm được trường hợp trên rồi.@$@!^% Code như sau :-\\/.

Mã:
Sub FillDownEmptyCell()
Dim Cls As Range
For Each Cls In Selection
  If Cls = "" And Cls.Offset(0, 1).Value <> "" Then
    Cls.FillDown
  End If
Next
End Sub
_ Chỗ Cls.Offset(0,1) số 1 hay 2 thì em thay đổi khi chọn cột A hay B, nếu chọn A thì để 2, chọn B thì để 1. Nhưng mà em là 2 Code, 1 cái cho cột A và 1 cho cột B luôn.
_ Hiện tại em còn 1 code chưa biết làm, điều kiện để làm code em đã trình bày trong file, các Thầy down về xem rồi giúp em với nha. Cám ơn các Thầy nhiều.}}}}}
 

File đính kèm

  • vidu 2.xls
    49 KB · Đọc: 20
Lần chỉnh sửa cuối:
Upvote 0
_ Ý của em là khi thao tác, em chỉ việc click chọn cả cột thôi, ko phải quét vùng, vì dữ liệu lên đến hơn 10.000 dòng, nếu phải quét vùng thì lâu lắm.!$@!!
_ Còn về dữ liệu thực tế thì em không up được, vì chính em cũng ko được đem dữ liệu về nhà nữa mà.&&&%$R
_ Em cũng xin thông báo là em đã làm được trường hợp trên rồi.@$@!^% Code như sau :-\\/.

Mã:
Sub FillDownEmptyCell()
Dim Cls As Range
For Each Cls In Selection
  If Cls = "" And Cls.Offset(0, 1).Value <> "" Then
    Cls.FillDown
  End If
Next
End Sub
_ Chỗ Cls.Offset(0,1) số 1 hay 2 thì em thay đổi khi chọn cột A hay B, nếu chọn A thì để 2, chọn B thì để 1. Nhưng mà em là 2 Code, 1 cái cho cột A và 1 cho cột B luôn.
_ Hiện tại em còn 1 code chưa biết làm, điều kiện để làm code em đã trình bày trong file, các Thầy down về xem rồi giúp em với nha. Cám ơn các Thầy nhiều.}}}}}
Code vậy chưa chắc đã ngon! Bạn có nghĩ đến trường hợp phải fill công thức không? (vì dữ liệu đâu phải chỉ có value thôi)
Tôi nghĩ code sẽ vầy:
PHP:
Sub FillDown()
  Dim sArray, i As Long, j As Long
  On Error Resume Next
  With Intersect(Selection.Parent.UsedRange, Selection)
    sArray = .FormulaR1C1
    For i = 1 To UBound(sArray, 1)
      For j = 1 To UBound(sArray, 2)
        If sArray(i, j) = "" And sArray(i - 1, j) <> "" Then sArray(i, j) = sArray(i - 1, j)
      Next
    Next
    .Formula = sArray
  End With
End Sub
Với code này, công thức sẽ được bảo toàn và tốc độ làm việc cũng rất nhanh... Ngoài ra, thích chọn bao nhiêu cột tùy ý
 
Upvote 0
Code vậy chưa chắc đã ngon! Bạn có nghĩ đến trường hợp phải fill công thức không? (vì dữ liệu đâu phải chỉ có value thôi)
Tôi nghĩ code sẽ vầy:
PHP:
Sub FillDown()
  Dim sArray, i As Long, j As Long
  On Error Resume Next
  With Intersect(Selection.Parent.UsedRange, Selection)
    sArray = .FormulaR1C1
    For i = 1 To UBound(sArray, 1)
      For j = 1 To UBound(sArray, 2)
        If sArray(i, j) = "" And sArray(i - 1, j) <> "" Then sArray(i, j) = sArray(i - 1, j)
      Next
    Next
    .Formula = sArray
  End With
End Sub
Với code này, công thức sẽ được bảo toàn và tốc độ làm việc cũng rất nhanh... Ngoài ra, thích chọn bao nhiêu cột tùy ý

_ Hix, Code của Thầy Ndu quả là hoành tráng, em chỉ mài mò và bắt chước code của diễn đàn nên chỉ làm được như vậy thôi.
_ Mà sao code dài hơn của em mà tốc độ xử lý lại nhanh hơn vậy ta -\\/., phục Thầy thiệt.
_ Thầy hướng dẫn giúp em cái trường hợp 2 với. Vì không hiểu về code trong VB nên em suy nghĩ hoài cũng ko biết phải bắt đầu như thế nào.
_ Như trường hợp 1, nhờ có Thầy viehoai mở đầu = code For Each nên em mới hiểu và mài mò theo kiểu như Thầy Ndu nói là cứ thử record macro xem thế nào, và phát hiện ra cái lệnh Filldown đó --=0.
_ Xin Thầy Ndu giúp em trường hợp 2 với nha, cám ơn Thầy nhiều -\\/.
_ À, Thầy cho em hỏi là em muốn lấy giá trị dòng hoặc cột của Cell đã chọn (= lệnh Selection) thì làm sao ? Ví dụ như chọn Cell C5, em muốn lấy giá trị dòng là 5 và Cột là C riêng ra thì làm sao ạ ?
 
Lần chỉnh sửa cuối:
Upvote 0
_ Xin Thầy Ndu giúp em trường hợp 2 với nha, cám ơn Thầy nhiều -\\/.
_ À, Thầy cho em hỏi là em muốn lấy giá trị dòng hoặc cột của Cell đã chọn (= lệnh Selection) thì làm sao ? Ví dụ như chọn Cell C5, em muốn lấy giá trị dòng là 5 và Cột là C riêng ra thì làm sao ạ ?
- Trường hợp 2 là cái gì?
- Vị trí dòng của Selection là Selection.Row và vị trí cột của Selection là Selection.Column
 
Upvote 0
_ Hiện tại em còn 1 code chưa biết làm, điều kiện để làm code em đã trình bày trong file, các Thầy down về xem rồi giúp em với nha. Cám ơn các Thầy nhiều.
 

File đính kèm

  • vidu 2.xls
    51 KB · Đọc: 7
Upvote 0
Web KT
Back
Top Bottom