Kiểm tra 1 cell có chứa dữ liệu hay ko.

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

Huunhat

Guest
20/11/05
10
0
0
39
Hà Nội
Các bạn cho hỏi làm thế nào dùng VBA để kiểm tra đc cái này.Ko hiểu sao WorkSheetFunction lại ko có hàm IsBlank.
 
Khóa học Quản trị dòng tiền
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Các bạn cho hỏi làm thế nào dùng VBA để kiểm tra đc cái này.Ko hiểu sao WorkSheetFunction lại ko có hàm IsBlank.

Bạn có thể sử dụng property của range là Value hoặc formular.

if Cell.Value = space(0) then
if cell.formular = space(0) then
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Bạn thử đoạn code này tại vùng "A2:B9" với đủ loại dữ liệu

Trong vùng nên có ô để trống, ô nhập 1 khoảng trắng & chạy macro xem sao
Option Explicit

Sub Is_Empty()

Sheets("S1").Select: Dim Rng As Range, StrC As String
For Each Rng In Range("A2:B9")
StrC = Rng.Address
If IsEmpty(Rng) Then MsgBox "IsEmpty", , StrC
If IsNull(Rng) Then MsgBox "IsNull", , StrC
If Rng.Value = "" Then MsgBox "IsBlanl", , StrC
If Rng.Value = " " Then MsgBox "?", , StrC
Next Rng

End Sub
:angel:
 
H

Huunhat

Guest
20/11/05
10
0
0
39
Hà Nội
Các bạn xem hộ đoạn code thế này sao lại bị lỗi nhé.
do while activecell.offset(-1) <>"" and activecell.offcell(-2)<>""
activecell=activecell.offset(-1)+activecell.offset(-2)
activecell(0,-1).active
loop
Đoạn này sẽ kiểm tra xem 2 ô bên cạnh có chứa dữ liệu không nếu có chứa dữ liệu thì tính tổng rồi ghi vào ô Active. Trước khi chạy lệnh trong hàm Do thì đã kiểm tra rồi vậy mà nếu 2 ô ở phía dưới trống thì ô Active cùng hàng lại trả về giá trị true. Có cách nào khắc phục không.
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Do while activecell.offset(-1) <>"" and activecell.offcell(-2)<>""
activecell=activecell.offset(-1)+activecell.offset(-2)
activecell(0,-1).active
loop
Mình thử diễn dịch 3 dòng lệnh của bạn, sẽ như sau:
1* Thực hiện đến khi nào 2 đkiện sau đây còn thõa:
- Ô trên ô hiện hành là <> trống
- Ô trên ô hiện hành 2 ô là <> trống
2* Dữ liệu ô HHành = tổng của chúng
3* Dòng này bảo Excel chuyển sang ô cùng hàng nhưng bên trái (!)
' * * * * * * * * * * * * * *
Còn những gì bạn muốn là kiểm xem 2 ô bên cạnh; nếu vậy phải là:
* activecell.offset(,-1) Là bên cạnh trái
* activecell.offset(, 1) Là bên cạnh phải
Một vấn đề nữa: activecell(0,-1).active cũng hơi bị lạ; bạn xem lại
Theo mình là activecell(1).active nếu muốn duyệt theo 1 cột (!)
 
H

Huunhat

Guest
20/11/05
10
0
0
39
Hà Nội
Đơn giản thế này nhé:
Có 3 cột A,B,C. Người sử dụng đặt chuột ở cột C, yêu cầu khi chạy nó sẽ kiểm tra xem cột A,B có dữ liệu hay không, nếu có thì tính tổng và ghi vào cột C, cứ như thế chạy xuống các hàng dưới và làm tương tự. Code trên đoạn bạn bảo sai thì ko phải, nó đúng rồi. Chỉ nhầm ở chỗ activecell(0,-1).active phải là activecell(0,1).active để cho nó chạy tiếp xuống hàng dưới. Cái mình thắc mắc là mình dùng do while nó kiểm tra điều kiện trước rồi mới thực hiện lệnh. Vậy nếu 2 ô ở cột A,B đã trống rồi thì nó bỏ qua luôn vậy tại sao cột C vẫn đc gán giá trị là True.
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Có 3 cột A,B,C. Người sử dụng đặt chuột ở cột C, yêu cầu khi chạy nó sẽ kiểm tra xem cột A,B có dữ liệu hay không, nếu có thì tính tổng và ghi vào cột C, cứ như thế chạy xuống các hàng dưới và làm tương tự. Code trên đoạn bạn bảo sai thì ko phải, nó đúng rồi. Chỉ nhầm ở chỗ activecell(0,-1).active phải là activecell(0,1).active để cho nó chạy tiếp xuống hàng dưới. Cái mình thắc mắc là mình dùng do while nó kiểm tra điều kiện trước rồi mới thực hiện lệnh. Vậy nếu 2 ô ở cột A,B đã trống rồi thì nó bỏ qua luôn vậy tại sao cột C vẫn đc gán giá trị là True.
/(hông chỉ nhầm 1 chổ đâu! Vẫn là nhầm mà phải là: /)/ều xét cột A & B từ cột C :activecell.offset(,-2) - cột A & activecell.offset(,-1) - cột B

Bạn thử đoạn code này xem sao:

Range("A2").Select
Do while activecell.Value <>""
activecell.Offset(,2) =activecell.offset(,1) + activecell.Value
activecell(1).active
loop
Msgbox ActiveCell.Address
 
Sửa lần cuối:
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Chân phương nhất đây:

Option Explicit
Sub SumABToC()

Dim iJ As Long: iJ = 1
Application.ScreenUpdating = False
Do
iJ = iJ + 1: Range("A" & iJ).Select
If ActiveCell.Value = "" Then Exit Do
ActiveCell.Offset(, 2) = ActiveCell.Offset(, 1) + ActiveCell.Value
Loop
End Sub
:pepsi::bigok::freddy:
 
H

Huunhat

Guest
20/11/05
10
0
0
39
Hà Nội
Nhầm thật rồi. Như vậy nó sẽ chạy theo cột chứ không phải theo hàng. Không biết làm theo 2 bác liệu ô C có bị gán giá trị true không. Để tui về thử xem đã vậy. Ai giải thích hộ mình cái Do While ... loop với sao nó lại vẫn thực hiện lệnh khi điều kiện đã sai rồi.
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Do while MMM>2
. . . .
Loop
/(hác với:
Do Until MMM>2
. . . .
Loop
Là hai cái khác nhau,!
 

Xem nhiều