Đăng ký học Excel - PivotTable 3 buổi tối (31/7, 2 và 4/8) - TPHCM

Giúp đỡ code VBA về hàm left

Thảo luận trong 'Khu vực đăng bài chung' bắt đầu bởi duong22000, 16 Tháng bảy 2017.

  1. duong22000

    duong22000 Thành viên hoạt động

    Xin chào ace trên GPE!
    Mình có 1 câu hỏi về code VBA như sau:
    Mình có 1 sheet("A)":
    Dữ liệu: Từ cột B5 đến dòng cuối cùng của cột B có dữ liệu (xác định dòng cuối có dữ liệu của cột B)
    Ở cột C5 mình đã sử dụng hàm left(b5,1) và kéo xuống cột C để được dữ liệu như trong bài
    Vấn đề viết hàm là vậy nhưng mình muốn sử dụng code VBA để xử lý trường hợp trên tại cột D
    Cách ghi Macro khi sử dụng nhập hàm left thì mình cũng có code để xử lý dữ liệu.
    Mình biết là có cách khác viết tổng quát hơn về vấn đề này bằng code VBA.
    mọi người giúp mình xử lý trường hợp trên nhé.
    Mình xin chân thành cảm ơn!
     

    Các file đính kèm:

  2. Hoang2013

    Hoang2013 Thành viên tiêu biểu

    PHP:
    Sub HamLEFT()
     
    Dim Cls As RangeRng As Range
     Sheets
    ("A").Select
     Set Rng 
    Range([B5], [B5].End(xlDown))
     For 
    Each Cls In Rng
        Cls
    .Offset(, 1).Value Left(Cls.Value1)
     
    Next Cls
    End Sub
     
    duong22000 thích bài này.
  3. duong22000

    duong22000 Thành viên hoạt động

    Cảm ơn bạn! Mình đã test thử code và đã được kết quả.
     
    Hoang2013 thích bài này.
  4. duong22000

    duong22000 Thành viên hoạt động

    Mình đã làm theo code của bạn được cả hàm right nhưng hàm Sum thì cho kết quả sai và báo lỗi code.
    Đoạn code mình đã sửa:
    Sub HamLEFTandRightandSum()
    Dim i As Range, u As Range
    Sheets("A").Select
    Set u = Range([B5], [B5].End(xlDown))
    For Each i In u
    i.Offset(, 2).Value = Left(i.Value, 1)
    i.Offset(, 3).Value = Right(i.Value, 1)
    i.Offset(, 6).Value = "=SUM()" ' Tong cua cot 4 va 5 (i.Offset(, 4),i.Offset(, 5))
    Next i
    end sub
    Bạn sửa giúp mình chỗ code tính tổng (màu hồng) nữa nhé.
    Cảm ơn bạn!

    Next i
     
  5. Hoang2013

    Hoang2013 Thành viên tiêu biểu

    Làm sao mà cộng được hở trời!

    Cột [B:b] toàn chuỗi là chuỗi; cắt ra thì kết quả cũng toàn 1 kí tự trái hay phải của chuỗi;

    Bạn chỉ có thể nối chuỗi đó lại; Không thể xài hàm SUM() ở đó được.
     
    duong22000 thích bài này.
  6. Ba Tê

    Ba Tê Cạo Rồi Khỏi Gội

    Thử thay bằng i.Offset(, 6).Value = "=SUM(RC[-2]:RC[-1])"
     
    duong22000 thích bài này.
  7. duong22000

    duong22000 Thành viên hoạt động

    Nhưng nếu thay bằng sum(RC(-2):RC
    Cảm ơn bác Ba Tê, em cũng làm như bác khi ghi lại Macro và có đoạn công thức trên sau đó ghép vào code thì chạy đúng. Nhưng em tưởng theo cách viết của bạn Hoang2013 thì sử dụng khác nên em hỏi để biết.
     
  8. Ba Tê

    Ba Tê Cạo Rồi Khỏi Gội

    Nếu không muốn công thức bạn có thể thay nó thành vầy:
    i.Offset(, 6).Value = i.Offset(, 4) + i.Offset(, 5)
    Chứ đâu xài được "= SUM(i.Offset(, 4) + i.Offset(, 5))"
     
    duong22000 thích bài này.
  9. duong22000

    duong22000 Thành viên hoạt động

    Lúc đầu em cũng thử dùng = SUM(i.Offset(, 4) + i.Offset(, 5)) nhưng không cho kết quả đúng.
    Lúc đầu em cũng thử dùng = SUM(i.Offset(, 4) + i.Offset(, 5)) nhưng không cho kết quả đúng.
    nên em quay sang ghi Macro và có được "=SUM(RC[-2]:RC[-1])" nhưng khi chạy code thì ở ô kết quả hiện công thức Sum(F5:G5), ...
    Em thử đoạn code: i.Offset(, 6).Value = i.Offset(, 4) + i.Offset(, 5) thì kết quả đúng và không hiện hàm, công thức ở ô dữ liệu.
    Em cảm ơn bác nhé.
     
  10. duong22000

    duong22000 Thành viên hoạt động

    Em thấy rất nhiều đọan code khác nhau và nhiều cách đặt biến. Các bác trên GPE cho em hỏi thêm đôi chút về code VBA:
    Khi nào thì sử dụng:
    TH1: Dim i as Integer
    TH2: Dim i as Long
    TH3: Dim i as Range
    TH4: Dim i as String
    TH5: Dim i as Variant
    TH6: Dim i as Boolean
    TH7: Dim i asByte
    TH8: Dim sArr()
    .....
    Hay nói một ý khác là các bác giải thích giúp em ý nghĩa của các biến trên và cách dùng trong các trường hợp đó.
    Em xin cảm ơn các bác!
     
  11. phuyen89

    phuyen89 Thành viên tích cực

    PHP:
    Sub abc()
        
    Application.ScreenUpdating False
        Dim Rng 
    As RangeCll As Range
        Set Rng 
    Sheets("A").Range([B5], [B60000].End(xlUp))
        For 
    Each Cll In Rng
            Cll
    .Offset(, 2) = Left(Trim(Cll.Value), 1)
        
    Next Cll
        Application
    .ScreenUpdating True
    End Sub
     
    PacificPR thích bài này.
  12. phuyen89

    phuyen89 Thành viên tích cực

    Mình giải thích cho bạn về cách dùng 01 biến.
    PHP:
    Sub Var_Demo()
        
    Dim i As Integer
        i 
    10
        ActiveSheet
    .Range("A1").Value i
    End Sub
    Mục đích của đoạn code trên, là bạn Lưu số 10 vào biến i, và gán biến i vào ổ A1 trên sheet hiện hành.
     
    duong22000 thích bài này.
  13. duong22000

    duong22000 Thành viên hoạt động

    cảm ơn bạn đã hướng dẫn mình.
    Cho mình hỏi thêm:
    Ví dụ Dim i As Integer: Khai báo biến i đới với các số nguyên
    Vậy còn các biến khác thì ý nghĩa và cách dùng như thế nào?
    TH2: Dim i as Long
    TH3: Dim i as Range
    TH4: Dim i as String
    TH5: Dim i as Variant
    TH6: Dim i as Boolean
    TH7: Dim i asByte
    TH8: Dim sArr()
     
  14. phuyen89

    phuyen89 Thành viên tích cực

    Bạn chưa chịu đọc thêm về lý thuyết.
    Data Type là Integer thì lưu số nguyên; vậy Data Type là Double, thì lưu số có phần thập phân, còn Data Type là String thì nó Lưu chuỗi.
    - Những điều trên là vô cùng căn bản.
     
    duong22000 thích bài này.
  15. duong22000

    duong22000 Thành viên hoạt động

    Bạn thông cảm, mình không rành cái món VBA này nhưng lại rất thích sử dụng trong công việc xử lý số liệu. Mình có lên diễn đàn và hỏi mọi người thì mọi người viết code giúp và mình chỉ sửa các thông số cho phù hợp với các biểu mẫu. Nhưng kiến thức cơ bản về VBA thì mình chưa nắm được nên mình lên diễn đàn để hỏi mọi người.
    Hay bạn có tài liệu liên quan tới cách viết các biến này thì cho mình xin để tìm hiểu chứ mấy cái ở mạng tải về nó nói chung chung quá không có ví dụ cụ thể. Cảm ơn bạn!
     
  16. phihndhsp

    phihndhsp Thành viên gắn bó

    Integer: biến kiểu Integer là dùng để lưu trữ các số nguyên khoảng từ -32.768 đến +32.768
    Long: thì cũng giống như Integer nhưng mà biên độ cao hơn khoảng từ -2.147.483.648 đến +2.147.483.648
    Byte: thì cũng giống như Integer như mà chỉ dùng để lưu các số nguyên dương 0-255
    String: dùng để lưu các giá trị là chuỗi
    Variant:dùng để lưu các giá trị chưa biết kiểu dữ liệu
    Boolean: dùng để lưu các giá trị logic TRUE hoặc FALSE
    Range: là kiểu đối tượng dùng để lưu các đối tượng của RANGE trên bảng tính ....
    còn nhiều tiếp nữa....
     
    duong22000 thích bài này.
  17. duong22000

    duong22000 Thành viên hoạt động

    Cảm ơn bạn !
    Bạn có thể cho mình ví dụ cụ thể từng trường hợp không.
     
  18. VetMini

    VetMini Thành viên gạo cội

    Muốn hỏi chiều sâu hay hỏi đại khái?
    Đại khái thì tìm các quyển sách vỡ lòng mà đọc. Chúng đều có giải thích hết.
    Chiều sâu thì chịu khó vào mấy cái thớt đố vui mà lục ra. Tôi có giải thích 1 vài lần trong đó. Gải thích lại ở đây tốn it nhất cũng 1 trang.
     
    duong22000 thích bài này.
  19. duong22000

    duong22000 Thành viên hoạt động

    Cảm ơn bạn! Để mình search trên diễn đàn và internet để tìm hiểu...
     

Chia sẻ trang này