Trang 1/2 1 2 cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 13
  1. #1
    Tham gia ngày
    02 2009
    Nơi Cư Ngụ
    Miền quê đất võ
    Bài gởi
    147
    Cảm ơn
    134
    Được cảm ơn 21 lần trong 15 bài viết

    Hỏi về Hàm If Then Else có điều kiện là Hàm Left trong VBA

    Tại ô C7 (tương ứng với dòng 7, cột 3) của Sheet A có giá trị thay đổi:

    Ô C7 giá trị sẽ thay đổi hoặc C7 = 131 hoặc C7 = 331
    Mình viết code trong VBA cho Kết quả hiện ở ô J9 như sau:

    If Left(R7C3,1) = 1 Then
    Range("A!J9") = 1
    Else
    Range("A!J9") = 3
    End If

    Cho mình hỏi, mình lần lượt thay đổi ô C7 là 131 hoặc 331 nhưng kết quả tại ô J9 đều cho 1 giá trị là 3. Vậy mình viết code này sai chỗ nào và sửa như thế nào?

  2. #2
    Tham gia ngày
    03 2008
    Nơi Cư Ngụ
    Đồng ruộng Long An
    Bài gởi
    5,560
    Cảm ơn
    8,666
    Được cảm ơn 9,805 lần trong 4,395 bài viết
    Trích Nguyên văn bởi anhtotbung35 View Post
    Tại ô C7 (tương ứng với dòng 7, cột 3) của Sheet A có giá trị thay đổi:

    Ô C7 giá trị sẽ thay đổi hoặc C7 = 131 hoặc C7 = 331
    Mình viết code trong VBA cho Kết quả hiện ở ô J9 như sau:

    If Left(R7C3,1) = 1 Then
    Range("A!J9") = 1
    Else
    Range("A!J9") = 3
    End If

    Cho mình hỏi, mình lần lượt thay đổi ô C7 là 131 hoặc 331 nhưng kết quả tại ô J9 đều cho 1 giá trị là 3. Vậy mình viết code này sai chỗ nào và sửa như thế nào?
    Thử test code sau nhé
    Ví dụ nằm trên sheet A
    Code:
    Sub Test()
    With Sheets("a")
    If Left(.Range("C7"), 1) = 1 Then
         .Range("J9") = 1
       Else
         .Range("J9") = 3
    End If
    End With
    
    End Sub
    Già của tuổi trẻ, trẻ của tuổi già.

  3. #3
    Tham gia ngày
    02 2009
    Nơi Cư Ngụ
    Miền quê đất võ
    Bài gởi
    147
    Cảm ơn
    134
    Được cảm ơn 21 lần trong 15 bài viết
    Mình đã Test trên File rồi. Kết quả cho đúng như ý, nhưng mình nhờ bạn hướng dẫn thêm đoạn này nhé.
    PHP Code:
    With Sheets("THCN")
    If 
    Left(.Range("C7"), 1) = 1 Then
    .Range("J11") = -10                        ' ô J11 là một công thức cho ra giá trị có âm hoặc dương
      If Range("J11").Value > 0 Then
        Range("D11").Value = Range("J11").Value
      Else
        Range("E11").Value = -Range("J11").Value
      End If
    Else
    ...
    End With 
    Đoạn code này mình đã rút ngắn bớt. Mục đích của mình là: tại ô J11 là một công thức Sumproduct tính các số liệu, số này có thể âm hoặc dương. Nếu ô J11 là số dương thì gán số đó vào ô D11, nếu là số âm thì gán vào ô E11 (lúc này ô E11 thể hiện là số dương của ô J11), sau đó xóa giá trị tại ô J11. Nếu code có thể rút ngắn đuợc xin bạn chỉ giáo.
    thay đổi nội dung bởi: hoangdanh282vn, 12-06-10 lúc 11:06 PM

  4. #4
    Tham gia ngày
    03 2008
    Nơi Cư Ngụ
    Đồng ruộng Long An
    Bài gởi
    5,560
    Cảm ơn
    8,666
    Được cảm ơn 9,805 lần trong 4,395 bài viết
    Trích Nguyên văn bởi anhtotbung35 View Post
    Mình đã Test trên File rồi. Kết quả cho đúng như ý, nhưng mình nhờ bạn hướng dẫn thêm đoạn này nhé.

    With Sheets("THCN")
    If Left(.Range("C7"), 1) = 1 Then
    .Range("J11") = -10 'ô J11 là một công thức cho ra giá trị có âm hoặc dương
    If Range("J11").Value > 0 Then
    Range("D11").Value = Range("J11").Value
    Else
    Range("E11").Value = -Range("J11").Value
    End If
    Else
    ...
    End With
    Đoạn code này mình đã rút ngắn bớt. Mục đích của mình là: tại ô J11 là một công thức Sumproduct tính các số liệu, số này có thể âm hoặc dương. Nếu ô J11 là số dương thì gán số đó vào ô D11, nếu là số âm thì gán vào ô E11 (lúc này ô E11 thể hiện là số dương của ô J11), sau đó xóa giá trị tại ô J11. Nếu code có thể rút ngắn đuợc xin bạn chỉ giáo.
    Thử code sau:

    Code:
    Sub Test()
    With Sheets("THCN")
        If Left(.Range("C7"), 1) = 1 Then .Range("J11") = -10
            Select Case .Range("J11").Value
              Case Is >= 0
                 .Range("D11") = .Range("J11")
              Case Else
                 .Range("E11") = (.Range("J11")) * -1
            End Select
            .Range("J11").ClearContents
    End With
    
    End Sub
    Già của tuổi trẻ, trẻ của tuổi già.

  5. #5
    Tham gia ngày
    05 2008
    Nơi Cư Ngụ
    Hải Phòng
    Bài gởi
    4,447
    Cảm ơn
    3,582
    Được cảm ơn 7,269 lần trong 3,411 bài viết
    Mình thấy có cái gì đó không được, ô J11 là công thức vậy khi gán giá trị thì bỏ công thức sao?
    Nếu đúng vậy Code chỉ có thế này chứ

    Code:
    1 With Sheets("THCN")
    2 If Left(.Range("C7"), 1) = 1 Then
    3 .Range("J11") = -10 'ô J11 la? mô?t công thu+?c cho ra gia? tri? co? âm hoa(?c du+o+ng
    4 .Range("D11").Value = .Range("J11").Value
    5 Else
    6 '...
    7 End If
    8 End With
    Toàn bộ Code nằm sau câu lệnh 2 và trước câu lệnh 5 thì đương nhiên chỉ có J11=-10 chứ còn làm gì có trường hợp khác

    Lưu ý bạn sau lệnh With bạn phải có dấu chấm dẫn chiếu nếu không dễ lỗi lắm vì không xác định được o đó là của Sheet nào. (Nếu là code của Sheet thì khỏi cần With khi tham chiếu đến vùng của Sheet đó). Lỗi này có trong khá nhiều bài viết của bạn.
    thay đổi nội dung bởi: sealand, 12-06-10 lúc 10:50 AM

  6. Có 2 thành viên cảm ơn sealand về bài viết này:


  7. #6
    Trích Nguyên văn bởi anhtotbung35 View Post
    Tại ô C7 (tương ứng với dòng 7, cột 3) của Sheet A có giá trị thay đổi:

    Ô C7 giá trị sẽ thay đổi hoặc C7 = 131 hoặc C7 = 331
    Mình viết code trong VBA cho Kết quả hiện ở ô J9 như sau:

    If Left(R7C3,1) = 1 Then
    Range("A!J9") = 1
    Else
    Range("A!J9") = 3
    End If

    Cho mình hỏi, mình lần lượt thay đổi ô C7 là 131 hoặc 331 nhưng kết quả tại ô J9 đều cho 1 giá trị là 3. Vậy mình viết code này sai chỗ nào và sửa như thế nào?
    Code của bạn nhìn qua tưởng là đúng nhưng sai một điểm nghiêm trọng đó là kiểu giá trị.
    Kết quả của hàm LEFT, RIGHT, TRIM,....là một văn bản. Trong biểu thức tính toán, giá trị văn bản (hằng số) phải đặt trong nháy kép ("").

    Code của bạn cần sửa lại như sau:
    Code:
    If Left(R7C3,1) = "1" Then 'So sánh 2 giá trị văn bản
      Range("A!J9") = 1
    Else
      Range("A!J9") = 3
    End If
    Hoặc
    Code:
    If CLng(Left(R7C3,1)) = 1 Then 'So sánh 2 số kiểu Long
      Range("A!J9") = 1
    Else
      Range("A!J9") = 3
    End If

  8. Có 4 thành viên cảm ơn Nguyễn Duy Tuân về bài viết này:


  9. #7
    Tham gia ngày
    06 2008
    Bài gởi
    24,102
    Cảm ơn
    13,806
    Được cảm ơn 42,919 lần trong 19,421 bài viết
    Trích Nguyên văn bởi TuanVNUNI View Post
    Code của bạn nhìn qua tưởng là đúng nhưng sai một điểm nghiêm trọng đó là kiểu giá trị.
    Kết quả của hàm LEFT, RIGHT, TRIM,....là một văn bản. Trong biểu thức tính toán, giá trị văn bản (hằng số) phải đặt trong nháy kép ("").
    Tuy là sai về kiểu giá trị khi so sánh nhưng Excel nó vẫn hiểu đấy Tuân à! Dù vậy, ta vẫn nên hiểu mà mô ta thật chính xác khi viết code (như TuanVNUNI đã sửa ở trên)

  10. Có 2 thành viên cảm ơn ndu96081631 về bài viết này:


  11. #8
    Trích Nguyên văn bởi ndu96081631 View Post
    Tuy là sai về kiểu giá trị khi so sánh nhưng Excel nó vẫn hiểu đấy Tuân à! Dù vậy, ta vẫn nên hiểu mà mô ta thật chính xác khi viết code (như TuanVNUNI đã sửa ở trên)
    Test lại đúng là trong VBA nó tự convert về kiểu phù hợp. Nếu công thức đặt trong bảng tính như dưới đây sẽ là sai kết quả
    =IF(LEFT(C7,1)=1,1,3)

    Công thức sau sẽ là đúng (vì xác định đúng kiểu giá trị)
    =IF(LEFT(C7,1)="1",1,3)

  12. Có 2 thành viên cảm ơn Nguyễn Duy Tuân về bài viết này:


  13. #9
    Tham gia ngày
    06 2008
    Bài gởi
    24,102
    Cảm ơn
    13,806
    Được cảm ơn 42,919 lần trong 19,421 bài viết
    Trích Nguyên văn bởi TuanVNUNI View Post
    Test lại đúng là trong VBA nó tự convert về kiểu phù hợp. Nếu công thức đặt trong bảng tính như dưới đây sẽ là sai kết quả
    =IF(LEFT(C7,1)=1,1,3)

    Công thức sau sẽ là đúng (vì xác định đúng kiểu giá trị)
    =IF(LEFT(C7,1)="1",1,3)
    Ví dụ:
    - Tại cell A1 ta gõ số 123
    - Tại cell B1 ta gõ số 1
    Code này cho kết quả = TRUE
    PHP Code:
    Sub Test()
      
    MsgBox Left([A1], 1) = 1
    End Sub 
    Nhưng code này thì cho kết quả = FALSE
    PHP Code:
    Sub Test()
      
    MsgBox Left([A1], 1) = [B1]
    End Sub 
    Tương tự thế với các trường hợp sô sánh giá trị dạng số trong 1 TextBox với giá trị của 1 cell


  14. Có 3 thành viên cảm ơn ndu96081631 về bài viết này:


  15. #10
    Tham gia ngày
    02 2009
    Nơi Cư Ngụ
    Miền quê đất võ
    Bài gởi
    147
    Cảm ơn
    134
    Được cảm ơn 21 lần trong 15 bài viết
    Trích Nguyên văn bởi sealand View Post
    Mình thấy có cái gì đó không được, ô J11 là công thức vậy khi gán giá trị thì bỏ công thức sao?

    Lưu ý bạn sau lệnh With bạn phải có dấu chấm dẫn chiếu nếu không dễ lỗi lắm vì không xác định được o đó là của Sheet nào. (Nếu là code của Sheet thì khỏi cần With khi tham chiếu đến vùng của Sheet đó). Lỗi này có trong khá nhiều bài viết của bạn.
    Cảm ơn bạn đã Lưu ý dùm mình, mình đưa lên diễn đàn để cho gọn mình gán luôn giá trị ô J11 là -10, chứ code đầy đủ như sau:

    PHP Code:
    With Sheets("THCN")
        If 
    Left(.Range("C7"), 1) = 1 Then
           
    .Range("THCN!J11:J" 9).FormulaR1C1 _
            
    "=SUMPRODUCT(--(Data!R3C4:R" "C4<R6C3),--(Data!R3C6:R" "C6=R7C3),--(Data!R3C17:R" "C17=RC2),--(Data!R3C8:R" "C8))-SUMPRODUCT(--(Data!R3C4:R" "C4<R6C3),--(Data!R3C7:R" "C7=R7C3),--(Data!R3C18:R" "C18=RC2),--(Data!R3C8:R" "C8))"
            
    Select Case .Range("THCN!J11:J" 9)
              Case 
    Is >= 0
               
    .Range("THCN!D11:D" 9).Value = .Range("THCN!J11:J" 9).Value
              
    Case Else
               .
    Range("THCN!E11:E" 9).Value = (.Range("THCN!J11:J" 9).Value) * -1
            End Select
            
    .Range("THCN!J11:J" 9).ClearContents
        
    Else
            .
    Range("THCN!J11:J" 9).FormulaR1C1 _
            
    "=SUMPRODUCT(--(Data!R3C4:R" "C4<R6C3),--(Data!R3C7:R" "C7=R7C3),--(Data!R3C18:R" "C18=RC2),--(Data!R3C8:R" "C8))-SUMPRODUCT(--(Data!R3C4:R" "C4<R6C3),--(Data!R3C6:R" "C6=R7C3),--(Data!R3C17:R" "C17=RC2),--(Data!R3C8:R" "C8))"
            
    Select Case .Range("THCN!J11:J" 9)
               Case 
    Is >= 0
               
    .Range("THCN!E11:E" 9).Value = .Range("THCN!J11:J" 9).Value
               
    Case Else
               .
    Range("THCN!D11:D" 9).Value = (.Range("THCN!J11:J" 9).Value) * -1
            End Select
            
    .Range("THCN!J11:J" 9).ClearContents
        End 
    If
       
    End With 
    Đoạn code này là mình điều chỉnh lại theo đoạn code của anh Domfootwear, như sao sau khi tính tại cột D vẫn là giá trị âm (nếu kết quả đúng thì số âm này phải ở cột E và giá trị âm. Nhờ mấy Anh xem gúp.
    thay đổi nội dung bởi: ptm0412, 14-06-10 lúc 08:57 AM Lý do: BỎ CODE VÀO TAG

Trang 1/2 1 2 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Đề tài tương tự

  1. Giúp em hàm if lồng hàm Left với
    Viết bởi langtuomdan trong chuyên mục Hướng dẫn sử dụng các hàm trong Excel
    Trả lời: 10
    Bài mới gởi: 09-01-14, 11:22 PM
  2. Hàm left
    Viết bởi Duong gia trong chuyên mục Hàm và công thức Excel
    Trả lời: 13
    Bài mới gởi: 19-08-12, 02:21 PM
  3. Hàm left và hàm right không chạy được
    Viết bởi Namlevu trong chuyên mục Giải thích, gỡ rối, xử lý lỗi công thức
    Trả lời: 8
    Bài mới gởi: 21-07-12, 09:54 AM
  4. Sự cố với hàm LEFT ?
    Viết bởi huongsmile trong chuyên mục Hỏi đáp những vấn đề khác
    Trả lời: 6
    Bài mới gởi: 30-10-08, 07:53 PM
  5. Sử dụng hàm if kết hợp hàm Left
    Viết bởi nhathuy_hanh trong chuyên mục Excel và Kế Toán
    Trả lời: 2
    Bài mới gởi: 17-10-08, 06:50 PM

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]