Chuyên mục xử lý, gỡ rối code VBA (1 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,954
If Rng.Viru

Đọc kiểu code là biết nguồn của KuTools đem về chế lại.

Code này hoạt động bạn chọn một vùng, sau đó nó sẽ copy và gán lại giá trị từng cell trong vùng đó thành dạng Text.
Nên bạn sẽ kiểm tra xem thuộc tính của cell đó có bị Hidden không bằng code

If Rows(Rng.Row).EntireRow.Hidden = False Then
Rng.Value = Rng.Text
End If
Anh ơi, copy cái đoạn code của anh vào đâu hả anh. Anh thông cảm, em biết ít kiến thức lắm. Em chỉ biết copy code đã viết sẵn rồi dùng thui
 
Upvote 0
Anh ơi, copy cái đoạn code của anh vào đâu hả anh. Anh thông cảm, em biết ít kiến thức lắm. Em chỉ biết copy code đã viết sẵn rồi dùng thui
Không biết code mà cứ thích dùng code.
Mã:
Sub DisplayedToActual()
'Updateby20131126
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "Hoc Excel Online"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
For Each Rng In WorkRng
If Rows(Rng.Row).EntireRow.Hidden = False Then
Rng.Value = Rng.Text
End If
Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Không biết code mà cứ thích dùng code.
Mã:
Sub DisplayedToActual()
'Updateby20131126
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "Hoc Excel Online"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
For Each Rng In WorkRng
If Rows(Rng.Row).EntireRow.Hidden = False Then
Rng.Value = Rng.Text
End If
Next
Application.ScreenUpdating = True
End Sub
Em cám ơn anh. Cho em hỏi ngu thêm câu nữa là, em có sưu tầm đc 2 code để phục vụ công việc ( code này là cái thứ 3 ) em muốn nó thành 1 tool add in (hoặc 3 tool riêng biệt cũng được) trên thanh toolbar để dùng khi cần thì làm như thế nào ạ. Hiện tại cần gì em toàn phải xoá cái cũ đi để thêm cái mới vào
 
Upvote 0
Em cám ơn anh. Cho em hỏi ngu thêm câu nữa là, em có sưu tầm đc 2 code để phục vụ công việc ( code này là cái thứ 3 ) em muốn nó thành 1 tool add in (hoặc 3 tool riêng biệt cũng được) trên thanh toolbar để dùng khi cần thì làm như thế nào ạ. Hiện tại cần gì em toàn phải xoá cái cũ đi để thêm cái mới vào
Cần lên khung search và gõ tool addin bạn :)
 
Upvote 0
Em cám ơn anh. Cho em hỏi ngu thêm câu nữa là, em có sưu tầm đc 2 code để phục vụ công việc ( code này là cái thứ 3 ) em muốn nó thành 1 tool add in (hoặc 3 tool riêng biệt cũng được) trên thanh toolbar để dùng khi cần thì làm như thế nào ạ. Hiện tại cần gì em toàn phải xoá cái cũ đi để thêm cái mới vào
Nếu bạn muốn lưu làm công cụ để tiện thao tác bạn lưu file tên là.XLSA
http://www.giaiphapexcel.com/dienda...ạo-nạp-và-sử-dụng-add-ins-trong-ms-excel.379/
Bạn xem cái này thử !
 
Upvote 0
Tôi là thành viên mới thấy mục này quá hay, bản thân cũng đang tập tành học code, nhưng có 1 số code trong file tôi chưa biết viết thế nào, mong các Bác giúp dùm, cụ thể như sau:
Tôi đang làm 1 file excel để theo dõi đơn nhưng đang vướng chưa biết chuyển hàm thành code cụ thể thế nào, mong các Bác giúp đỡ thêm để tôi hoàn thiện.. Cụ thể theo file gửi kèm tôi chưa biết dùng code thế nào như sau:
- Với Sheet XLD:
+ Nếu các ô tại cột I và cột F của dòng đang nhập liệu khác rỗng và nếu ô tại cột F,H,I khi nhập có dữ liệu trùng với dữ liệu tại cột F,H,I ở dòng trên thì đánh dấu X vào cột Q của dòng đang nhập liệu (khi sửa nội dung dòng bất kỳ mà không trùng nữa thì bỏ dấu X).
+ Và tại cột S đánh dấu X nếu như tại dòng đó mà các cột A,B,C,D,E,F,G,H có dữ liệu và các cột I,J,K,L,M,N,O rỗng.
- Với sheet TD TQUYEN:
+ Nếu cột G khác rỗng và nếu các ô thuộc cột E,G của sheet TD TQUYEN bằng với các ô thuôc cột F,I của sheet XLD thì đếm số ô trùng nhau của cột I thuộc sheet XLD và đưa kết quả vào cột AA của sheet TD TQUYEN tại dòng trùng nhau.

Do dữ liệu tôi nhập rất lớn mà dùng hàm thì file quá nặng mà đang chưa biết viết code như thế nào, mong các Bác giúp đỡ, tôi cảm ơn rất nhiều. (Không biết đăng bài nhờ giúp ở đâu nên đăng ở đây có gì không đúng mong các Bác bỏ qua cho).
 

File đính kèm

Upvote 0
Gửi các anh, chị em
Tôi có lắp ghép được 1 đoạn code vào trong file như file đính kèm với mục đích khi mở file code sẽ rà các ô chỉ định có ngày chênh lệch với ngày hiện tại quá 30 nó sẽ gửi email qua Outlook
Khi code chạy, dù rất nhiều ô thỏa mãn việc phải gửi email, nhưng thực tế chỉ có khoảng 15 ô (15 email) được gửi.
Tôi không biết code thiếu hoặc nhầm cái gì mà không phải tất cả các ô thỏa mãn điều kiện thì được nhắc nhở bằng email
Mong các anh chị em kiểm tra giúp.
Xin cảm ơn
 

File đính kèm

Upvote 0
Chào Anh/Chị trong GPE!

Em có xem trên mạng video về lập trình nhập liệu VBA hay nên đã ứng dụng vào công việc của mình. Do chưa biết gì về VBA nên chỉ làm theo hướng dẫn của video, Khi làm thì có một số lỗi nên đã giải quyết thủ công nên code không được tối ưu,
Nên em Up lên này nhờ Anh/Chị Code lại cho tối ưu giúp em với nhé.
Cảm ơn nhiều!
 

File đính kèm

Upvote 0
Em chào mọi người, em có 1 file excel được export từ phần mềm ra, trước khi đến khâu tính toán thì phải xử lý dữ liệu thô. Mà dữ liệu thì lặp đi lặp lại, em ngồi copy cả ngày mới xong. Em nghe nói excel có macro chuyên xử lý những thao tác lặp đi lặp lại, tuy nhiên em không rõ về nó.
B1. Ở sheet "Before" Em copy toàn bộ cell màu đỏ ở cột G vào cột B tương ứng với thông tin của nhân viên ( cái này lâu nhất ).
B2. Xóa các cột và hàng màu em bôi màu vàng đi cho đỡ rối mắt
B3. Text to colums những mã mà em vừa copy xuống.
Như vậy em có file ở bên Sheet " After ".
Mọi người giúp em với. Em cám ơn.
 

File đính kèm

Upvote 0
Em chào mọi người, em có 1 file excel được export từ phần mềm ra, trước khi đến khâu tính toán thì phải xử lý dữ liệu thô. Mà dữ liệu thì lặp đi lặp lại, em ngồi copy cả ngày mới xong. Em nghe nói excel có macro chuyên xử lý những thao tác lặp đi lặp lại, tuy nhiên em không rõ về nó.
B1. Ở sheet "Before" Em copy toàn bộ cell màu đỏ ở cột G vào cột B tương ứng với thông tin của nhân viên ( cái này lâu nhất ).
B2. Xóa các cột và hàng màu em bôi màu vàng đi cho đỡ rối mắt
B3. Text to colums những mã mà em vừa copy xuống.
Như vậy em có file ở bên Sheet " After ".
Mọi người giúp em với. Em cám ơn.
Xem file
 

File đính kèm

Upvote 0
Tôi là thành viên mới thấy mục này quá hay, bản thân cũng đang tập tành học code, nhưng có 1 số code trong file tôi chưa biết viết thế nào, mong các Bác giúp dùm, cụ thể như sau:
Tôi đang làm 1 file excel để theo dõi đơn nhưng đang vướng chưa biết chuyển hàm thành code cụ thể thế nào, mong các Bác giúp đỡ thêm để tôi hoàn thiện.. Cụ thể theo file gửi kèm tôi chưa biết dùng code thế nào như sau:
- Với Sheet XLD:
+ Nếu các ô tại cột I và cột F của dòng đang nhập liệu khác rỗng và nếu ô tại cột F,H,I khi nhập có dữ liệu trùng với dữ liệu tại cột F,H,I ở dòng trên thì đánh dấu X vào cột Q của dòng đang nhập liệu (khi sửa nội dung dòng bất kỳ mà không trùng nữa thì bỏ dấu X).
+ Và tại cột S đánh dấu X nếu như tại dòng đó mà các cột A,B,C,D,E,F,G,H có dữ liệu và các cột I,J,K,L,M,N,O rỗng.
- Với sheet TD TQUYEN:
+ Nếu cột G khác rỗng và nếu các ô thuộc cột E,G của sheet TD TQUYEN bằng với các ô thuôc cột F,I của sheet XLD thì đếm số ô trùng nhau của cột I thuộc sheet XLD và đưa kết quả vào cột AA của sheet TD TQUYEN tại dòng trùng nhau.

Do dữ liệu tôi nhập rất lớn mà dùng hàm thì file quá nặng mà đang chưa biết viết code như thế nào, mong các Bác giúp đỡ, tôi cảm ơn rất nhiều. (Không biết đăng bài nhờ giúp ở đâu nên đăng ở đây có gì không đúng mong các Bác bỏ qua cho).
Nội dung theo dõi về tố cáo, khiếu nại trước đây (khoảng 7 năm) tôi viết hẳn 1 File theo dõi cho cơ quan, nhưng rất tiếc cơ quan không dùng (lý do đã có phần mềm theo dõi), để tôi tìm lại và sửa cho phù hợp cái bạn cần. Vậy, bạn hãy chờ tôi tìm (giờ không nhớ để nó ở cái xó nào).
 
Upvote 0
Nội dung theo dõi về tố cáo, khiếu nại trước đây (khoảng 7 năm) tôi viết hẳn 1 File theo dõi cho cơ quan, nhưng rất tiếc cơ quan không dùng (lý do đã có phần mềm theo dõi), để tôi tìm lại và sửa cho phù hợp cái bạn cần. Vậy, bạn hãy chờ tôi tìm (giờ không nhớ để nó ở cái xó nào).
Em cám ơn anh, em chưa thấy ở đâu mọi người nhiệt tình như ở GPE :D

Em cám ơn anh. Nhưng mỗi lần em xuất file từ phần mềm ra excel tên sheet sẽ không là "Before" và "After" ( em đặt vậy để trình bày cho mọi người dễ hiểu ). Có cách nào mà mình chạy thì nó cho sang sheet mới không anh ? Cột mã số em làm text to colums theo cột cũng nhanh thôi.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em cám ơn anh. Nhưng mỗi lần em xuất file từ phần mềm ra excel tên sheet sẽ không là "Before" và "After" ( em đặt vậy để trình bày cho mọi người dễ hiểu ). Có cách nào mà mình chạy thì nó cho sang sheet mới không anh ? Cột mã số em làm text to colums theo cột cũng nhanh thôi.
Tên sheet xuất từ phần mềm cố định hay thay đổi? tên sheet tạo mới đặt tên như thế nào?
 
Upvote 0
Em cám ơn anh. Nhưng mỗi lần em xuất file từ phần mềm ra excel tên sheet sẽ không là "Before" và "After" ( em đặt vậy để trình bày cho mọi người dễ hiểu ). Có cách nào mà mình chạy thì nó cho sang sheet mới không anh ? Cột mã số em làm text to colums theo cột cũng nhanh thôi.
Vậy thì bạn nên đưa vài cái File xuất từ phần mềm ra excel lên đây thử xem, biết quy luật thì mới tính tiếp được.

Lưu ý: Mỗi sheet chứa khoảng 20 dòng dữ liệu là được (còn tên sheet là gì không quan trọng).
 
Upvote 0
Vậy thì bạn nên đưa vài cái File xuất từ phần mềm ra excel lên đây thử xem, biết quy luật thì mới tính tiếp được.

Lưu ý: Mỗi sheet chứa khoảng 20 dòng dữ liệu là được (còn tên sheet là gì không quan trọng).
Tên sheet thì sẽ là tên file mình đặt, mình đặt gì cũng đc. Chỉ có 1 sheet duy nhất giống như sheet “before” đó ạ. Tuy nhiên nếu hiện tại ( dùng code của anh HieuCD ) khi em export file mới, em sẽ phải xoá các cột đi để lấy đc hàng tiêu đề mẫu và copy sang sheet mới và đặt tên là after. Em cám ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Chạy code mới
Mã:
Sub CopyData()
  Dim Rng As Range
  Dim Id As Long, i As Long, lRow As Long
  Const Str = "Personnel Number:"
  Application.ScreenUpdating = False
  Sheets("Before").Copy After:=Sheets(Sheets.Count)
  ActiveSheet.Name = "After" & Sheets.Count - 1 'Chinh lai tên Sheet
 
  lRow = Range("C" & Rows.Count).End(xlUp).Row
  Set Rng = Cells(1, 1)
  For i = 2 To lRow
    If Cells(i, 2) = Str Then Id = Cells(i, 7)
    If IsNumeric(Mid(Cells(i, 3), 1, 2)) Then
      Cells(i, 2) = Id
    Else
      If i <> 11 Then Set Rng = Union(Rng, Cells(i, 1))
    End If
  Next i
  Rng.EntireRow.Delete
  Range("A:A,E:E,I:I,N:N,P:P,R:X,Z:Z,AB:AB,AD:AF,AO:AQ,BA:BA").EntireColumn.Delete
  Set Rng = Nothing
  Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Xin chào các bạn

Tôi có một đoạn code như sau:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 9 And Target.Row <= 16 And Target.Column = 6 Then
With Target.Offset(, -2)
.FormulaR1C1 = "=RC[2]"
.Value = .Value
End With
End If
If Target.Row >= 9 And Target.Row <= 16 And Target.Column = 4 Then
With Target.Offset(, 2)
.FormulaR1C1 = "=RC[-2]"
.Value = .Value
End With
End If
End Sub

Nếu tôi xóa 1 trong 2 cái If thì code chạy không vấn đề gì, nhưng khi tôi để cả 2 cái if cùng chạy thì code bị lỗi.

Nhờ các bạn xử lý giúp ạ.
 

File đính kèm

Upvote 0
Xin chào các bạn

Tôi có một đoạn code như sau:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 9 And Target.Row <= 16 And Target.Column = 6 Then
With Target.Offset(, -2)
.FormulaR1C1 = "=RC[2]"
.Value = .Value
End With
End If
If Target.Row >= 9 And Target.Row <= 16 And Target.Column = 4 Then
With Target.Offset(, 2)
.FormulaR1C1 = "=RC[-2]"
.Value = .Value
End With
End If
End Sub

Nếu tôi xóa 1 trong 2 cái If thì code chạy không vấn đề gì, nhưng khi tôi để cả 2 cái if cùng chạy thì code bị lỗi.

Nhờ các bạn xử lý giúp ạ.
Code vậy không được vì sẽ bị tham chiếu vòng. Cứ gán giá trị trực tiếp luôn thay vì gán công thức
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Row >= 9 And Target.Row <= 16 Then
    If Target.Column = 6 Then Target.Offset(, -2).Value = Target.Value
    If Target.Column = 4 Then Target.Offset(, 2).Value = Target.Value
  End If
  Application.EnableEvents = True
End Sub
 
Upvote 0
Code vậy không được vì sẽ bị tham chiếu vòng. Cứ gán giá trị trực tiếp luôn thay vì gán công thức
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Row >= 9 And Target.Row <= 16 Then
    If Target.Column = 6 Then Target.Offset(, -2).Value = Target.Value
    If Target.Column = 4 Then Target.Offset(, 2).Value = Target.Value
  End If
  Application.EnableEvents = True
End Sub

Cảm ơn ndu96081631 đã giúp đỡ.
Nhờ bạn xử lý giúp tôi cho trường hợp này ạ.
 

File đính kèm

Upvote 0
Cảm ơn ndu96081631 đã giúp đỡ.
Nhờ bạn xử lý giúp tôi cho trường hợp này ạ.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Row >= 9 And Target.Row <= 16 Then
    If Target.Column = 6 Then
        With Target.Offset(, -2)
            .FormulaR1C1 = "=INDEX(R9C10:R16C10,MATCH(RC[2],R9C11:R16C11,0))"
            .Value = .Value
        End With
    End If
    If Target.Column = 4 Then
        With Target.Offset(, 2)
            .FormulaR1C1 = "=INDEX(R9C11:R16C11,MATCH(RC[-2],R9C10:R16C10,0))"
            .Value = .Value
        End With
    End If
End If
Application.EnableEvents = True
End Sub
 
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