Chuyên mục xử lý, gỡ rối code VBA (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,957
Vậy bạn sửa lại thế này xem sao.
Code:
Range("B2", Range("F65000").End(xlUp)).Select

Lọc và lấy số không trùng, Scripting.Dictionnary, Hàm thông dụng,FileSystemObject, Các hàm hữu ích

Gửi anh giaiphap,

Cám ơn đoạn code của anh rất nhiều. Trong trường hợp của mình, đoạn code đã hoạt động hiệu quả, đúng ý mình.

Tuy nhiên, do bảng data mỗi ngày một update, trong bảng data như bên dưới, nếu dùng đoạn code của anh thì chỉ chọn được vùng dữ liệu từ 1A đến 5D thôi, nguyên dòng E không được chọn.
VBA.jpg

Anh có thể hướng dẫn giúp em cách nào để có thể chọn dc toàn bộ vùng dữ liệu màu xanh, bât kể ô cuối cùng ( theo cột và dòng ) của vùng dữ liệu trống hay hay không trống ko ?

Cám ơn anh rất nhiều
 
Upvote 0
Ah mình đã tìm ra được cách rồi. Mình đảo vị trí trong công thức lại như sau

Range("F2", Range("B65000").End(xlUp)).Select

 
Upvote 0
Ah mình đã tìm ra được cách rồi. Mình đảo vị trí trong công thức lại như sau

Range("F2", Range("B65000").End(xlUp)).Select


Cột B trống cũng "tèo"
Thử cái này xem sao:
Mã:
Range("B2:B" & [A65536].End(xlUp).Row).Resize(, [IV1].End(xlToLeft).Column - 1).Select
 
Upvote 0
Ah mình đã tìm ra được cách rồi. Mình đảo vị trí trong công thức lại như sau

Range("F2", Range("B65000").End(xlUp)).Select
Bạn phải sửa lại như vầy mới đúng
Range(Range("IV1").End(xlToLeft).Offset(1,), Range("A65000").End(xlUp).Offset(,1)).Select
 
Upvote 0
Thật sự đoạn code của mình vẫn ok. Mình đã thử, các bạn thử xem. Ô 1B trống ko vấn đề gì

Range("F2", Range("B65000").End(xlUp)).Select

vba.jpg
 
Upvote 0
Cột B trống cũng "tèo"
Thử cái này xem sao:
Code:

Range("B2:B" & [A65536].End(xlUp).Row).Resize(, [IV1].End(xlToLeft).Column - 1).Select

Cách này cũng rất hay vì trong trường hợp của mình, nếu ô 1E trống thì mình phải viết lại công thức, còn của bạn thì ko. Cám ơn bạn rất nhiều
 
Upvote 0
Các bác cho em hỏi chút là: Ta nên dùng: Range(...).ClearContents Hay Range(...) = VbnullString. ​Nó đều xóa dữ liệu nhưng có gì khác nhau về cách sử dụng ko ạ
 
Upvote 0
Topic Những câu hỏi về code, xin giải thích các code... đã quá dài nên mình đóng nó lại và mở topic khác
Tất cả những bài viết liên quan đến việc nhờ giải thích, xử lý và gỡ rối code VBA, các bạn vui lòng đăng tại đây!
Cảm ơn

Em nhờ anh vào đây xem và giúp đỡ em với ạ, có anh huuthang_bd đã viết giúp em rồi nhưng hiện tại còn một số vấn đề chỉnh sửa nhưng anh ấy bận nên chưa thể hoàn thiện hơn được, mong nhận được sự giúp đỡ. Em cũng xin nói rõ hơn là em không biết về VBA nên có gì các anh bỏ quá cho, em xin chân thành cảm ơn: http://www.giaiphapexcel.com/forum/showthread.php?119623-X%C3%A2y-d%E1%BB%B1ng-d%E1%BB%B1-%C3%A1n-Ch%E1%BA%A5m-%C4%91i%E1%BB%83m-thi-%C4%91%E1%BA%A5u-v%C3%B5-thu%E1%BA%ADt-tr%C3%AAn-m%C3%A1y-t%C3%ADnh&p=758193#post758193
 
Upvote 0
Chào A/C và các Bạn!
Hiện tại Em đang tập viết code: Copy công thức, rồi paste dạng Value (nhằm giảm bớt khối công thức khổng lồ cho file và chỉ tính toán khi chạy code)

Ở bảng tính trong file đính kèm những cột tô mầu xanh là những cột có công thức. Em đang muốn thực hiện copy công thức ở dòng số 10, những cột tô mầu xanh. Rồi pase xuống các cột tương ứng từ dòng 11:20 dạng Value

Hiện tại các vùng công thức ko liên nhau, nó cách cột nên Em phải làm 3 code để chạy từng cột một. Em mong A/C và các bạn giúp Em viết code ngắn gọn hơn.
Mong A/C và các Bạn giúp. Em cám ơn!



Đây là code em đang làm. Mong A/C đừng cười ạ

Sub Copy_Paste_ColumnI() 'COPY VA PASTE COT I
On Error Resume Next
Sheet1.Range("I10").Select
Selection.Copy
Sheet1.Range("I11:I20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
End Sub


Sub Copy_Paste_ColumnL() 'COPY VA PASTE COT L
On Error Resume Next
Sheet1.Range("L10").Select
Selection.Copy
Sheet1.Range("L11:L20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
End Sub


Sub Copy_Paste_ColumnO() 'COPY VA PASTE COT O
On Error Resume Next
Sheet1.Range("O10").Select
Selection.Copy
Sheet1.Range("O11:O20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
End Sub


Sub CopyAndPasteFull() 'Làm một bottem trong sheet để bấm
Copy_Paste_ColumnI
Copy_Paste_ColumnL
Copy_Paste_ColumnO
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Giúp mình code tạo chat Box trong mạng LAN

Chào các anh chị:
Mình muốn tạo một chat box bằng file excel (Nếu ok có thể chèn vào add-in) để chat trong mạng LAN
Ý tưởng của mình là sử dụng một file csv để trên server chung lưu nội dung chat.
Hộp thoại chat chỉ hiện thị 200 tin nhắn cuối.
sau 5s nội dung chat lại tự cập nhật mới 1 lần.
Mong anh chị chỉ giùm.!
Xin cảm ơn.!
 

File đính kèm

Upvote 0
Chào A/C và các Bạn!
Hiện tại Em đang tập viết code: Copy công thức, rồi paste dạng Value (nhằm giảm bớt khối công thức khổng lồ cho file và chỉ tính toán khi chạy code)

Ở bảng tính trong file đính kèm những cột tô mầu xanh là những cột có công thức. Em đang muốn thực hiện copy công thức ở dòng số 10, những cột tô mầu xanh. Rồi pase xuống các cột tương ứng từ dòng 11:20 dạng Value

Hiện tại các vùng công thức ko liên nhau, nó cách cột nên Em phải làm 3 code để chạy từng cột một. Em mong A/C và các bạn giúp Em viết code ngắn gọn hơn.
Mong A/C và các Bạn giúp. Em cám ơn!



Đây là code em đang làm. Mong A/C đừng cười ạ

Sub Copy_Paste_ColumnI() 'COPY VA PASTE COT I
On Error Resume Next​
Sheet1.Range("I10").Select​
Selection.Copy​
Sheet1.Range("I11:I20").Select​
Selection.PasteSpecial Paste:=xlPasteFormulas​
End Sub


Sub Copy_Paste_ColumnL() 'COPY VA PASTE COT L
On Error Resume Next
Sheet1.Range("L10").Select
Selection.Copy
Sheet1.Range("L11:L20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas​
End Sub



Sub Copy_Paste_ColumnO() 'COPY VA PASTE COT O
On Error Resume Next
Sheet1.Range("O10").Select
Selection.Copy
Sheet1.Range("O11:O20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas​
End Sub


Sub CopyAndPasteFull() 'Làm một bottem trong sheet để bấm
Copy_Paste_ColumnI
Copy_Paste_ColumnL
Copy_Paste_ColumnO​
End Sub
bạn dùng code
Mã:
Sub CopyAndPasteFull()
Dim j As Integer, cot As Variant
cot = Array("I", "L", "O")
For j = 0 To 2
    Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value = Sheet1.Cells(10, cot(j)).Value
Next j
End Sub
 
Upvote 0
Chào A/C và các Bạn!
Hiện tại Em đang tập viết code: Copy công thức, rồi paste dạng Value (nhằm giảm bớt khối công thức khổng lồ cho file và chỉ tính toán khi chạy code)

Ở bảng tính trong file đính kèm những cột tô mầu xanh là những cột có công thức. Em đang muốn thực hiện copy công thức ở dòng số 10, những cột tô mầu xanh. Rồi pase xuống các cột tương ứng từ dòng 11:20 dạng Value

Hiện tại các vùng công thức ko liên nhau, nó cách cột nên Em phải làm 3 code để chạy từng cột một. Em mong A/C và các bạn giúp Em viết code ngắn gọn hơn.
Mong A/C và các Bạn giúp. Em cám ơn!



Đây là code em đang làm. Mong A/C đừng cười ạ

Sub Copy_Paste_ColumnI() 'COPY VA PASTE COT I
On Error Resume Next
Sheet1.Range("I10").Select
Selection.Copy
Sheet1.Range("I11:I20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
End Sub


Sub Copy_Paste_ColumnL() 'COPY VA PASTE COT L
On Error Resume Next
Sheet1.Range("L10").Select
Selection.Copy
Sheet1.Range("L11:L20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
End Sub


Sub Copy_Paste_ColumnO() 'COPY VA PASTE COT O
On Error Resume Next
Sheet1.Range("O10").Select
Selection.Copy
Sheet1.Range("O11:O20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
End Sub


Sub CopyAndPasteFull() 'Làm một bottem trong sheet để bấm
Copy_Paste_ColumnI
Copy_Paste_ColumnL
Copy_Paste_ColumnO
End Sub
Bạn thử với:
[gpecode=vb]
Sub abc()
With Sheets("Data")
Range("I10:I21").Value = Range("I10:I21").Value
Range("L10:L21").Value = Range("L10:L21").Value
Range("O10:O21").Value = Range("O10:O21").Value
End With
End Sub
[/gpecode]
 
Upvote 0
bạn dùng code
Mã:
Sub CopyAndPasteFull()
Dim j As Integer, cot As Variant
cot = Array("I", "L", "O")
For j = 0 To 2
    Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value = Sheet1.Cells(10, cot(j)).Value
Next j
End Sub

Cám ơn Anh HieuCD nhiều! Anh ơi em chạy thử code. Nhưng chưa được. Nó đang copy công thức và paste luôn dạng Value (Anh giúp Em nó copy công thức ở dòng 10 của các cột có công thức tô mầu xanh. Rồi paste xuống các dòng 11:20 để hiện kết quả, sau đó mới gán sang Value). Anh xem giúp Em với nhé. Nhìn code của Anh ngắn gọn thật.
 
Upvote 0
Bạn thử với:
[gpecode=vb]
Sub abc()
With Sheets("Data")
Range("I10:I21").Value = Range("I10:I21").Value
Range("L10:L21").Value = Range("L10:L21").Value
Range("O10:O21").Value = Range("O10:O21").Value
End With
End Sub
[/gpecode]

Chào bạn Phulien1902! Mình chạy thử code thì nó đang bị copy giá trị của ô có công thức dòng 10 rồi nó paste luôn giá trị đó. Bạn giúp mình copy công thức ở dòng 10 của những cột mầu xanh. Rồi dán xuống dòng 11:20 cho ra kết quả. Rồi gán sang Value. Cám ơn Bạn nhiều!
 
Upvote 0
Em xin gửi lại code của Em. Nó chạy ra kết quả. Nhưng dài quá

Sub Copy_Paste_ColumnI() 'COPY VA PASTE COT I
On Error Resume Next
'Chon vung cong thuc
Sheet1.Range("I10").Select
Selection.Copy
'Chon vung va dan cong thuc
Sheet1.Range("I11:I20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
'Chuyen cong thuc sang Value
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub


Sub Copy_Paste_ColumnL() 'COPY VA PASTE COT L
'Chon vung cong thuc
Sheet1.Range("L10").Select
Selection.Copy​
'Chon vung va dan cong thuc
Sheet1.Range("L11:L20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas​
'Chuyen cong thuc sang Value
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
End Sub

Sub Copy_Paste_ColumnO() 'COPY VA PASTE COT O
'Chon vung cong thuc
Sheet1.Range("O10").Select
Selection.Copy​
'Chon vung va dan cong thuc
Sheet1.Range("O11:O20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas​
'Chuyen cong thuc sang Value
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
End Sub


Sub CopyAndPasteFull() 'CHAY CHO 3 SUB TREN
Copy_Paste_ColumnI
Copy_Paste_ColumnL
Copy_Paste_ColumnO​
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn thử với:
[gpecode=vb]
Sub abc()
With Sheets("Data")
Range("I10:I21").Value = Range("I10:I21").Value
Range("L10:L21").Value = Range("L10:L21").Value
Range("O10:O21").Value = Range("O10:O21").Value
End With
End Sub
[/gpecode]


Mình dựa theo code của bạn viết, nó cũng chạy được rồi. Các bạn xem có giải pháp nào ngắn gọn và hợp lý hơn. Giúp mình nhé. Sau bao nhiêu lần ko giám học VBA, lần này đành post bài để học hỏi dần từng cái một theo thực tế. Mong các bạn giúp đỡ. Cảm ơn các bạn nhiều!

Sub CopyAndPaste ()
With Sheets("Data")
'Vung cot I
Range("I10").Select
Selection.Copy
Range("I11:I20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
'Vung cot L
Range("L10").Select
Selection.Copy
Range("L11:L20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
'Vung cot O
Range("O10").Select
Selection.Copy
Range("O11:O20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
End With
End Sub
 
Upvote 0
Cám ơn Anh HieuCD nhiều! Anh ơi em chạy thử code. Nhưng chưa được. Nó đang copy công thức và paste luôn dạng Value (Anh giúp Em nó copy công thức ở dòng 10 của các cột có công thức tô mầu xanh. Rồi paste xuống các dòng 11:20 để hiện kết quả, sau đó mới gán sang Value). Anh xem giúp Em với nhé. Nhìn code của Anh ngắn gọn thật.
vậy thì chỉnh lại
Mã:
Sub CopyAndPasteFull()
Dim j As Integer, cot As Variant
cot = Array("I", "L", "O")
For j = 0 To 2
    Sheet1.Cells(10, cot(j)).Copy Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1)
    Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value = Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value
Next j
End Sub
 
Upvote 0
vậy thì chỉnh lại
Mã:
Sub CopyAndPasteFull()
Dim j As Integer, cot As Variant
cot = Array("I", "L", "O")
For j = 0 To 2
    Sheet1.Cells(10, cot(j)).Copy Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1)
    Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value = Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value
Next j
End Sub


Code của Anh ngắn gọn thật. Em cảm ơn Anh Hiếu nhé. Đợt này trong các bài diễn đàn không để nút cám ơn nhỉ? Em tìm mãi mà ko thấy.

Em đọc có một số chỗ muốn hỏi Anh và các bạn. Phần tô mầu đỏ ở dưới, do rất dốt về code, nên em chưa hiểu, có gì buồn cười mong A/C và các bạn thông cảm. hic hic

Sub CopyAndPasteFull()
Dim j As Integer, cot As Variant
'Biến J có phải là ẩn của các cột cần dán công thức?
cot = Array("I", "L", "O")
For j = 0 To 2
'Đoạn J=0 to 2 này em chưa hình dung ra
Sheet1.Cells(10, cot(j)).Copy Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1)
'đoạn này có phải là Copy công thức ở dòng số 10. Nhưng sao có chỗ có số 11 "...Cells(11,cot(j) "... ạ
Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value = Sheet1.Cells(11, cot(j)).Resize(20 - 11 + 1).Value
Next j
End Sub
 
Upvote 0
Mình dựa theo code của bạn viết, nó cũng chạy được rồi. Các bạn xem có giải pháp nào ngắn gọn và hợp lý hơn. Giúp mình nhé. Sau bao nhiêu lần ko giám học VBA, lần này đành post bài để học hỏi dần từng cái một theo thực tế. Mong các bạn giúp đỡ. Cảm ơn các bạn nhiều!

Sub CopyAndPaste ()
With Sheets("Data")
'Vung cot I
Range("I10").Select
Selection.Copy
Range("I11:I20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
'Vung cot L
Range("L10").Select
Selection.Copy
Range("L11:L20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
'Vung cot O
Range("O10").Select
Selection.Copy
Range("O11:O20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues​
End With
End Sub
Bạn xem code này rồi tùy biến cho côn việc của bạn xem sao:
PHP:
Public Sub EPG()
Dim I As Long
For I = 9 To 15 Step 3
    Cells(11, I).Resize(10).FormulaR1C1 = Cells(10, I).FormulaR1C1
    Cells(11, I).Resize(10).Value = Cells(11, I).Resize(10).Value
Next I
End Sub
 
Upvote 0
Chào bạn Phulien1902! Mình chạy thử code thì nó đang bị copy giá trị của ô có công thức dòng 10 rồi nó paste luôn giá trị đó. Bạn giúp mình copy công thức ở dòng 10 của những cột mầu xanh. Rồi dán xuống dòng 11:20 cho ra kết quả. Rồi gán sang Value. Cám ơn Bạn nhiều!
Lúc sáng do đọc không ky bài của bạn, nên nghĩ yêu cầu của bạn là đánh chết số.
Vậy bài toán của bạn là: FillDown Formula và đánh chết số.
Có thể có vài cách, nhưng tôi thấy cách của bạn HieuCD là ngắn gọn, tuy nhiên tôi mượn Code của bạn ấy sửa lại 1 chút như sau:
PHP:
Sub CopyAndPasteFull()
Dim j As Integer, cot As Variant
cot = Array("I", "L", "O")
For j = 0 To 2 
   Sheet1.Cells(10, cot(j)).Copy Sheet1.Cells(11, cot(j)).Resize(10)
    Sheet1.Cells(10, cot(j)).Resize(10).Value = Sheet1.Cells(10, cot(j)).Resize(10).Value
Next j
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom