Well, I see one problem. (I don't know whether it's THE problem; there may be more than one.) You defined Arr(1 To 31, 1 To 8), but in the loop you incremented Ngay from 1 to 31 and used that in Arr(<row>, Ngay). So you put data in the Arr up to column 8, and everything after that failed ("subscript out of range").
You didn't see that because you included the statement "On Error Resume Next"; instead of stopping and telling you there's an error, the program just went on not doing what you wanted it to do, but not informing you.
I spotted the problem by using <F8>, stepping through the program one statement at a time and looking at the value of variables as I went. This is really useful for debugging!