Giúp code đảo ngược dữ liệu trong 1 vùng

Liên hệ QC

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Chào cả nhà GPE ! Em cần 1 đoạn code để đảo ngược từ dưới lên trên như hình bên dưới. Xin chân thành cảm ơn

1540300202795.png
 

File đính kèm

Như bác VetMini nói, nguyên tắc hoán vị 2 phần tử là người ta nhớ "phần tử 1" ra "chỗ tạm thời" -> cho phần tử 1 bằng phần tử 2 -> cho phần tử 2 = "chỗ tạm thời".
..
Phần tử 1 nằm ở nửa trên, phần tử 2 nằm ở nửa dưới. Chỉ cần duyệt FOR ở nửa trên (hoặc dưới). Tổng chỉ số dòng của 2 phần tử luôn không đổi và bằng Ubound(Arr) + 1
Mã:
Sub reverse()
Dim r As Long, c As Long, k As Long
Dim Arr, tmp
    Arr = ThisWorkbook.Worksheets("Sheet1").Range("C5:E11").Value
    k = UBound(Arr) + 1
    For r = 1 To UBound(Arr) \ 2
        For c = 1 To UBound(Arr, 2)
            tmp = Arr(r, c)
            Arr(r, c) = Arr(k - r, c)
            Arr(k - r, c) = tmp
        Next c
    Next r
    ThisWorkbook.Worksheets("Sheet1").Range("H5").Resize(UBound(Arr), UBound(Arr, 2)).Value = Arr
End Sub

Cháu chào bác Siwtom.
Cảm ơn Bác đã đưa ra thêm một cách nữa ạ.
Cả buổi tối qua cháu bỏ bê mọi việc chỉ dành thời gian debug các đoạn code trong ví dụ này.
Qua đó cũng hiểu thêm chút xíu thế nào là mảng chiều dọc và chiều ngang của mảng và hình dung dữ liệu nó hoạt động lật qua lật lại như 1 tấm rèm.
Tối nay về cháu tiếp tục debug code của Bác và các code khác để hiểu thêm vấn đề ạ (khả năng thời gian tới cháu được tụi nhỏ sắp xếp hành lý cho lên Núi ở chỉ để ăn với luyện code bác ạ :))
 
Upvote 0
Qua đó cũng hiểu thêm chút xíu thế nào là mảng chiều dọc và chiều ngang của mảng và hình dung dữ liệu nó hoạt động lật qua lật lại như 1 tấm rèm.
Làm gì có khái niệm mảng dọc, mảng ngang?
Bạn liên tưởng đến sheet nên bạn tự bịa ra khái niệm như thế? Vd. bạn nhập một đoạn hàng (một đoạn cột) nhiều ô vào mảng thì bạn cho đó là mảng ngang (dọc)? Thực ra chúng đều là mảng 2 chiều: 1 dòng nhiều cột (1 cột nhiều dòng).
Chỉ có khái niệm mảng n chiều, với n >= 1. Ngay cả mảng 1 chiều thì là một chiều chứ đâu là ngang hay dọc? Mà nếu chỉ có mảng dọc, ngang thì mảng 3 chiều là dọc hay ngang?
 
Upvote 0
Làm gì có khái niệm mảng dọc, mảng ngang?
Bạn liên tưởng đến sheet nên bạn tự bịa ra khái niệm như thế? Vd. bạn nhập một đoạn hàng (một đoạn cột) nhiều ô vào mảng thì bạn cho đó là mảng ngang (dọc)? Thực ra chúng đều là mảng 2 chiều: 1 dòng nhiều cột (1 cột nhiều dòng).
Chỉ có khái niệm mảng n chiều, với n >= 1. Ngay cả mảng 1 chiều thì là một chiều chứ đâu là ngang hay dọc? Mà nếu chỉ có mảng dọc, ngang thì mảng 3 chiều là dọc hay ngang?

Xin chào bác Siwtom.,
Dạ vâng, cháu sẽ tìm hiểu thêm về các tên gọi và các khái niệm liên quan đến vba ạ.
Cháu cảm ơn bác Siwtom.
 
Upvote 0
Chủ thớt này thật là vô tâm. mỗi lần nhờ mọi người viết code đều như vậy....! có code ôm đi là chạy mất dép. không có một lời cảm ơn người khác. Không biết mọi người có ý kiến gì không?
Không hẳn vậy. Thớt này thường tét cốt kỹ lắm. Có khi cả tuần lễ mới có kết quả.
 
Upvote 0
Làm gì có khái niệm mảng dọc, mảng ngang?
Ý Bác batman là mảng chỉ có mảng 1 chiều và 2 chiều đó chị Oanh Thơ, mảng 2 chiều duyệt ngang duyệt dọc, nên ý của chị cũng khá đúng đấy.
Còn cái mảng 3D (chiều x , y , z) của Bác batman trong excel chưa thấy bao giờ, nên chưa dám chạm. Bác batman có thể giải thích về mảng 3D giúp em. Có phải 3 vòng lặp lòng nhau không Bác, và có phải mảng nằm trong mảng. và một ví dụ cụ thể để giúp em thoát khỏi sự tò mò
 
Lần chỉnh sửa cuối:
Upvote 0
Ý Bác batman là mảng chỉ có mảng 1 chiều và 2 chiều đó chị Oanh Thơ, mảng 2 chiều duyệt ngang duyệt dọc, nên ý của chị cũng khá đúng đấy.
Còn cái mảng 3D (chiều x , y , z) của Bác batman trong excel chưa thấy bao giờ, nên chưa dám chạm. Bác batman có thể giải thích về mảng 3D giúp em. Có phải 3 vòng lặp lòng nhau không Bác
Trên diễn đàn này đã có thành viên sử dụng mảng 4 chiều rồi bạn.
Chiều của mảng với vòng lặp có liên quan gì ở đây đâu bạn
 
Upvote 0
Upvote 0
Upvote 0
Upvote 0
OK đúng là có mảng 3 chiều thật nhưng 3 vòng lặp lồng nhau cũng không sai
https://docs.microsoft.com/en-us/do...ide/language-features/arrays/array-dimensions

Ý Bác batman là mảng chỉ có mảng 1 chiều và 2 chiều đó chị Oanh Thơ, mảng 2 chiều duyệt ngang duyệt dọc, nên ý của chị cũng khá đúng đấy.
Còn cái mảng 3D (chiều x , y , z) của Bác batman trong excel chưa thấy bao giờ, nên chưa dám chạm. Bác batman có thể giải thích về mảng 3D giúp em. Có phải 3 vòng lặp lòng nhau không Bác
Có nói bạn sai gì đâu.
Chỉ có nói là mảng nhiều chiều là một việc, nhiều vòng lặp là một việc khác thôi mà bạn
 
Upvote 0
Tiếng dùng thông dụng cho mảng trong lập trình:
chiều thứ nhất: dòng (row)
chiều thứ hai: cột (column)
chiều thứ ba: trang, hoặc lớp (page)

Khái niệm mảng ở hầu hết các bài trong thớt này là khái niệm mảng của lập trình. VBA là một ngôn ngữ lập trình. Dùng trong môi trường Excel thì nó được mặc định để sử dụng các đối tượng của Excel (Workbook, Worksheet, Range,... là điển hình của các đối tượng này). Nhưng khái niệm mảng của VBA cũng vẫn là khái niệm mảng của lập trình.

Excel là hiện thân của bảng tính trải rộng cho nên chủ yếu nó chỉ dùng 2 chiều. Nhưng "chủ yếu" không có nghĩa là luôn luôn. Sheets là thể hiện của chiều thứ ba. (lưu ý là nghĩa của page tương đối gần với sheet). Đối tượng loại Range của Excel có một số hàm để ngầm chuyển đổi giữa Range và mảng 2 chiều. Đối tượng loại WorksheetFunction cũng có khả năng tự chuyển đổi giữa mảng và Range. Tùy theo hàm mà nó chuyển 1 dòng/cột qua mảng 1 chiều, hay nhiều dòng và cột qua mảng 2 chiều. Hiện tại thì tôi chưa biết cách chuyển nhiều sheets thành mảng 3 chiều.

Người hởi ở bài #25 và #27 hiển nhiên là chưa phân biệt được VBA và Excel.
 
Lần chỉnh sửa cuối:
Upvote 0
Tiếng dùng thông dụng cho mảng trong lập trình:
chiều thứ nhất: dòng (row)
chiều thứ hai: cột (column)
chiều thứ ba: trang, hoặc lớp (page)

Khái niệm mảng ở hầu hết các bài trong thớt này là khái niệm mảng của lập trình. VBA là một ngôn ngữ lập trình. Dùng trong môi trường Excel thì nó được mặc định để sử dụng các đối tượng của Excel (Workbook, Worksheet, Range,... là điển hình của các đối tượng này). Nhưng khái niệm mảng của VBA cũng vẫn là khái niệm mảng của lập trình.

Excel là hiện thân của bảng tính trải rộng cho nên chủ yếu nó chỉ dùng 2 chiều. Nhưng "chủ yếu" không có nghĩa là luôn luôn. Sheets là thể hiện của chiều thứ ba. (lưu ý là nghĩa của page tương đối gần với sheet)

Người hởi ở bài #25 và #27 hiển nhiên là chưa phân biệt được VBA và Excel.

Cảm ơn bác VetMini, đó là những từ ngữ và khái niệm cháu cũng đang muốn tiếp cận.
Bác giữ gìn sức khỏe!
 
Upvote 0
Bác giữ gìn sức khỏe!
Kêu bác ấy giữ sức khỏe làm gì nhỉ? :rolleyes::rolleyes:

Giữ thì có dùng hay không dùng nữa?
Giữ hoài (cất kỹ) mà không dùng thì nó (sức khỏe) cũng tự yếu đi mờ. Bác ấy bảo, "Ờ, giữ gìn sức khỏe nên nghỉ vào đây viết bài." Vậy tính sao?

Sao không kêu bác ấy dùng 'xả láng' mà vẫn khỏe. :D:D
 
Upvote 0
Tiếng dùng thông dụng cho mảng trong lập trình:
chiều thứ nhất: dòng (row)
chiều thứ hai: cột (column)
chiều thứ ba: trang, hoặc lớp (page)

Khái niệm mảng ở hầu hết các bài trong thớt này là khái niệm mảng của lập trình. VBA là một ngôn ngữ lập trình. Dùng trong môi trường Excel thì nó được mặc định để sử dụng các đối tượng của Excel (Workbook, Worksheet, Range,... là điển hình của các đối tượng này). Nhưng khái niệm mảng của VBA cũng vẫn là khái niệm mảng của lập trình.

Excel là hiện thân của bảng tính trải rộng cho nên chủ yếu nó chỉ dùng 2 chiều. Nhưng "chủ yếu" không có nghĩa là luôn luôn. Sheets là thể hiện của chiều thứ ba. (lưu ý là nghĩa của page tương đối gần với sheet). Đối tượng loại Range của Excel có một số hàm để ngầm chuyển đổi giữa Range và mảng 2 chiều. Đối tượng loại WorksheetFunction cũng có khả năng tự chuyển đổi giữa mảng và Range. Tùy theo hàm mà nó chuyển 1 dòng/cột qua mảng 1 chiều, hay nhiều dòng và cột qua mảng 2 chiều. Hiện tại thì tôi chưa biết cách chuyển nhiều sheets thành mảng 3 chiều.

Người hởi ở bài #25 và #27 hiển nhiên là chưa phân biệt được VBA và Excel.
Đã hiểu bài của Bác VetMini. 1 Sheet chỉ là mảng 2 chiều. Duyệt thêm sheet khác thành 3 chiều. Các object dùng để tham chiếu như : worksheets(""), sheets("") , ...có phải vậy không Bác
 
Upvote 0
Kêu bác ấy giữ sức khỏe làm gì nhỉ? :rolleyes::rolleyes:

Giữ thì có dùng hay không dùng nữa?
Giữ hoài (cất kỹ) mà không dùng thì nó (sức khỏe) cũng tự yếu đi mờ. Bác ấy bảo, "Ờ, giữ gìn sức khỏe nên nghỉ vào đây viết bài." Vậy tính sao?

Sao không kêu bác ấy dùng 'xả láng' mà vẫn khỏe. :D:D

Xin chào, befaint

Có sức khỏe là có tất cả mà bạn :)
Vì hôm trước bác VetMini có nói là bác ấy buồn ngủ quá. Hơn nữa Oanh Thơ(OT) được biết trong chủ đề này cũng có ít nhất ba người đáng tuổi ông nên khi nhận đc sự giúp đỡ OT gửi cảm ơn không mà vẫn cảm thấy thiếu thiếu gì đó nên cũng gửi thêm lời chúc sức khỏe đến người đó, ba người nhiều tuổi mà OT nhớ không nhầm là (>70) cụ thể bác:Siwtom, VetMini,DQ_SA. Vì ba bác vẫn có thể viết bài thường xuyên nên OT gọi là bác.
Rất khâm phục các bác, lên diễn đàn học hỏi mà được những người có kinh nghiệm như các bác chỉ giáo chẳng còn gì bằng.
Có bác tính lại hay nói thẳng nói thật mới đầu cảm giác hơi khó gần nhưng thực sự lại rất quan tâm vì đã nhiều lần giúp đỡ OT, OT ngẫm lại tính giống người ông của mình, khi ông còn sống khỏe OT cũng hay bị ông mắng chửi lắm giờ ông không còn OT lại cảm thấy nhớ ông nhiều nhất.. huhu
...
Xin lỗi.. lại bắt đầu lan man rồi..

Bạn cũng hay thức khuya lắm đó befaint.
Hi nhân đây cũng cảm ơn bạn nhé befaint cảm ơn bạn cũng đã nhiều lần giúp mình.
Chúc bạn tương lai thành công rực rỡ!
 
Upvote 0
Xin chào, befaint

Có sức khỏe là có tất cả mà bạn :)
Vì hôm trước bác VetMini có nói là bác ấy buồn ngủ quá. Hơn nữa Oanh Thơ(OT) được biết trong chủ đề này cũng có ít nhất ba người đáng tuổi ông nên khi nhận đc sự giúp đỡ OT gửi cảm ơn không mà vẫn cảm thấy thiếu thiếu gì đó nên cũng gửi thêm lời chúc sức khỏe đến người đó, ba người nhiều tuổi mà OT nhớ không nhầm là (>70) cụ thể bác:Siwtom, VetMini,DQ_SA. Vì ba bác vẫn có thể viết bài thường xuyên nên OT gọi là bác.
Rất khâm phục các bác, lên diễn đàn học hỏi mà được những người có kinh nghiệm như các bác chỉ giáo chẳng còn gì bằng.
Có bác tính lại hay nói thẳng nói thật mới đầu cảm giác hơi khó gần nhưng thực sự lại rất quan tâm vì đã nhiều lần giúp đỡ OT, OT ngẫm lại tính giống người ông của mình, khi ông còn sống khỏe OT cũng hay bị ông mắng chửi lắm giờ ông không còn OT lại cảm thấy nhớ ông nhiều nhất.. huhu
...
Xin lỗi.. lại bắt đầu lan man rồi..

Bạn cũng hay thức khuya lắm đó befaint.
Hi nhân đây cũng cảm ơn bạn nhé befaint cảm ơn bạn cũng đã nhiều lần giúp mình.
Chúc bạn tương lai thành công rực rỡ!
@befaint
Anh befaint đã được quan tâm rồi nhé, sau này tiếp tục giúp đỡ chị OT nhé anh. Lúc 2 giờ sáng...:oops:
Trong đây là thấy chị ấy dễ xương nhất luôn. Cảm ơn ngọt ngào.
@Nguyễn Hoàng Oanh Thơ
Chị cảm ơn anh nhiều nhiều để anh tràn đầy cảm hứng viết code. để lớp em út học hỏi nhỉ
 
Lần chỉnh sửa cuối:
Upvote 0
@befaint
Anh befaint đã được quan rồi nhé, sau này tiếp tục giúp đỡ chị OT nhé anh. Lúc 2 giờ sáng...:oops:

Hi, có thể do chiều nay OT uống cốc nước chè không nghĩ lại mất ngủ đến tận bây giờ.
Có thể một phần do đang ngồi bàn học thêm ít tiếng Tây nên OT chưa buồn ngủ.
Giờ OT cũng chuẩn bị ngủ đây, chúc bạn ngủ ngon!
 
Upvote 0
lan mam 1 chút ... cũng đâu đó trên GPE này có ai đó nói VBA không phải là ngôn ngữ lập trình ....
Nhưng ai đó lại nói nó VBA là ngôn ngữ lập trình .... vậy ko biết ai nói đúng ai nói sai ta ??!!!

Hóng xem mở rộng kiến thức 1 chút :p:D:oops:
 
Upvote 0
lan mam 1 chút ... cũng đâu đó trên GPE này có ai đó nói VBA không phải là ngôn ngữ lập trình ....
Nhưng ai đó lại nói nó VBA là ngôn ngữ lập trình .... vậy ko biết ai nói đúng ai nói sai ta ??!!!

Hóng xem mở rộng kiến thức 1 chút :p:D:oops:
1. VBA không phải là ngôn ngữ lập trình tổng quát (như Java, C/C++), không phải lập trình giáo khoa (Pascal), không phải lập trình HĐT (Java, Delphi, C#, C++), không phải lập trình web (PHP, Java, C#)

2. VBA là ngôn ngữ lập trình ứng dụng hổ trợ cho các phần mềm lớn của Microsoft. Điển hình là Office. Lưu ý là ngay cả từ "ứng dụng" ở trên cũng trong phạm vi hạn hẹp, tức là nó chỉ giới hạn trong các ứng dụng của Microsoft. Có thể các hệ thống khác cũng dùng được, nhưng không có nghĩa là họ chịu trách nhiệm bảo trì.

3. Trên thực tế còn vài ngôn ngữ lập trình ứng dụng được giới lập trình ủng hộ rất mạnh. Điển hình là Python (rộng), R (thống kê), PHP (web).

4. Khi lạm dụng VBA để làm những công việc điều khiển hệ thống, quý vị đã cố tình quên rằng Windows có Powershell làm việc hiệu quả hơn. Trên thực tế, nếu không cần sử dụng các đối tượng của Excel hay Access thì làm việc với VBScript dễ dàng hơn VBA. (theo đúng tên của nó, script là loại ngôn ngữ "thảo", không phải là lập trình tổng quát)
 
Upvote 0
Web KT

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

Back
Top Bottom