Hỏi về mảng trong excel, kết hợp giữa Range và Cells

Liên hệ QC

NguyenVietThinh08

Thành viên chính thức
Tham gia
12/5/20
Bài viết
86
Được thích
4
Xin chào các bác, em có 1 mảng động như này
Sheet1.Range(Cells(2, i), Cells(10, i)).Copy
Em muốn copy từ ô A2 đến ô A10 hoặc B2 đên ô B10 tùy vào giá trị của i, nhưng khi viết lệnh như vậy đều bị báo lỗi, không biết các bác có cách nào giúp em không ạ,
Em xin chân thành cảm ơn các bác
 
Lỗi gì thế bạn, phải có thông báo nội dung lỗi chứ, hoặc là đính kèm file lên. Bạn mô tả vậy cũng khó phán đoán lắm, bạn thử sửa như sau xem được không:
Sheet1.Range(Cells(2, i), Cells(10, i)).Copy
Thành:
With Sheet1
.Range(. Cells(2, i),. Cells(10, i)).Copy
End with
 
Upvote 0
Lỗi gì thế bạn, phải có thông báo nội dung lỗi chứ, hoặc là đính kèm file lên. Bạn mô tả vậy cũng khó phán đoán lắm, bạn thử sửa như sau xem được không:
Sheet1.Range(Cells(2, i), Cells(10, i)).Copy
Thành:
With Sheet1
.Range(. Cells(2, i),. Cells(10, i)).Copy
End with
Mình thì cũng không rành lắm, chỉ thấy chạy mã đến đó là dừng, báo lỗi, tức là chạy đến đó là công thức Sheet1.Range(Cells(2, i), Cells(10, i)).Copy sai, có thể cách kết hợp giữa Range và cells là sai cú pháp
 
Upvote 0
Mình thì cũng không rành lắm, chỉ thấy chạy mã đến đó là dừng, báo lỗi, tức là chạy đến đó là công thức Sheet1.Range(Cells(2, i), Cells(10, i)).Copy sai, có thể cách kết hợp giữa Range và cells là sai cú pháp
Nên copy toàn bộ SUB đó ra đây, Post (tải) file đầy đủ lên thì tốt hơn

Đưa thế này thì sai sao biết
i=? bao nhiêu
Copy đi đến đâu (kết quả copy đặt ở đâu) hay khác?
 
Upvote 0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim j As Integer
Dim k As Integer
Dim c As Integer
k = Target.Row
j = Target.Column
c = k - 1
Range(Cells(2, c), Cells(10, c)).Copy 'co van de ở lệnh này
Sheet2.Select
Range("H2").Select
ActiveSheet.Paste
End Sub
 
Upvote 0
Xin chào các bác, em có 1 mảng động như này
Sheet1.Range(Cells(2, i), Cells(10, i)).Copy
Em muốn copy từ ô A2 đến ô A10 hoặc B2 đên ô B10 tùy vào giá trị của i, nhưng khi viết lệnh như vậy đều bị báo lỗi, không biết các bác có cách nào giúp em không ạ,
Em xin chân thành cảm ơn các bác
Bạn tham khảo cách chọn ô, vùng,... Chú ý code mẫu chỉ áp dụng cho sheet hiện hành
Mã:
Sub chon_1_cell_da_biet()
Range("B1").Select
MsgBox Selection.Address(0, 0) & " is selected"
[B1].Select
MsgBox Selection.Address(0, 0) & " is selected"
Cells(1, 2).Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("B" & 1).Select
MsgBox Selection.Address(0, 0) & " is selected"
Cells(1, "B").Select
MsgBox Selection.Address(0, 0) & " is selected"
End Sub
Sub Select_Cell_Range_Row_Column()
Range("B1:B5").Select
MsgBox Selection.Address(0, 0) & " is selected"
[B1:B5].Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("B1:B" & 5).Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("B" & 1 & ":B5").Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("B1:B5,D3:D10").Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("C:C").Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("C:F").Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("C:C,E:E,G:G").Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("3:3").Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("3:5").Select
MsgBox Selection.Address(0, 0) & " is selected"
Range("3:3, 5:5").Select
MsgBox Selection.Address(0, 0) & " is selected"
Columns(4).Select
MsgBox Selection.Address(0, 0) & " is selected"
Rows(4).Select
MsgBox Selection.Address(0, 0) & " is selected"
Columns("A").Select
MsgBox Selection.Address(0, 0) & " is selected"
Columns("A:C").Select
MsgBox Selection.Address(0, 0) & " is selected"
Columns(3).Select
MsgBox Selection.Address(0, 0) & " is selected"
End Sub
Sub chon_nhieu_vung()
Union([A1:C2], [D7:D10], [G1:G10], [I3]).Select
MsgBox Selection.Address(0, 0) & " is selected"
End Sub
 
Upvote 0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim j As Integer
Dim k As Integer
Dim c As Integer
k = Target.Row
j = Target.Column
c = k - 1
Range(Cells(2, c), Cells(10, c)).Copy 'co van de ở lệnh này
Sheet2.Select
Range("H2").Select
ActiveSheet.Paste
End Sub

Chưa biết bên trong thế nào, nhưng cứ select kiểu thế, nó loạn lên vì cứ mỗi lần có select nó lại gọi SUB trên

thử làm như sau
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo Error_Handler
    Application.EnableEvents = False
    
        'code o day
        'code o day
        'code o day
    
Error_Handler:
    Application.EnableEvents = True
End Sub
 
Upvote 0
select range trước rồi mới selection.copy thử xem bạn ơi
 
Upvote 0
Xin chào các bác, em có 1 mảng động như này
Sheet1.Range(Cells(2, i), Cells(10, i)).Copy
Em muốn copy từ ô A2 đến ô A10 hoặc B2 đên ô B10 tùy vào giá trị của i, nhưng khi viết lệnh như vậy đều bị báo lỗi, không biết các bác có cách nào giúp em không ạ,
Em xin chân thành cảm ơn các bác
1/ Bạn hỏi mà không cụ thể, rõ ràng cho lắm và cũng chẳng hiểu bạn Copy và gán vào chỗ nào? Có gán xuống tiếp theo hay không?
2/ Tôi làm đại (hên thì trúng) cách chọn dữ liệu cột bất kỳ (tùy theo dữ liệu chứa trong cột) Copy và Paste vào A4 của Sheet2.
Cách thao tác:
- Gõ nhập số cột cần Copy vào K2 của Sheet1 rồi nhấn nút để xem kết quả ở Sheet2.
- Lưu ý: Con số K2 ở Sheet1 là dựa vào số thứ tự cột được đánh từ A1: G1 ở Sheet1.
 

File đính kèm

  • Chọn cột để Copy.xlsm
    41.8 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim j As Integer
Dim k As Integer
Dim c As Integer
k = Target.Row
j = Target.Column
c = k - 1
Range(Cells(2, c), Cells(10, c)).Copy 'co van de ở lệnh này
Sheet2.Select
Range("H2").Select
ActiveSheet.Paste
End Sub
Lệnh c = k - 1 ngồ ngộ
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim j As Integer, k As Integer, c As Integer
  k = Target.Row
  j = Target.Column
  c = k - 1
  If c > 0 Then Range(Cells(2, c), Cells(10, c)).Copy Sheet2.Range("H2")
End Sub
 
Upvote 0
Ý tưởng của em là như này, em tạo 1 private sub trong sheet2. em muốn copy 1 vùng trong sheet1 và paste vào ô H2 ở sheet2, Tuy nhiên cấu trúc câu lệnh bị lỗi ở dòng bôi vàng đầu tiên, em muốn hỏi nguyên nhân do đâu và khắc phục thế nào ạ, đây là private sub chứ không phải Sub ạ
Bài đã được tự động gộp:

Ý tưởng của em là như này, em tạo 1 private sub trong sheet2. em muốn copy 1 vùng trong sheet1 và paste vào ô H2 ở sheet2, Tuy nhiên cấu trúc câu lệnh bị lỗi ở dòng bôi vàng đầu tiên, em muốn hỏi nguyên nhân do đâu và khắc phục thế nào ạ, đây là private sub chứ không phải Sub ạ
 

File đính kèm

  • Capture.PNG
    Capture.PNG
    9.8 KB · Đọc: 11
  • Capture.PNG
    Capture.PNG
    9.8 KB · Đọc: 10
Upvote 0
Ý tưởng của em là như này, em tạo 1 private sub trong sheet2. em muốn copy 1 vùng trong sheet1 và paste vào ô H2 ở sheet2, Tuy nhiên cấu trúc câu lệnh bị lỗi ở dòng bôi vàng đầu tiên, em muốn hỏi nguyên nhân do đâu và khắc phục thế nào ạ, đây là private sub chứ không phải Sub ạ
Vào K2 gõ số cột cần Copy rồi nhấn Enter để xem kết quả.
 

File đính kèm

  • Chọn cột để Copy.xlsm
    39.5 KB · Đọc: 3
Upvote 0
Vào K2 gõ số cột cần Copy rồi nhấn Enter để xem kết quả.
Bác hiểu nhầm ý em rồi, vấn đề của em là lấy dữ liệu ở sheet1 paste vào sheet2, trong khi đó đang làm việc ở sheet2, sheet 2 chứa private sub
của bác là lấy dữ liệu ở sheet chứa private sub paste sang sheet không chứa private sub
 
Upvote 0
Sheet1.Range(Cells(2, i), Cells(10, i)).Copy

Hai cái objects tô đậm trên dựa vào default sheet, luc sấy có lẽ là sheet2.
Lệnh trên bảo Sheet1 lấy range của sheet2 thì làm sao nó chịu.

Chỉnh lại như code bài #2 là đúng rồi. (xóa dấu cách giữa dấu chấm và Cells)
 
Upvote 0
Có lẽ vậy, nếu em chỉ đích danh ô trong đó thì lại hoàn toàn copy được. VD Sheet1.Range(Cells(2, 2), Cells(10, 2)).Copy ,
để biến vào như này "Sheet2.Range(Cells(2, i), Cells(10, i)).Copy " vẫn copy được
Nhưng đảo thành Sheet1.Range(Cells(2, i), Cells(10, i)).Copy thì lại báo lỗi
vậy bác có cách nào không ạ, xin cao nhân chỉ giáo
 
Upvote 0
Em muốn copy từ ô A2 đến ô A10 hoặc B2 đên ô B10 tùy vào giá trị của i.
.....................................................................................................................................................
Bác hiểu nhầm ý em rồi, vấn đề của em là lấy dữ liệu ở sheet1 paste vào sheet2, trong khi đó đang làm việc ở sheet2, sheet 2 chứa private sub
của bác là lấy dữ liệu ở sheet chứa private sub paste sang sheet không chứa private sub
1/ Bạn gõ số cột cần Copy vào K2 của Sheet2 rồi nhấn Enter, lần này không được nữa thì tôi chạy.
2/ Rút kinh nghiệm lần sau không viết từ ngữ này "cao nhân" nữa, nếu có thêm một lần nữa thì tôi cũng chạy luôn (vì tôi thuộc nhóm người cao tuổi).
3/ Bạn mới tham gia diễn đàn thì cũng nên biết nhấn nút thích để chứng tỏ mình có quan tâm đến bài viết và cũng tỏ lòng cám ơn những người đã có ý kiến hoặc giúp đỡ cho mình, đó cũng là động cơ để họ tiếp tục giúp đỡ tiếp.
 

File đính kèm

  • Chọn cột Copy.xlsm
    40.3 KB · Đọc: 1
Lần chỉnh sửa cuối:
Upvote 0
Có lẽ vậy, nếu em chỉ đích danh ô trong đó thì lại hoàn toàn copy được. VD Sheet1.Range(Cells(2, 2), Cells(10, 2)).Copy ,
để biến vào như này "Sheet2.Range(Cells(2, i), Cells(10, i)).Copy " vẫn copy được
Nhưng đảo thành Sheet1.Range(Cells(2, i), Cells(10, i)).Copy thì lại báo lỗi
vậy bác có cách nào không ạ, xin cao nhân chỉ giáo
Bài 2 mình đã nói là sửa:
Sheet1.Range(Cells(2, i), Cells(10, i)).Copy

sửa thành:
Mã:
With Sheet1
    .Range(.Cells(2, i),.Cells(10, i))
End with
và bài 14 cũng đã khẳng định lại , chắc bạn chưa làm?
 
Upvote 0
Vẫn báo lỗi ạ, cái này em cũng đã thử rồi
Vẫn báo lỗi ạ, cái này em cũng đã thử rồi

Mã:
With Sheet1
     Debug.Print .Range(.Cells(2, i), .Cells(10, i)).Address 'them dong debug kiem soat loi o dong nao
    .Range(.Cells(2, i), .Cells(10, i)).Copy
End With
Bài đã được tự động gộp:

Mã:
With Sheet1
     Debug.Print .Range(.Cells(2, i), .Cells(10, i)).Address 'them dong debug kiem soat loi o dong nao
    .Range(.Cells(2, i), .Cells(10, i)).Copy
End With
Có khi bạn lại gộp ô lung tung không chừng.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom