Cell "RỖNG BÌNH THƯỜNG" và cell "BỊ CÔNG THỨC LÀM CHO RỖNG" có gì khác nhau? (1 người xem)

Liên hệ QC

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Trước tiên chúng nên thống nhất với nhau ở 1 số thuật ngữ dưới đây:
1> Cell "RỖNG BÌNH THƯỜNG" là cell nguyên thủy, chưa có dử liệu gì trong đó... Cell bị Delete cũng xem như là "RỖNG BÌNH THƯỜNG"
2> Ngoài ra còn có những cell rỗng do công thức tạo ra
Vậy xin hỏi giữa 2 loại rỗng này có gì khác biệt?
Tôi làm 1 thí nghiệm sau:
Tại B1 gõ công thức B1=IF(A1<5,"",A1)
Tại D1 gõ công thức D1=C1+B1
Nếu A1 có giá trị từ 6 trở lên thì D1 ko có vấn đề, ngược lại A1<=5 thì D1 nhận giá trị #VALUE. Điều này có thể hiểu dc do B1 bị làm rỗng... Thế nhưng tại sao đễ B1 RỖNG BÌNH THƯỜNG (tức là ko nhập gì vào B1 hoặc Delete B1) thì lại ko sao?
Vậy 2 loại RỖNG này khác nhau thế nào?
Trong quá trình làm việc trên Excel tôi gặp rất nhiều trường hợp tương tự như thế và phải tìm cách "né"... Nhưng tôi lại muốn hiểu rõ vấn đề này hơn. Mong các cao thủ giãi đáp thắc mắc
Mến
ANH TUẤN
 
Theo tôi nghĩ /Cell "RỖNG BÌNH THƯỜNG" / thì ông Excel đã qui đinh nó ngầm định nếu dữ liệu là chuỗi thì là không có chuôi , còn dữ liệu là số thì là số 0(các biến số trong VBA thường nếu chưa gán thì sẽ default là 0)
Còn trong công thức IF(A1<5,"",A1) thì B1 =”” là chuỗi trống (Mytring= “”, không phải là không có chuôi (Mytring=Nothing)
Trong công thức của bạn dĩ nhiên muốn cộng 1 cell là số, 1 cell là chuỗi trống thì thường dùng toán tử & : =C1&B1 hay =IF(A1<5;C1&B1;C1+B1)
 
Vậy nhờ bạn chỉ giúp có cách nào bằng công thức làm cho cell trở thành "KO CÓ CHUÔI" như bạn nói ko?
Cái này trong đời sống và trong những lỉnh vực kỹ thuật khác tôi cũng thấy khá nhiều trường hợp tương tự: Màu trắng tự nhiên khác với cái ta cố ý làm cho nó trắng... Trong kỹ thuật điện, đạt dc công suất phản kháng = 0 là tuyệt hảo, tuy nhiên: tự nó = 0 khác với cái ta dùng máy móc làm nó = 0... Ái chà... Hấp dẩn nhỉ?
ANH TUẤN
 
Thật khó giải thích cell không có giá trị và cell là chuỗi rổng. Nhưng anhtuan1066 phải xác định điều này: cố gắng tránh tình trạng dữ liệu trong 1 trường (cột) có 2 loại dữ liệu. Ví dụ như công thức tại B1 gõ công thức B1=IF(A1<5,"",A1) tức là cột B có 2 loại dữ liệu là số và chuỗi. Do đó bạn nên chỉnh lại là =IF(A1<5,0,A1).
Nhưng bạn lại thấy số 0 xuất hiện vô duyên quá, bạn hãy dùng định dạng Format > Cells > Number > Custom và nhập vào Type:
#.##0;-#.##0;;@
Kết quả là nếu số dương, số âm thì hiện ra bình thường có dấu chấm ngàn, số không không hiện ra.
định dạng trên có 4 nhóm: nhóm 1 là số dương, nhóm 2 là số âm, nhóm 3 là số không, nhóm 4 là text. Bỏ trống nhóm nào thì nhóm đó không hiện trên màn hình.
Ngoài ra, Format custom còn cho phép định dạng màu của số dương, số âm.
 

File đính kèm

Bạn Long ơi... thật ra đễ "né" lỗi thì tôi biết rồi... Có điều là tôi thật sự ngạc nhiên về 2 loại RỖNG này nên muốn hỏi ý kiến mọi người nhầm có 1 cái nhìn chính xác...
Cái này tôi thấy giống: "CHAI BIA RỖNG CÓ 2 LOẠI: 1 LÀ RỔNG VÌ CHƯA CÓ CHO BIA VÀO, 2 LÀ VÌ BỊ BẮP UỐNG HẾT NÊN RỖNG"... Vậy nếu có sự khác nhau giữa 2 loại rỗng này có lẽ là ở chổ: Cái rỗng thứ 2 có 1 chút "cặn"... ha.. ha.. Nói nôm na thế ko chừng lại đúng ấy chứ...
Mến
ANH TUẤN
 
Sự khác biệt là như thế nầy. Các bạn bỏ 2 cái ô (B1 & D1) vô cài hàm ISERROR rồi coi kết quả nha.

Vậy mượn ví dụ 2 chai bia rổng của "chủ xị" thì khác biệt là chai đề ở B1 là chai anh chàng Bắp nào nó uống hết trọi còn chai nằm ở D1 là chai chưa từng được qua quá trình sản xuất bôm bia vào và đóng nút khoén. Chủ xị có đồng ý chưa?
 
Rỗng (Blank): là cell mà không có giá trị và công thức nào.
Ví dụ:
A1 = If(1>2,"Đương nhiên","")
Mặc dù A1 chứa chuỗi rỗng nhưng nó không rỗng. Bạn dùng hàm =IsBlank(A1) sẽ cho ra FALSE.

Khi tính toán muốn cho không bị thông bóa lỗi #VALUE! thì các giá trị trong vùng tính phải có giá trị cùng kiểu.

=SUM(A1:A3)
A1=If(B1>4,1,"") -> không nên.
A1=If(B1>3,1,0) -> Ok.
 
anhtuan1066 đã viết:
Trước tiên chúng nên thống nhất với nhau ở 1 số thuật ngữ dưới đây:
1> Cell "RỖNG BÌNH THƯỜNG" là cell nguyên thủy, chưa có dử liệu gì trong đó... Cell bị Delete cũng xem như là "RỖNG BÌNH THƯỜNG"
2> Ngoài ra còn có những cell rỗng do công thức tạo ra
Vậy xin hỏi giữa 2 loại rỗng này có gì khác biệt?
Tôi làm 1 thí nghiệm sau:
Tại B1 gõ công thức B1=IF(A1<5,"",A1)
Tại D1 gõ công thức D1=C1+B1
Nếu A1 có giá trị từ 6 trở lên thì D1 ko có vấn đề, ngược lại A1<=5 thì D1 nhận giá trị #VALUE. Điều này có thể hiểu dc do B1 bị làm rỗng... Thế nhưng tại sao đễ B1 RỖNG BÌNH THƯỜNG (tức là ko nhập gì vào B1 hoặc Delete B1) thì lại ko sao?
Vậy 2 loại RỖNG này khác nhau thế nào?
Trong quá trình làm việc trên Excel tôi gặp rất nhiều trường hợp tương tự như thế và phải tìm cách "né"... Nhưng tôi lại muốn hiểu rõ vấn đề này hơn. Mong các cao thủ giãi đáp thắc mắc
Mến
ANH TUẤN
Trước tiên xin mạn phép bạn nói qua đôi điều về hàm IF, đây thuộc dạng hàm logíc, mà đã logíc khi và chỉ khi các điều kiện của hàm phải thể hiện đầy đủ trong công thức tính của nó. Ở đây có 2 trường hợp:
Trường hợp 1: tính đầy đủ cho công thức trong cả 2 điều kiện, ví dụ:
B1=IF(A1<5,"người lớn","trẻ em")như vậy ở D1=B1+C1 luôn luôn được hiển thị kết quả.
Trường hợp 2: là trong công thức của bạn với ô A1<5 thì ô B1 của bạn là rỗng, rỗng ở đây là do điều kiện của bạn khai là rỗng "" chứ không phải phần mềm tự thể hiện rỗng. Như vậy ô rỗng này vẫn là ô rỗng có điều kiện. Vì vậy tại ô D1=C1+B1 vẫn phải thể hiện phép tính cho công thức của bạn và vì vậy tại đây nó sẽ thể hiện #value là hoần toàn đúng. Bạn có thể hình dung thjế này: 5+trẻ em thì bằng gì đây?
Đôi điều bày tỏ cùng bạn, có gì chúng ta sẽ bàn bạc thêm. Chào thân ái.
 
Tôi mở topic này ko phải muốn hiểu về hàm IF hay bất cứ hàm nào cả... Chỉ muốn hiểu THẾ NÀO LÀ RỖNG thôi... Vậy theo bạn Tuân thì RỖNG do công thức tạo ra ko dc coi là RỖNG sao?
ANH TUẤN
 
anhtuan1066 đã viết:
Tôi mở topic này ko phải muốn hiểu về hàm IF hay bất cứ hàm nào cả... Chỉ muốn hiểu THẾ NÀO LÀ RỖNG thôi... Vậy theo bạn Tuân thì RỖNG do công thức tạo ra ko dc coi là RỖNG sao?
ANH TUẤN

Không có bạn à.
 
Mình xin mạn phép nói theo cách của mình thế này. Khi bạn nhập vào cell một công thức thì bản thân nó đã là không rỗng rồi vì vậy ông Excel xem if(A1<5,"",1) đã bị xem là không rỗng. Giống như người ta chế ra máy bay tàng hình nhưng thực ra nó không tàng hình mà chỉ có rada không nhận ra mà thôi.
 
Cứ cho là nó KO RỖNG như bạn nói đi... vậy tại sao =COUNTBLANK(B1:B3)=3
Nếu B1 ko rỗng như bạn nói thì kết quả phải là 2 chứ nhỉ... ha... ha.. Xem ra nó TÀNG HÌNH còn hơn chiếc máy bay của bạn đấy!
 
anhtuan1066 đã viết:
Cứ cho là nó KO RỖNG như bạn nói đi... vậy tại sao =COUNTBLANK(B1:B3)=3
Nếu B1 ko rỗng như bạn nói thì kết quả phải là 2 chứ nhỉ... ha... ha.. Xem ra nó TÀNG HÌNH còn hơn chiếc máy bay của bạn đấy!
Có lẽ chúng ta phải đi ngược lại : "" có thật sự là rỗng không đã.

VD : Dùng các công thức ở trên A1-->""
hoặc nhập trực tiếp : A1=""

Nhưng khi dùng các hàm đếm blank (countblank, counta chẳng hạn), thì A1 vẫn không coi là rỗng (empty cell).
Bill đã viết:
Cells with formulas that return "" (empty text) are also counted. Cells with zero values are not counted
Vì vậy, bác Bill coi "" không phải là rỗng (empty), mà "" là một ký tự rỗng (empty text)


Nghe có vẻ hơi hơi lạ, như cũng giống như số không, hoặc ngày không thôi.

Đây chính là sự phát triển của toán học hiện đại so với ngày xưa.

VD :
A cho B 0 quả táo
hoặc :
Hôm nay là ngày 0 tháng 5 năm 2007

Nếu với hệ toán học ngày xưa thì đây thật là . . . ngớ ngẩn.
Tuy nhiên, với ngày nay thì rất bình thường.

Thân!
 
Ko đúng... khi B1 bị làm rỗng do công thức thì...
=COUNTA(B1:B3)=1 Tức là nó xem B1 LÀ CÓ DỬ LIỆU
=COUNTBLANK(B1:B3)=3 bây giờ nó lại xem B1 LÀ RỖNG
Bắp giãi thích thế nào đây?
ANH TUẤN
 
anhtuan1066 đã viết:
Ko đúng... khi B1 bị làm rỗng do công thức thì...
=COUNTA(B1:B3)=1 Tức là nó xem B1 LÀ CÓ DỬ LIỆU
=COUNTBLANK(B1:B3)=3 bây giờ nó lại xem B1 LÀ RỖNG
Bắp giãi thích thế nào đây?
ANH TUẤN

Trước hết ta phải hiểu rõ hai khái niệm : blank cell empty cell là hoàn toàn khác nhau.

Khác nhau thế nào ?? Em gọi điện cho Bill, thế là Bill Fax ngay cho em :

Bill Gates đã viết:
COUNTBLANK(range)
Range is the range from which you want to count the blank cells.
Cells with formulas that return "" (empty text) are also counted. Cells with zero values are not counted.
..................................................................................

COUNTA(value1,value2,...)
A value is any type of information, including error values and empty text (""). A value does not include empty cells.



1. Countblank : Đếm trong vùng có bao nhiêu blank cell , ở đó :
  • Cell có giá trị (hoặc bởi công thức) là ký tự rỗng thì cũng gọi là blank cell (được đếm)
  • Cell có giá trị (hoặc bởi công thức) là bằng không thì không gọi là blank cell (không được đếm)
  • Cell rỗng (empty cell) thì cũng được coi là Blank cell (trong trường hợp này)
2. Counta : Đếm tất cả các cell có chứa dữ liệu ở bất kỳ dạng nào, kể cả ký tự rỗng (empty text), ngoại trừ cell rỗng (empty cell)

Điều này nói lên rằng blank cell và empty cell hoàn toàn khác nhau (tất nhiên có những TH thì hai cái giao nhau). Như vậy ta có thể tóm tắt :
  • "" : Ký tự rỗng (empty text)
  • : Không có gì
  • Empty Cell : Cell không có gì :
  • Blank Cell : Cell có giá trị, nhưng giá trị là ký tự rỗng (giá trị dạng chuỗi), hoặc Empty Cell
Hiểu đươc các khái niệm này là cả một vấn đề.


Như vậy, việc tính toán ở đây không sai, cái quan trọng là ta chưa hiểu hết được bản chất của các hàm đó thôi.

Thân!
 
OK... MS xem Blank cell và Empty cell là 2 cái khác nhau... Vậy thì tiếng Việt chúng ta khi nói đến CELL RỖNG là đang nói đến món nào trong 2 món ấy: EMPTY hay BLANK? Và cái còn lại thì gọi là cái gì?
Nếu ko phân biệt cho rõ thì sẽ dễ dẫn đến nhầm lẩn khi truyền đạt kiến thức cho người khác đấy!
Vấn đề này tôi đã thấy từ lâu, tuy nhiên tôi lại ko có năng khiếu sư phạm nên ko biết nói thế nào mới đúng... Nhờ Bắp vậy! Nên chăng có 1 thuật ngữ riêng đễ phân biệt BLANK và EMPTY? Gọi RỖNG thì bố ai mà biết nó là cái chai bia nguyên chưa có bia hay là cái chai bia bị uống hết...
 
anhtuan1066 đã viết:
OK... MS xem Blank cell và Empty cell là 2 cái khác nhau... Vậy thì tiếng Việt chúng ta khi nói đến CELL RỖNG là đang nói đến món nào trong 2 món ấy: EMPTY hay BLANK? Và cái còn lại thì gọi là cái gì?
Nếu ko phân biệt cho rõ thì sẽ dễ dẫn đến nhầm lẩn khi truyền đạt kiến thức cho người khác đấy!
Vấn đề này tôi đã thấy từ lâu, tuy nhiên tôi lại ko có năng khiếu sư phạm nên ko biết nói thế nào mới đúng... Nhờ Bắp vậy! Nên chăng có 1 thuật ngữ riêng đễ phân biệt BLANK và EMPTY? Gọi RỖNG thì bố ai mà biết nó là cái chai bia nguyên chưa có bia hay là cái chai bia bị uống hết...

  • Cell rỗng : Empty Cell : Cell không có bất cứ cái gì trong đó (thuộc về dữ liệu)
  • Cell có giá trị (trả về) là "" : Có giá trị nhưng giá trị là ký tự rỗng
Chúc bác khỏe!!

Thân!
 
Tóm lại gọi nó là gì? Chẳng lẽ tên mà DÀI thế sao? "Có giá trị nhưng giá trị là ký tự rỗng" ???
 
anhtuan1066 đã viết:
Tóm lại gọi nó là gì? Chẳng lẽ tên mà DÀI thế sao? "Có giá trị nhưng giá trị là ký tự rỗng" ???

Bác thật là...
Em diễn giải ra thế thôi.

Nói ngắn gọn :

Nó bằng ""
Vậy "" là gì ?? ; em lại phải nói : Nó là ký tự rỗng (empty text), hay chuỗi rỗng

Ký tự rỗng là TH đặc biệt của ký tự (chuỗi) mà thôi.

VD : A1 = "anhtuan"
Vậy "anhtuan" là gì ??; đó chính là ký tự "anhtuan" hay chuỗi "anhtuan"

Trình độ của em cũng đến vậy, không biết nói thế nào nữa.. . . be be be !!

Thân!
 
Theo tôi hiểu thì tuỳ góc độ nào mà ta nhận xét. Xét về mặt thị giácề thì đó là cell rỗng, xét về dung lượng thì cell đó lại không rỗng. Xin nêu 1 VD gần với cuộc sống: Giả sử bác Anh Tuấn mới có 1 em bé (cháu nội hay ngoại gì đó) nhưng chưa đặt tên thì em bé đó là CHƯA CÓ TÊN. Mấy hôm sau bác Anh Tuấn đặt tên cho em bé đó là Chưa Có Tên, như vậy tên em bé đó là CHƯA CÓ TÊN. Nhưng khi nói tên đó với người bên ngoài thì theo bác người đó có biết được thực ra em bé nhà bác đã được đặt tên hay chưa???
 
Ý tôi ko phải bắt bẽ chuyện TÊN... Tôi thấy MS có phân biệt rõ 2 tên là: BLANK và EMPTY... vậy chẳng lẽ VN mình chưa có... Nếu thế thì khó cho việc dạy và học đấy nhé!
 
Tôi đang tưởng tượng thấy giáo giãng bài cho học sinh và nói rằng: Ô này là 1 ô rỗng (EMPTY)... còn ô kia là 1 ô.. rào (2 dấu "", nghĩa là BLANK)... ha... ha... Nếu thế thì thà đọc nguyên mẫu tiếng Anh còn dễ hiểu hơn... EMPTY và BLANK...
Ai dà.. tiếng Việt... Bởi vậy tôi thà xài Win tiếng Anh chứ nhất định ko thèm xài Win Việt hóa (mặc dù ko rành tiếng Anh lắm)... Điện thoại cũng thế, đễ tiếng Anh còn thấy dễ hiểu hơn... ha... ha...
 
Thực tình không hẳn cái gì dịch ra TV cũng tốt, và ngược lại để nguyên TA cũng tốt. Tuy nhiên dù thế nào đi chăng nữa thì khái niệm về một cái gì đó nhất định phải diễn giải ra Tiếng Việt.

Vô cực là một khái niệm (trong đó có số vô cực và miền vô cực), phép chia 0/0 cũng là một TH phải vận dụng khái niệm để giải thích. Và tất cả mọi thứ đều phải giải nghĩa theo Tiếng Việt. Khi đó tên gọi trở thành không quan trọng, bản chất(được khái quát bởi khái niệm) mới là quan trọng.

Rất khó cho người mới bước vào toán học, nhưng đến một trình độ nào đó thì họ buộc phải hiểu điều này.

Như vậy khái niệm về blank và empty cũng gần như thế.

Ta có thể nói : ô này rỗng, ô này có giá trị rỗng . . . không sao cả. Quan trọng là hiểu cái đó là như thế nào, TH nào thì 2 cái là 1.

Thân!
 
Tất nhiên chúng ta hiểu điều này... dù chỉ nói RỖNG ko thôi, nhưng khi nhìn vào trạng thái 1 cell chúng ta cũng hiểu là mình đang nói đến cái rỗng nào: EMPTY hay cái BLANK... tuy nhiên, ở đây tôi muốn nói đến 1 vấn đề có liên quan đến việc dạy cho người mới học... Ko khéo họ sẽ hiểu lầm, tưởng cái nào cũng như nhau... nền tãng đã sai thì mai này càng sai nhiều hơn..
 
anhtuan1066 đã viết:
Tất nhiên chúng ta hiểu điều này... dù chỉ nói RỖNG ko thôi, nhưng khi nhìn vào trạng thái 1 cell chúng ta cũng hiểu là mình đang nói đến cái rỗng nào: EMPTY hay cái BLANK... tuy nhiên, ở đây tôi muốn nói đến 1 vấn đề có liên quan đến việc dạy cho người mới học... Ko khéo họ sẽ hiểu lầm, tưởng cái nào cũng như nhau... nền tãng đã sai thì mai này càng sai nhiều hơn..

Tiếng Việt thì đơn giản lắm : Chỉ có 2 TH : RỖNG và CÓ GIÁ TRỊ (không rỗng)

Còn blank chỉ là TH đặc biệt của CÓ GIÁ TRỊ thôi mà


Người mới bắt đầu thì sẽ được học như thế nào là sheet, là các ô, là công thức . . , cách sử dụng . . .

Mặc dù nó là nền tảng, nhưng phải ở cấp độ nào đó thì người học mới hiểu được những điều này.

Khi ta học toán, ta sẽ học 1+1=2; rồi sau đó là phép nhân phép chia, số không, số âm, số vô cực, số vô tỷ . . . .

Mặc dù tất cả đều là nền tảng, nhưng không có nghĩa rằng với người mới bắt đầu phải học hết mọi nền tảng đấy. Trong tương lai họ sẽ được học tương đương với cấp độ của họ (để họ còn hiểu chứ)

Học về ngành điện không có nghĩa rằng tất cả các khái niệm nền tảng về điện đều được dạy ngay từ đầu, nào là ion âm, ion dương, nào là phân tử, nào là nguyên tử, nào là hạt cơ bản, nào là vật chất, nào là phản vật chất. Sự tương tác của vật chất và phản vật chất sẽ cho ra dòng điện thế nào, sự phân rã sẽ cho dòng điện thế nào, năng lượng ra sao, rồi điện năng, rồi hao phí, rồi hiệu điện thế, rồi kháng trở . . .

Đấy, nếu mà học hết các điều đó thì có mà . . . chết . . . . vì không hiểu. Cần phải có một trình độ nhất định thì mới dần dần tiếp thu được.

Triết học nói : Phải có sự tích lũy về lượng mới có sự nhảy vọt về chất được.

Thân!
 
Chủ đề này quá hay. Lâu nay tôi cứ hay bị lăn tăn khi dùng các hàm đếm... Cảm ơn anhtuan đã bàn đến vấn đề này.
 
Bạn anhtuan1066 có thể giúp mình khắc phục lỗi cell rỗng trong công thức không đếm giá trị trùng sau khi filter như hướng dẫn bên dưới không. Do trong trường hợp nếu dữ liệu có ô trả về giá trị ="" thì hàm vẫn đếm là 1 (đúng ra phải không đếm).
Cảm ơn bạn.

Sau khi Autofilter thì đếm số (các số trùng nhau thì không).

chẳng hạn: sau khi E lọc TP thì sẽ đếm xem TP có bao nhiêu cụm.
E cam on A trc nhé. A mở file đính kèm, A sẽ dễ hình dung hơn.Thanks A.



- Đặt 2 name
Code:
Rng = Sheet1!$C$3:$C$22

Code:
tmp =SUBTOTAL(103,OFFSET(Rng,ROW(INDIRECT("1:"&ROWS(Rng)))-1,,1,))

(Mục đích đặt name để rút gọn công thức)
- Công thức để đếm:
Code:
=COUNT(1/FREQUENCY(IF(tmp,MATCH(Rng,Rng,0)),IF(tmp,MATCH(Rng,Rng,0))))

Công thức này là công thức mảng, gõ xong phải bấm tổ hợp phím Ctrl + Shift + Enter
Nếu vùng dữ liệu của bạn không giống với file đính kèm, sửa lại tham chiếu trong name Rng nhé
 
Tôi gặp phải vấn đề về "ô rỗng bình thường" và "ô rỗng không bình thường". Các vấn đề được nêu trong file đính kèm. Nhờ các anh chị xem và giúp đỡ. Xin chân thành cảm ơn.
 

File đính kèm

Bạn chạy thử đoạn code này
Mã:
Sub test()
    Debug.Print Sheet10.Range("H1").Value
    Debug.Print VarType(Sheet10.Range("H1").Value)
    Debug.Print TypeName(Sheet10.Range("H1").Value)
    
    Debug.Print Sheet10.Range("H2").Value
    Debug.Print VarType(Sheet10.Range("H2").Value)
    Debug.Print TypeName(Sheet10.Range("H2").Value)
    
    Sheet10.Range("H1").Value = Empty
End Sub
 
Bạn chạy thử đoạn code này
Mã:
Sub test()
    Debug.Print Sheet10.Range("H1").Value
    Debug.Print VarType(Sheet10.Range("H1").Value)
    Debug.Print TypeName(Sheet10.Range("H1").Value)
   
    Debug.Print Sheet10.Range("H2").Value
    Debug.Print VarType(Sheet10.Range("H2").Value)
    Debug.Print TypeName(Sheet10.Range("H2").Value)
   
    Sheet10.Range("H1").Value = Empty
End Sub
Cảm ơn anh ThangCuAnh, nhưng vẫn chưa được anh ạ.
Tui sửa lại như vầy
Sub test()
Debug.Print Sheet10.Range("A1:H1").Value
Debug.Print VarType(Sheet10.Range("A1:H1").Value)
Debug.Print TypeName(Sheet10.Range("A1:H1").Value)

'Debug.Print Sheet10.Range("H2").Value
'Debug.Print VarType(Sheet10.Range("H2").Value)
'Debug.Print TypeName(Sheet10.Range("H2").Value)

Sheet10.Range("A1:H1").Value = Empty
'Sheet10.Range("H2").Value = Empty
End Sub
thì bị lỗi tại dòng màu vàng

219737
 
Sheet của file bạn đang chạy có phải là Sheet10 không, không thì sữa lại.
Đoạn code đó tui viết cho file ORong.xlsx mà bạn up đó
Khổ ghê, có chút xíu đó mà....
Thôi nói nôm na là 1 cell của Excel được lưu trữ trong bộ nhớ là 1 struct VARIANT (kiểu của Windows API), được diễn giãi thông dịch qua Excel, VBA thành kiểu wrapper là Variant
Variant là loại ba phải, chứa đủ kiểu dữ liệu trong ruột nó được hết: Char, Int, Long, Double, String, Object, Empty, Null....
Mặc định là Empty (VT_EMPTY trong Windows API) khi nó mới khởi tạo, chưa ai đụng tới nó gì hết, hay còn gọi là Blank, còn khi nó chứa String (kiểu BSTR trong Windows API) thì nếu len là 0 thì nó là chuỗi rỗng.
Sẵn đây nói luôn, kiểu tương ứng giữa Excel, VB/VBA và Windows API:
Variant = VARIANT
String = BSTR
Array = SAFEARRAY
Object = C++ Object của IUnknown interface.
 
Lần chỉnh sửa cuối:
Sheet của file bạn đang chạy có phải là Sheet10 không, không thì sữa lại.
Đoạn code đó tui viết cho file ORong.xlsx mà bạn up đó
Khổ ghê, có chút xíu đó mà....
Thôi nói nôm na là 1 cell của Excel được lưu trữ trong bộ nhớ 1 VARIANT (kiểu của Windows API), diễn giãi thông dịch qua Excel, VBA thành kiểu wrapper là Variant
Variant là loại ba phải, chứa đủ kiểu dữ liệu trong ruột nó được hết: Char, Int, Long, Double, String, Object, Empty, Null
Mặc định là Empty (VT_EMPTY trong Windows API), tức nó là Blank, còn khi nó chứa String (kiểu BSTR trong Windows API) thì nếu len là 0 thì nó là chuỗi rỗng.
Đúng sheet10 đó anh.
219753
 
Vậy thì lưu nó lại thành file Excel Macro .xlsm đi rồi thử lại.
 
Cảm ơn anh ThangCuAnh, nhưng vẫn chưa được anh ạ.
Tui sửa lại như vầy
Sub test()
Debug.Print Sheet10.Range("A1:H1").Value
Debug.Print VarType(Sheet10.Range("A1:H1").Value)
Debug.Print TypeName(Sheet10.Range("A1:H1").Value)

'Debug.Print Sheet10.Range("H2").Value
'Debug.Print VarType(Sheet10.Range("H2").Value)
'Debug.Print TypeName(Sheet10.Range("H2").Value)

Sheet10.Range("A1:H1").Value = Empty
'Sheet10.Range("H2").Value = Empty
End Sub
thì bị lỗi tại dòng màu vàng

View attachment 219737
Chổ màu vàng là sai, sửa lại là
Mã:
Debug.Print Sheet10.Range("A1").Value
thì có hy vọng.
 
Tôi đã chỉ tường minh ra cell H1 và H2, bạn lại đi sữa thày array của cell từ A1 tới H1.
2 ô màu vàng và màu xanh trong file ORong.xlsx của bạn đó.
 
Khổ ghê, bạn copy code của tui mà sữa lại chi vậy, tôi đã chỉ tường minh ra là ô H1, H2
Mã:
Sub test()
    Debug.Print Sheet10.Range("H1").Value
    Debug.Print VarType(Sheet10.Range("H1").Value)
    Debug.Print TypeName(Sheet10.Range("H1").Value)
    
    Debug.Print Sheet10.Range("H2").Value
    Debug.Print VarType(Sheet10.Range("H2").Value)
    Debug.Print TypeName(Sheet10.Range("H2").Value)
    
    Sheet10.Range("H1").Value = Empty
End Sub
 
Dà, nhưng mong muốn là: Biến các ô rỗng không bình thường thành các ô rỗng bình thường bằng VBA trong vùng đã chọn anh à.
Cảm ơn anh rất vì sự nhiệt tình.
 
Vậy thì duyệt qua từng cell trong Range, VarType thằng nào mà là vbString và Len = 0 thì cho cell.Value = Empty
Còn code sub Test mà tôi đưa ra chỉ minh họa cho bạn cách kiểm tra kiểu cell rỗng thôi. Bạn chế ra, thêm mắm muối cho yêu cầu của bạn chứ.
Bạn sữa thành A1:H1 thì báo lỗi là phải rồi, vì statement Debug.Print không accept kiểu array của Variant
 
Vậy thì duyệt qua từng cell trong Range, VarType thằng nào mà là vbString và Len = 0 thì cho cell.Value = Empty
Tui có dùng vòng lặp for next và đã giải quyết được nhưng chậm quá, (có những sheet nó quay ~90 giây, tùy theo số dòng nó duyệt) nên lên đây nhờ các anh chị trợ giúp tìm cách thực hiện nhanh hơn.
 
VẬy thì bạn post file và code lên đây đi, mọi người xem và optimize cho bạn.
 
Tui có dùng vòng lặp for next và đã giải quyết được nhưng chậm quá, (có những sheet nó quay ~90 giây, tùy theo số dòng nó duyệt) nên lên đây nhờ các anh chị trợ giúp tìm cách thực hiện nhanh hơn.
Bạn quét vùng cần kiểm tra và cho chạy thử code này xem được không nhé.
Mã:
Sub GPE()
Dim Rng As Range, cRng As Range
For Each cRng In Selection
    If TypeName(cRng.Value) <> "Empty" Then
        If Rng Is Nothing Then
            Set Rng = cRng
        Else
            Set Rng = Union(Rng, cRng)
        End If
    End If
Next cRng
   If Not Rng Is Nothing Then Rng = Empty
End Sub
 
VẬy thì bạn post file và code lên đây đi, mọi người xem và optimize cho bạn.
Dạ, cảm ơn anh nhiều. Suốt chủ nhật lăn lộn với vấn đề này, tôi vừa tìm ra đoạn code vừa ý, đạt 99.99% yêu cầu.
219760
và chia sẻ với anh và mọi người, ai có nhu cầu thì tham khảo:
Trang này:
Bài đã được tự động gộp:

Dạ, cảm ơn anh nhiều. Suốt chủ nhật lăn lộn với vấn đề này, tôi vừa tìm ra đoạn code vừa ý, đạt 99.99% yêu cầu.
219760
và chia sẻ với anh và mọi người, ai có nhu cầu thì tham khảo:
Trang này:
Chỉ có điều không hiểu số tiền 4 đô la thôi ($$$$), nhưng vận dụng đúng yêu cầu là OK.
 
Đừng dùng TypeName, nó chậm gần trăm lần so với VarType đó
 
Anh mới vô diễn đàn nên chưa quen đó thôi.
Ở đây, phần lớn hỏi một đằng còn sự thật là nẻo khác. Vì khó mà tưởng tượng được ý tưởng của tác giả phong phú cỡ nào..
Nên có một cách anh có thể tham khảo: Luôn luôn không bận tâm tới nội dung của chủ thớt mà chỉ cần hỏi: cuối cùng chủ thớt cần làm gì mà thôi.
 
Bạn ExcelQN test thử file này thử, xem tốc độ có chấp nhận được không ?
Tôi test với select nhiều cột thì thấy tương đối OK, nhưng select toàn bộ sheet thì Out of memory
 

File đính kèm

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

Back
Top Bottom