ManhHungMHNH
Thành viên chính thức


- Tham gia
- 21/1/07
- Bài viết
- 76
- Được thích
- 0




sử dụng công thức của anh ndu giải cho bạn nha
còn mấy ô bằng 0, điền số vào chắc ko khó
=INDEX(mydata;INT((ROWS($1:1)-1)/COLUMNS(mydata))+1;MOD((ROWS($1:1)-1);COLUMNS(mydata))+1)
p/s: tại vì khi giải đúng hết là bạn đi lun ko bao giờ hồi âm hết, nên phải để chổ để bạn hồi âm


Không đi luôn đâu bạn ơi, thành viên này là một trong những thành viên có thâm niên lâu đời đấy (1/2007), nếu mà đi luôn thì không gắn bó lâu đến như vậy!
hì hì, ko có đi lun, nhưng giải xong chẳng có hồi âm, nên chắc bit là đúng hay sai
nói vui thôi, nhờ mod xoá spam
tks




Mình có File Muốn chuyển cột thành dòng theo thời gian.
Sub ngang_doc()
Dim data(), i, j, kq(1 To 10000, 1 To 2), k
data = Range([C2], [C65536].End(3)).Resize(, 2).Value
For i = 1 To UBound(data)
For j = 1 To UBound(data, 2)
If data(i, j) <> "" Then
k = k + 1
kq(k, 1) = i
kq(k, 2) = data(i, j)
End If
Next
Next
[g2].Resize(k) = kq
End Sub
Xài code đi cho sướng khỏi nhức đầu. Công thức sao khó quá.
PHP:Sub ngang_doc() Dim data(), i, j, kq(1 To 10000, 1 To 2), k data = Range([C2], [C65536].End(3)).Resize(, 2).Value For i = 1 To UBound(data) For j = 1 To UBound(data, 2) If data(i, j) <> "" Then k = k + 1 kq(k, 1) = i kq(k, 2) = data(i, j) End If Next Next [g2].Resize(k) = kq End Sub




Máy tính của mình thuộc dạng siêu tốc độ thì không lo về tốc độCó một đặc điểm mà QuangHai thường bị là khai báo một mảng với số phần tử cho trước [ kq(1 To 10000, 1 To 2) ], đó là một thói quen không tốt:
1) Nếu dữ liệu quá ít sẽ bị thừa phần tử (có thể chấp nhận)
2) Nếu dữ liệu nhiều hơn số phần tử khai báo chắc chắn sẽ phát sinh lỗi.
Tại sao mình không khai báo là một biến Variant bình thường rồi sau đó ReDim chúng với chiều dài (lớn nhất) của mảng bằng Ubound(Array,1) nhỉ?
Một kinh nghiệm mà mình đã từng phát hiện nếu dùng:
data = Range([C2], [C65536].End(3)).Resize(, 2).Value
Sẽ chậm hơn cái này:
data = Range([C2], [C65536].End(3)).Resize(, 2)
Đã từng thử nghiệm với 65536 và kết quả nhanh hơn gần gấp đôi thời gian.
Máy tính của mình thuộc dạng siêu tốc độ thì không lo về tốc độ
Sau khi viết code nếu bị lỗi thì viết tiếp, nhiều bài mau lên sao.. ha ha ha
Dạo này thất nghiệp quá mà
Nói thế thôi chứ nếu bài nào có cung cấp đủ thông tin thì mình cũng nên mần ăn cho đàng hoàng tí giống như anh góp ý

nếu công thức thì thế này Anh Hải : cũng đơn giản thôi mà "để gọn biểu thức dưới ta đạt nameXài code đi cho sướng khỏi nhức đầu. Công thức sao khó quá.
PHP:Sub ngang_doc() Dim data(), i, j, kq(1 To 10000, 1 To 2), k data = Range([C2], [C65536].End(3)).Resize(, 2).Value For i = 1 To UBound(data) For j = 1 To UBound(data, 2) If data(i, j) <> "" Then k = k + 1 kq(k, 1) = i kq(k, 2) = data(i, j) End If Next Next [g2].Resize(k) = kq End Sub
nó sẽ cho gia con so 0 nếu ô bị rỗngDkk=INDIRECT(ADDRESS(INT(ROW(C2)/2)+1,3+MOD(ROW(C2),2)))
làm cho vui thôi chứ chủ thới đâu cần nưaG2==IF(DKK="",G1,DKK)





Công thức thì mình chịu thôi, làm cũng được nhưng so với viết code thì mình suy nghĩ theo hướng code sẽ nhanh hơn là suy nghĩ ra cái công thức kia.nếu công thức thì thế này Anh Hải : cũng đơn giản thôi mà
Có một đặc điểm mà QuangHai thường bị là khai báo một mảng với số phần tử cho trước [ kq(1 To 10000, 1 To 2) ], đó là một thói quen không tốt:
1) Nếu dữ liệu quá ít sẽ bị thừa phần tử (có thể chấp nhận)
2) Nếu dữ liệu nhiều hơn số phần tử khai báo chắc chắn sẽ phát sinh lỗi.
Tại sao mình không khai báo là một biến Variant bình thường rồi sau đó ReDim chúng với chiều dài (lớn nhất) của mảng bằng Ubound(Array,1) nhỉ?
Một kinh nghiệm mà mình đã từng phát hiện nếu dùng:
data = Range([C2], [C65536].End(3)).Resize(, 2).Value
Sẽ chậm hơn cái này:
data = Range([C2], [C65536].End(3)).Resize(, 2)
Đã từng thử nghiệm với 65536 và kết quả nhanh hơn gần gấp đôi thời gian.
Em có thắc mắc về việc xác định chính xác độ lớn mảng khi thực hiện các phép toán lọc nhưng vẫn chưa có câu trả lời. Nhân đây em muốn hỏi anh xem có cách nào để Redim Preserve theo chiều ngang được không? Chứ cứ khai báo Ubound(..) cũng không chính xác với vùng dữ liệu mình trích xuất.




Trong bài này mình có dùng Redim Preserve. Bạn tham khảo xemEm có thắc mắc về việc xác định chính xác độ lớn mảng khi thực hiện các phép toán lọc nhưng vẫn chưa có câu trả lời. Nhân đây em muốn hỏi anh xem có cách nào để Redim Preserve theo chiều ngang được không? Chứ cứ khai báo Ubound(..) cũng không chính xác với vùng dữ liệu mình trích xuất.
Trong bài này mình có dùng Redim Preserve. Bạn tham khảo xem
- Vấn đề sử dụng Redim Preserve em cũng Vooc qua và cũng đã dùng, nhưng chỉ vì cái giới hạn Resize "cột" đó nên thắc mắc cách để resize "hàng" thui anh à.Trong bài này mình có dùng Redim Preserve. Bạn tham khảo xem




Hỏi xoáy đáp xoay chơi nè:
ReDim Preserve Res(1 To UBound(data), 1 To n)
Thử Resize cái "tên" màu đỏ đỏ có được không hỉ???
Hỏng hiểu anh muốn thế nào sao mà tìm cách chứ. nói rõ miếng nữa xem




Bác Bill nói vầy nè- Vấn đề sử dụng Redim Preserve em cũng Vooc qua và cũng đã dùng, nhưng chỉ vì cái giới hạn Resize "cột" đó nên thắc mắc cách để resize "hàng" thui anh à.
Cảm ơn các anh!
- Vấn đề sử dụng Redim Preserve em cũng Vooc qua và cũng đã dùng, nhưng chỉ vì cái giới hạn Resize "cột" đó nên thắc mắc cách để resize "hàng" thui anh à.
Cảm ơn các anh!
Mình có File Muốn chuyển cột thành dòng theo thời gian.
[COLOR=#ff0000]data[/COLOR] =OFFSET($C$2:$D$2;0;0;COUNTA($C:$C))
[COLOR=#ff0000]pos[/COLOR] =SMALL(IF(data<>"";(ROW(data)-1)*[COLOR=#ff0000]10[/COLOR]+COLUMN(data)-2;"");ROWS($1:1))
=INDEX(data;INT(pos/[COLOR=#ff0000]10[/COLOR]);MOD(pos;[COLOR=#ff0000]10[/COLOR]))
sử dụng công thức của anh ndu giải cho bạn nha
còn mấy ô bằng 0, điền số vào chắc ko khó
=INDEX(mydata;INT((ROWS($1:1)-1)/COLUMNS(mydata))+1;MOD((ROWS($1:1)-1);COLUMNS(mydata))+1)
p/s: tại vì khi giải đúng hết là bạn đi lun ko bao giờ hồi âm hết, nên phải để chổ để bạn hồi âm

hình như bài của chủ thớt yêu cầu nếu ô rỗng thì lấy giá trị của ô trước nữa đó Bác, "nhận xét theo ví du"Nếu dùng công thức xong lại phải dò để xóa các ô có 0 rồi dồn cột thì bạn giết người ta rồi còn gì. Mà bạn định dồn cột như thế nào? Và nữa: nếu cột nguồn (cột D) có số 0 thì lấy còn nếu rỗng thì bỏ, nếu đk là thế thì bạn định giải quyết thế nào?
Đã công thức thì kéo là xong chứ ai lại làm "bán cơ giới" như thế.

hình như bài của chủ thớt yêu cầu nếu ô rỗng thì lấy giá trị của ô trước nữa đó Bác, "nhận xét theo ví du"
nhưng có điều kỳ kỳ là ko hiểu chủ thớt làm thế nào hay có nhầm lẫn gì không, mà phần đầu dòng 1 xong tới dòng 2 nhưng ở phần gần cuối ô rỗng thì lấy 2 dòng liên tiếp rồi tới cột
View attachment 100680