Đố vui về VBA!

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,596
Được thích
7,669
Điểm
560
Để có thể tiếp tục, ban Giám Hiệu yêu cầu Cô giáo phải xác định lại đề bài:
Đề bài được xác định là ba thừa số a, b, c chỉ dùng để lập đa thức dạng aX2 + bX + c. Tức là một đa thức có bậc tối đa là 2, không bắt buộc phải chính xác bậc 2.
a, b, c đều là phần tử của tập hợp R cho nên trị 0 không được ngoại lệ.
 

khi ta 20

Thành viên thường trực
Tham gia ngày
26 Tháng ba 2018
Bài viết
260
Được thích
208
Điểm
60
Tuổi
24
Để có thể tiếp tục, ban Giám Hiệu yêu cầu Cô giáo phải xác định lại đề bài:
Đề bài được xác định là ba thừa số a, b, c chỉ dùng để lập đa thức dạng aX2 + bX + c. Tức là một đa thức có bậc tối đa là 2, không bắt buộc phải chính xác bậc 2.
a, b, c đều là phần tử của tập hợp R cho nên trị 0 không được ngoại lệ.
Hổng lẽ bậc của đa thức có thể là số lẻ ?
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,596
Được thích
7,669
Điểm
560
Hổng lẽ bậc của đa thức có thể là số lẻ ?
X3 thì gọi là bậc mấy?

Chú: tôi học toán ở SG hơn 40 năm về trước cho nên cách học ba môn Đại số (Algebra), Giải tích (Calculus/Analysis), và Toán số (Arithmetics) hơi khác chương trình sau này các bạn học 1 chút.
Bác batman khoảng xấp xỉ tuổi tôi, như vậy có lẽ bác ấy học toán ở HN.
Lúc ấy, SG đang trên đường chuyển chiều hướng giáo dục theo lối Mỹ, tức là bớt Toán 1 chút để bù vào Vật lý và nhất là Hoá. Vì vậy, nếu trình độ dạy toán HN cao hơn SG thì tôi cũng không lấy làm lạ.
Vả lại, tuy tôi học ban Toán nhưng trình sở thích của tôi là Văn.
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Bác batman khoảng xấp xỉ tuổi tôi,
Tôi năm 1954.
như vậy có lẽ bác ấy học toán ở HN.
Thế hệ tôi là sơ tán khắp nơi. Năm lớp 7 mới về gần Hà Nội, cấp 3 thì về lại nội thành.
Lúc ấy, SG đang trên đường chuyển chiều hướng giáo dục theo lối Mỹ, tức là bớt Toán 1 chút để bù vào Vật lý và nhất là Hoá. Vì vậy, nếu trình độ dạy toán HN cao hơn SG thì tôi cũng không lấy làm lạ.
Vả lại, tuy tôi học ban Toán nhưng trình sở thích của tôi là Văn.
Tôi chỉ giỏi về Toán, Lý, Hóa, Văn và các môn học thuộc lòng như Sử, Địa thì cố được trung bình. Người ta gọi là học lệch :D
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,596
Được thích
7,669
Điểm
560
Tôi kém bác 1 tuổi.
Thế hệ tôi là thế hệ "Rớt tú tài anh đi trung sĩ, em ở nhà lấy Mỹ nuôi con". Trung học chia ra làm đệ nhất (6-9) và đệ nhị cấp (10-12). Học xong lớp 11 thi tú tài 1, nếu đậu thì được lên 12 và học xong thì thi tú tài 2. Hầu hết các ĐH chỉ nhận tú tài 2. Hồi đó chính quyền SG tuyển quân nhân theo bằng cấp. Có bằng tú tài 2 thì được thi vào trường Võ Bị Đà Lạt (ra thiếu uý). Có bằng tú tài 1 thì tự động vào võ bị Thủ Đức (ra chuẩn uý). Có bằng Trung học đệ nhất cấp thì đi trường hạ sĩ quan Đồng Đế (ra trung sĩ). Vì vậy mới có bài thơ trên (*). Cũng cần nói thêm là lúc đó ngành phi công Mỹ cũng tuyển tú tài 1 cho nên một số bạn tôi học đến cấp này thì đăng phi công Mỹ.

(*) bài thơ ấy nói lên cái tâm trạng hoang mang của ngừoi thế hệ tôi. Vì vậy tôi nhớ mãi. Tuy nó dở bẹt nhưng đối với tôi nó cũng như câu "ba người anh nới chiến trường Đông Bắc, được tin em gái mất, trước khi em lấy chồng" của Hữu Loan diễn tả cái xáo trộn đời người của thời kháng chiến.
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,596
Được thích
7,669
Điểm
560
Đố dễ ẹt nè.
Cô giáo ra bài:
Viết code cho 1 hàm VBA nhận 3 số thực a, b, c (3 điểm) và giải phương trình aX2 + bX + c = 0 (5 điểm)
lý luận, giải thích cách dùng (2 điểm)
...
Ăn 5 điểm đỏ đỏ như thế này:
Thiết kế giao diện hàm
Hàm cần làm thế nào để nhận 3 tham -> 3 double byval
Hàm cần làm thế nào để trả về 2 nghiệm (chả nhẽ trả về một Type, gồm 2 nghiệm?) -> 2 double byRef
Hàm cần làm thế nào để trả về con số nghiệm -> hàm trả về 1 Integer: 0 = vô nghiệm, 1 = 1 nghiệm, 2 = 2 nghiệm, 3 (>2) = vô số nghiệm
(nếu muón diễn tả trục trặc thì có thể dùng số âm để trả về)

Function GiaiPTBac2(byVal a As Double, byVal b As Double, byVal c As Double, byRef x1 As Double, byRef x2 As Double) As Integer
' ham giai phuong trinh bac 2, dang aX2 + bX + c = 0
' tham nhan (in) a, b, c
' tham xuat (out) x1, x2 : 2 nghiem cua phuong trinh (neu co)
' Tri tra ve cua ham: 1 Integer: 0 = vô nghiệm, 1 = 1 nghiệm, 2 = 2 nghiệm, 3 = vô số nghiệm
'

...
End Function

Ví dụ cách gọi hàm:

Select Case GiaiPTBac2(a, b, c, x1, x2)
Case 0
MsgBox "PT vo nghiem"
Case 1
MsgBox "PT co 1 nghiem (kep) la " & x1
Case 2
MsgBox "PT co 2 nghiem la " & x1 & " va " & x2
Case Else
MsgBox "PT khong co nghiem nhat dinh"
End Select
(ví dụ của tôi chỉ đại khái thôi. Cái vụ số nghiệm tuỳ theo quan điểm)

(*) Lưu ý: đây không phải là giải pháp duy nhất hoặc hay nhất. Mục đích của bài này là giới thiệu với các bạn về cách thiết kế giao diện hàm.

1. Mời các bạn thử tìm cách hạ điểm trên xuống dưới 5 bằng cách đưa ra khuyết điểm và cách bổ khuyết.

2. Mời các bạn thử lấy 5 điểm còn lại (viết phần code giải)
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
6,987
Được thích
7,803
Điểm
860
Nơi ở
TP.HCM
Đố các bạn khi thực thi một dòng lệnh gán dữ liệu từ mảng xuống sheet (như code bên dưới) thì VBA thực hiện theo thứ tự như thế nào.
  1. Tất cả các ô cùng lúc
  2. Từ trái qua phải, từ trên xuống dưới
  3. Từ trên xuống dưới, từ trái qua phải
  4. Ngẫu nhiên
  5. Khác
Mã:
Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
[A1:B10].Value = Arr
End Sub
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
1,893
Được thích
1,646
Điểm
210
Đố các bạn khi thực thi một dòng lệnh gán dữ liệu từ mảng xuống sheet (như code bên dưới) thì VBA thực hiện theo thứ tự như thế nào.
  1. Tất cả các ô cùng lúc
  2. Từ trái qua phải, từ trên xuống dưới
  3. Từ trên xuống dưới, từ trái qua phải
  4. Ngẫu nhiên
  5. Khác
Mã:
Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
[A1:B10].Value = Arr
End Sub
Em đoán là đáp án thứ 2.Vì Khi dữ liệu mảng nhiều thì nó thực hiện chậm hơn.
 

leonguyenz

Thành viên mới
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,126
Được thích
7,306
Điểm
560
Nơi ở
#REF
Đố các bạn khi thực thi một dòng lệnh gán dữ liệu từ mảng xuống sheet (như code bên dưới) thì VBA thực hiện theo thứ tự như thế nào.
  1. Tất cả các ô cùng lúc
  2. Từ trái qua phải, từ trên xuống dưới
  3. Từ trên xuống dưới, từ trái qua phải
  4. Ngẫu nhiên
  5. Khác
Mã:
Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
[A1:B10].Value = Arr
End Sub
Dzụ này đúng là chưa biết, nhưng thử từ 1000 dòng, đến 10k đến 100k và 500k dòng thì nó đổ cùng lúc, càng nhiều dòng thì mất thời gian duyệt vòng lặp thôi. Vậy đáp án 1, thực thi dòng lệnh gán mảng xuống sheet là tất cả các ô cùng lúc.
 

HieuCD

Thành viên gạo cội
Tham gia ngày
14 Tháng chín 2010
Bài viết
5,522
Được thích
9,487
Điểm
560
Đố các bạn khi thực thi một dòng lệnh gán dữ liệu từ mảng xuống sheet (như code bên dưới) thì VBA thực hiện theo thứ tự như thế nào.
  1. Tất cả các ô cùng lúc
  2. Từ trái qua phải, từ trên xuống dưới
  3. Từ trên xuống dưới, từ trái qua phải
  4. Ngẫu nhiên
  5. Khác
Mã:
Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
[A1:B10].Value = Arr
End Sub
Dùng sự kiện để test thấy gán 1 lần
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Long
  If Not Intersect(Target, Range("A1:B10")) Is Nothing Then
    i = Application.Count(Range("E1:E100"))
    Cells(i + 1, 4) = i + 1
    Cells(i + 1, 5) = Target.Address(0, 0)
  End If
End Sub

Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
[A1:B10].Value = Arr
End Sub
 
Lần chỉnh sửa cuối:

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Khái niệm "đổ cùng lúc" là thế nào? Người ta nói "Trong Windows tất cả mọi program đều thực hiện cùng lúc". Làm gì có chuyện ở mỗi thời điểm mọi program đều được thực hiện. Chỉ có điều mỗi program được thực hiện trong một khoảng thời gian rất nhỏ", Program 1 được thực hiện trong một khoảng thời gian rất nhỏ, sau đó "control" sẽ được chuyển sang program 2 (Windows chuyển context), và nó cũng được thực hiện trong một khoảng thời gian rất nhỏ. Cứ thế lần lượt mỗi program. Vì lẽ đó nên nếu ta chuyển liên tục từ program này sang program khác thì có cảm giác là ở mọi thời điểm mỗi program đều đang được thực hiện.
Tôi không rõ các phần tử của mảng sẽ được đập xuống sheet như thế nào. Nhưng tôi tin rằng dù đập xuống sheet bằng cách nào thì khi tất cả mọi phần tử đã được đập xuống sheet thì lúc đó nếu có những công thức tham chiếu tới vùng được đập thì các công thức đó mới được tính lại. Tức nếu cần phải thực hiện calculation thì nó sẽ được thực hiện sau khi mọi phần tử của mảng được đập xuống sheet. Với cách hiểu như thế thì không cần phải quan tâm, các phần tử đã được đập xuống sheet theo cách nào. Không có chuyện đập vào A1 rồi công thức tham chiếu tới vd. A1:C20 được tính lại, rồi sau khi đập xuống A2 thì công thức lại được tính lại, cứ đan xen như thế cho tới khi đập xuống B10 và tính lại công thức. Không, tôi tin là sau khi đập xong A1, ..., A10, B1, ..., B10 thì công thức mới được tính. Nó cho ta cảm giác là "Tất cả các ô cùng lúc", nhưng đó là cảm giác. Ở mỗi thời điểm thì chỉ có 1 phần tử được đổ thôi. "Cùng lúc" chỉ là cách nói mà không có định nghĩa nó là thế nào.
Ở đây tương tự như tình huống: ta có công thức tham chiếu tới A1:B10. Nếu ta chọn A1:B10 và nhấn Ctrl + V để dán 20 giá trị bằng "một thao tác" vào vùng A1:B10 thì phải sau khi 20 giá trị được dán thì công thức mới được tính. Nếu ta có code Worksheet_Change thì sự kiện Worksheet_Change chỉ sảy ra 1 lần chứ không phải 20 lần, và sự kiện đó chỉ sảy ra khi tất cả 20 giá trị đã được gán cho A1:B10.

Còn nếu tò mò là các ô được gán theo thứ tự nào thì tôi đoán là theo cột. Gán xong cột 1 thì gán cột 2, cột 3, cột 4 ...
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
6,987
Được thích
7,803
Điểm
860
Nơi ở
TP.HCM
Em đoán là đáp án thứ 2.Vì Khi dữ liệu mảng nhiều thì nó thực hiện chậm hơn.
Có cơ sở gì không bạn? Mảng lớn chậm có thể là gán từng ô đúng nhưng chắc gì đã là thứ tự như vậy.
Bài đã được tự động gộp:

Dùng sự kiện để test thấy gán 1 lần
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Long
  If Not Intersect(Target, Range("A1:B10")) Is Nothing Then
    i = Application.Count(Range("E1:E100"))
    Cells(i + 1, 4) = i + 1
    Cells(i + 1, 5) = Target.Address(0, 0)
  End If
End Sub

Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
[A1:B10].Value = Arr
End Sub
Như anh batman1 phân tích sự kiện xảy ra 1 lần không có nghĩa là cả mảng được gán 1 lần.
Anh batman1 cũng chỉ đoán thôi chứ cũng không có cơ sở.
 
Lần chỉnh sửa cuối:

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
8,555
Được thích
9,719
Điểm
560
Đố các bạn khi thực thi một dòng lệnh gán dữ liệu từ mảng xuống sheet (như code bên dưới) thì VBA thực hiện theo thứ tự như thế nào.
  1. Tất cả các ô cùng lúc
  2. Từ trái qua phải, từ trên xuống dưới
  3. Từ trên xuống dưới, từ trái qua phải
  4. Ngẫu nhiên
  5. Khác
Mã:
Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
[A1:B10].Value = Arr
End Sub
Mạnh dạn chọn đáp án 4.

Trong này có bác nào rành phần cứng (CPU) chắc giải thích được. Liên quan tới 'thread và process' gì đó... vì cho dù là siêu máy tính thì vẫn chỉ có duy nhất một process được chạy trong một đơn vị thời gian mà thôi.
 

HieuCD

Thành viên gạo cội
Tham gia ngày
14 Tháng chín 2010
Bài viết
5,522
Được thích
9,487
Điểm
560
Có cơ sở gì không bạn? Mảng lớn chậm có thể là gán từng ô đúng nhưng chắc gì đã là thứ tự như vậy.
Bài đã được tự động gộp:


Như anh batman1 phân tích sự kiện xảy ra 1 lần không có nghĩa là cả mảng được gán 1 lần.
Anh batman1 cũng chỉ đoán thôi chứ cũng không có cơ sở.
Gán 1 lần hay gán nhiều lần chỉ mang ý nghĩa tương đối theo cách nhìn nhận khác nhau, tương tự như phép tính 2+3 là 1 phép tính hay nhiều phép tính trong VBA, nếu truy tới xử lý nhị phân thì là nhiều phép tính, nhưng về toán tử là 1 phép tính
Vấn đề là VBA xem thế nào là gán 1 lần, gán 2 lần ... Gán dữ liệu là sự kiện, dùng sự kiện thay đổi để xác định số lần gán là hợp lý, còn xử lý để gán như thế nào là vấn đề khác, không phải số lần gán mảng vào Cells
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,812
Được thích
2,796
Điểm
360
Anh batman1 cũng chỉ đoán thôi chứ cũng không có cơ sở.
Đoán là khi nói về cách gán xuống sheet.

Còn chuyện là sự kiện sảy ra 1 lần thì rõ ràng mà.

Tôi chỉ thắc mắc là có khái niệm "cùng lúc" (Tất cả các ô cùng lúc) nhưng không có định nghĩa khái niêm đó. Vì làm gì có cùng lúc với cách hiểu là 1 thời điểm - 1 vị trí trên trục thời gian? Vì mảng đập xuống sheet là cả 1 quá trình, mảng càng lớn thì thời gian đập xuống sheet càng lớn. Vd. mảng đập xuống sheet trong quá trình 0,5 s thì rõ ràng ở mọi thời điểm t, với t < 0,5 thì vùng "chưa đầy". Không có thời điểm t < 0,5 s nào mà tất cả các ô trong vùng đều có giá trị.

Còn chuyện mọi calculation chỉ được thực hiện khi toàn bộ mảng được nhập xuống sheet xong thì là điều tôi chắc chắn chứ không phải đoán mò. Và có thể cho vd. để chứng tỏ điều này.

Còn về cách thức nhập vào từng ô thì tôi mới đoán mò là nhập theo từng cột. Tuy là đoán mò nhưng cũng phải có cơ sở, đúng hay sai, cho cái đoán mò đó. Không phải đoán mò trên cơ sở tung đồng xu. Trong VBA chỉ được phép Redim Preserve với thay đổi số cột. Vì mảng được ghi theo từng cột. Có thể viết 1 lệnh đề copy toàn bộ 1 cột sang 1 mảng 1 chiều nhưng không viết được 1 lệnh để copy cả dòng sang mảng 1 chiều.
 
Lần chỉnh sửa cuối:

tam888

Thành viên tích cực
Tham gia ngày
22 Tháng tám 2013
Bài viết
788
Được thích
473
Điểm
435
Đoán là khi nói về cách gán xuống sheet.

Còn chuyện là sự kiện sảy ra 1 lần thì rõ ràng mà.

Tôi chỉ thắc mắc là có khái niệm "cùng lúc" (Tất cả các ô cùng lúc) nhưng không có định nghĩa khái niêm đó. Vì làm gì có cùng lúc với cách hiểu là 1 thời điểm - 1 vị trí trên trục thời gian? Vì mảng đập xuống sheet là cả 1 quá trình, mảng càng lớn thì thời gian đập xuống sheet càng lớn. Vd. mảng đập xuống sheet trong quá trình 0,5 s thì rõ ràng ở mọi thời điểm t, với t < 0,5 thì vùng "chưa đầy". Không có thời điểm t < 0,5 s nào mà tất cả các ô trong vùng đều có giá trị.

Còn chuyện mọi calculation chỉ được thực hiện khi toàn bộ mảng được nhập xuống sheet xong thì là điều tôi chắc chắn chứ không phải đoán mò. Và có thể cho vd. để chứng tỏ điều này.

Còn về cách thức nhập vào từng ô thì tôi mới đoán mò là nhập theo từng cột. Tuy là đoán mò nhưng cũng phải có cơ sở, đúng hay sai, cho cái đoán mò đó. Không phải đoán mò trên cơ sở tung đồng xu. Trong VBA chỉ được phép Redim Preserve với thay đổi số cột. Vì mảng được ghi theo từng cột. Có thể viết 1 lệnh đề copy toàn bộ 1 cột sang 1 mảng 1 chiều nhưng không viết được 1 lệnh để copy cả dòng sang mảng 1 chiều.
Đúng vậy, khái niệm cùng lúc phải xem lại Vì máy tính không có khái niệm cùng lúc cùng thời điểm, chỉ là tương đối.
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
6,987
Được thích
7,803
Điểm
860
Nơi ở
TP.HCM
Còn về cách thức nhập vào từng ô thì tôi mới đoán mò là nhập theo từng cột. Tuy là đoán mò nhưng cũng phải có cơ sở, đúng hay sai, cho cái đoán mò đó. Không phải đoán mò trên cơ sở tung đồng xu. Trong VBA chỉ được phép Redim Preserve với thay đổi số cột. Vì mảng được ghi theo từng cột. Có thể viết 1 lệnh đề copy toàn bộ 1 cột sang 1 mảng 1 chiều nhưng không viết được 1 lệnh để copy cả dòng sang mảng 1 chiều.
Thì em nói anh đoán không có cơ sở là nói thứ tự theo cột này.
Đáp án em cho là đúng là đáp án số 2 (Từ trái qua phải, từ trên xuống dưới ) dựa vào kết quả của đoạn code sau:
Mã:
Sub Test()
Dim i As Long, j As Long
Dim Arr(1 To 10, 1 To 2)
For i = 1 To 10
    For j = 1 To 2
        Arr(i, j) = Cells(i, j).Address(0, 0)
    Next
Next
Arr(4, 2) = "=()"
[A1:B10].Value = Arr
End Sub
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,596
Được thích
7,669
Điểm
560
Lúc đầu tôi ngỡ câu lệnh gán mảng xuống sheet là atomic (trọn vẹn, không tách ra từng giai đoạn được). Và nếu thế thì ngang hay dọc tuỳ theo thiết kế map giữa mảng và bảng tính: mảng là cột-dòng, bảng tính là dòng-cột. Và thiết kế này nằm bên trong nội bộ:
- Excel không phải là mã nguồn mở. Nếu MS không cho biết trong tài liệu của họ thì chịu. (luật mã nguồn mở)
- Range là một đối tượng hoàn toàn. Lệnh gán là hàm nội bộ của range. Range hoàn toàn có quyền thay đổi cách hoạt động bên trong của nó, tuỳ theo phiên bản. (luật hướng đối tượng)

Tuy nhiên, tét code ở bài #1377 cho thấy MS tệ hơn mình nghĩ. Câu lệnh gán cuối cùng không phải là atomic. Nếu nó atomic thì nó phải có các tính chất sau:
i) kết thúc một loạt, nếu giữa chừng không tiếp tục được thì phải lùi về chỗ cũ, trước khi gán. HOẶC
ii) bắt lỗi liên tục, nếu giữa chừng bị lỗi thì vẫn tiếp tục lướt qua cho đến hết.

Tại sao tôi cho là MS tệ? Vì nếu câu lệnh gán không atomic thì đáng lẽ họ phải:
1. cho biết trong tài liệu, VÀ
2. cho tuỳ chọn, lỗi thì dừng lại, hoặc tiếp tục đi đến hết. (đòi hỏi phải lộn về đầu trước khi gán có lẽ hơi khó)
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
6,987
Được thích
7,803
Điểm
860
Nơi ở
TP.HCM
Thêm câu nữa: Chia 1 cột thành nhiều cột không dùng vòng lặp, không dùng công thức (Viết code để thực hiện giống như file đính kèm mà không dùng vòng lặp, không dùng công thức)
 

File đính kèm

Top