Lệnh if không kiểm tra được giá trị của biến mảng

Trạng thái
Không mở trả lời sau này.

doantuan

Thành viên mới
Nhờ anh/ chị khắc phục dùm lỗi trong trường hợp sau:
Dim i as integer
Dim a (1 to 100)
For i = 9 To Lr
a(i) = "=IF(iferror(VLOOKUP(VALUE(MID(RC5,FIND(PHANCONG!R31C4,RC5),1)),PHANCONG!R30C4:R34C12,MATCH(RC4,PHANCONG!R30C4:R30C12,0),FALSE),0)=0,VLOOKUP(RC4,PHANCONG!R12C2:R23C28,4,0),VLOOKUP(VALUE(MID(RC5,FIND(PHANCONG!R31C4,RC5),1)),PHANCONG!R30C4:R34C12,MATCH(RC4,PHANCONG!R30C4:R30C12,0),FALSE))"
Cells(i, 50) = a(i)
Cells(i, 50) = Cells(i, 50).Value
If Cells(i, 50) = "xx" Then
Cells(i, "G") = "xx"
End If
Next i
Mình muốn hỏi: Tại sao không thể dùng lệnh if để kiểm tra trực tiếp giá trị của biến a (i) mà phải gán vào ô tính thì mới cho ra kết quả:
Cells(i, 50) = a(i)
Cells(i, 50) = Cells(i, 50).Value
If Cells(i, 50) = "xx" Then
Cells(i, "G") = "xx"
End If
Next i
Còn khi viết như thế này thì lại không cho ra kết quả. Chẳng hạn:
If a(i)= "xx" Then
Cells(i, "G") = "xx"
End If
Nhờ anh/ chị giúp dùm. Xin cám ơn!
 

vothanhthu

Võ Thành Thứ
Mình mong bạn tham khảo các cách viết bài của diễn đàn trước khi đưa bài lên hỏi đáp.
1. Code bạn phải viết trong phần chèn mã rõ ràng, không đưa thẳng lên như thế này.
2. Bạn đăng bài như thế này thì không ai hiểu được cả, code lấy dữ liệu tùm lum từ Cell mà không thấy file ví dụ nào?. Lm sao để hiểu a(i) của bạn chứa gì trong đó?. Trong đoạn code này không dùng mảng cũng dc mà?
3. Code bạn up lên không đầy đủ, có một số biến không khai báo, không hiểu nó là gì mà lại có và sử dụng chạy?. Tôi đoán là bạn cắt ngang code rồi đưa lên.
Bạn up file demo lên, tối giản đoạn code đó lại chỉ ra chổ nào lỗi, chổ nào chạy bình thường cho người đọc vào có thể hiểu được. Nếu không bài viết bạn có thể sẽ bị đóng.
 
Sửa lần cuối:

doantuan

Thành viên mới
Mình mong bạn tham khảo các cách viết bài của diễn đàn trước khi đưa bài lên hỏi đáp.
1. Code bạn phải viết trong phần chèn mã rõ ràng, không đưa thẳng lên như thế này.
2. Bạn đăng bài như thế này thì không ai hiểu được cả, code lấy dữ liệu tùm lum từ Cell mà không thấy file ví dụ nào?.
3. Code bạn up lên không đầy đủ, có một số biến không khai báo, không hiểu nó là gì mà lại có và sử dụng chạy?. Tôi đoán là bạn cắt ngang code rồi đưa lên.
Bạn up file demo lên, tối giản đoạn code đó lại chỉ ra chổ nào lỗi, chổ nào chạy bình thường cho người đọc vào có thể hiểu được. Nếu không bài viết bạn có thể sẽ bị đóng.
Mình gửi code vậy thôi. Chứ vấn đề là cách sử dụng biến như thế nào cho đúng. Chứ có liên quan gì đến file đâu bạn. Mình nghĩ mọi người cũng hiểu mà. Mong bạn thông cảm
 

ducdoom

Thành viên mới
Xin chào bạn,
a(i) = "=IF(iferror(VLOOKUP(VALUE(MID(RC5,FIND(PHANCONG!R31C4,RC5),1)),PHANCONG!R30C4:R34C12,MATCH(RC4,PHANCONG!R30C4:R30C12,0),FALSE),0)=0,VLOOKUP(RC4,PHANCONG!R12C2:R23C28,4,0),VLOOKUP(VALUE(MID(RC5,FIND(PHANCONG!R31C4,RC5),1)),PHANCONG!R30C4:R34C12,MATCH(RC4,PHANCONG!R30C4:R30C12,0),FALSE))"
Lúc này giá trị của a(i) là 1 chuỗi String dài dài dài với giá trị là: =IF(iferror(VLOOKUP( ... ... ... PHANCONG!R30C4:R30C12,0),FALSE))
Bởi vì chuỗi này được gán trong môi trường VBE.
Tôi tạm gọi là chuỗi IF1

Khi bạn so sánh a(i) với "xx" sẽ trả về FALSE, vì chuỗi IF1 khác với chuỗi "xx" ( =IF(iferror(VLOOKUP( ... ... ... PHANCONG!R30C4:R30C12,0),FALSE)) <> xx )
nên câu lệnh sau THEN sẽ không được thực thi.

Nhưng khi bạn gán giá trị của IF1 vào Cells, mà IF1 này lại là 1 công thức vì nó bắt đầu bằng ký tự dấu Bằng (=). Lúc này Excel sẽ tính toán công thức đó và sẽ trả ra giá trị. Chuỗi này đang nằm trong môi trường ô tính Cells của Excel.
trong trường hợp của bạn chắc sẽ ra kết quả là "xx" .Do đó: Cells(i,50) = "xx"
nên khi bạn so sánh Cells(i,50) với "xx" sẽ trả về TRUE ( "xx" = "xx")

Kết lại, cái chuỗi IF1 kia nằm ở trong VBE thì sẽ không được tính toán để ra giá trị
nó chỉ trả về giá trị khi nằm trong ô tính.
Thân gửi đến bạn!
 

doantuan

Thành viên mới
@ducdoom: Cám ơn bạn nhiều.
Vậy giá trị a(i) = if(......) sẽ được viết như thế nào vậy bạn (không viết theo a(i) = "=If(.......) ")
 

tuhocvba

Administrator
Thành viên BQT
1. Đọc mục 4 trong bài viết này.
Code không viết tràn lan như thế này.
2. Khi gán cells = ... thì nó dùng thuộc tính value (giá trị).
Trong khi bạn muốn sử dụng công thức thì phải sử dụng thuộc tính formula.
Mã:
cells(1,1).Formula = ...
3. Tôi không muốn nhìn thấy bài viết nào của bạn trong 1 tháng. Hãy xem cách post bài, không hiểu thì hỏi.
Cách post bài của bạn đang làm phiền người khác
 

doantuan

Thành viên mới
@ Administrator: Vấn đề post bài sai mình sẽ rút kinh nghiệm. Nhưng có lẽ bạn hiểu sai câu hỏi của mình rồi.
Như bạn @ducdoom nói đó. Mình chỉ cần sửa lại phép gán giá trị cho biến a(i) thôi. Nhưng mình không biết dùng a(i)=if(.....) như thế nào? Cám ơn bạn nhiều!
 

tuhocvba

Administrator
Thành viên BQT
Theo bạn thì tại sao người khác lại hiểu sai câu hỏi của bạn.
Làm thế nào để tránh việc hiểu sai câu hỏi của mình đưa ra?
1. Yêu cầu người trả lời cần thông minh hơn.
2. Mình cần đặt câu hỏi dễ hiểu hơn.

Theo bạn nên đi theo hướng 1 hay 2 để giải quyết vấn đề "Làm thế nào để hiểu đúng câu hỏi".
 

doantuan

Thành viên mới
@Administrator: mình nghĩ chúng ta nên tập trung chuyên môn hơn là được rồi
 

tuhocvba

Administrator
Thành viên BQT
Chính là để tập trung vào chuyên môn, cho nên cần trình bày vấn đề dễ hiểu, để bất cứ ai cũng hiểu được.
Tôi mời bạn sang GPE tham gia. Chúng tôi không chào đón bạn.
 
Trạng thái
Không mở trả lời sau này.
Top