Giúp sửa code: hàm Month và nối chuỗi

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Em chào Thầy cô và anh chị!
Em có viết code hàm Month & nối chuỗi như sau:

Sub Tthang_1()
    Dim i As Long, n1 As Range, T As String, sArray
    Dim Wf As WorksheetFunction
    Set Wf = WorksheetFunction
    With ActiveSheet
        Set n1 = .Range(.[B9], .[B65536].End(3))
        sArray = n1.Resize(, 1).Value
    End With
    For i = 1 To UBound(sArray, 1)
        If IsDate(sArray(i, 1)) = True Then [COLOR=#ff0000]sArray(i, 2) = "T" & Wf.Month(sArray(i, 1))[/COLOR]
    Next i
    n1.Resize(, 1).Value = sArray
End Sub

Code trên báo lỗi ở dòng chữ đỏ
1/ Yêu cầu dựa vào cột B, khi chạy code sẽ cho kết qủa như cột C
Ví dụ cell B9 là 02/01/12 khi chạy code thì sẽ cho kết qủa ở Cell C9 là T01 (nghĩa là lấy tháng ở cell B9 với 2 ký tự và nối với chữ T)
Xin lưu ý: nếu tháng 1 thì sẽ lấy hai ký tự là 01, tháng 12 sẽ là 12
Xin vui lòng xem File đính kèm, Em cảm ơn!

Bạn sửa như thế này nhé

Sub Tthang_1()
    Dim i As Long, n1 As Range, T As String, sArray, Arr
    Dim Wf As WorksheetFunction
    Set Wf = WorksheetFunction
    With ActiveSheet
        Set n1 = .Range(.[B9], .[B65536].End(3))
        sArray = n1.Resize(, 1).Value
    End With

ReDim Arr(1 To UBound(sArray), 1 To 1)

For i = 1 To UBound(sArray, 1)
        If IsDate(sArray(i, 1)) = True Then Arr(i, 1) = "T" & Format(sArray(i, 1), "mm")
    Next i
    n1.Offset(, 1).Value = Arr
End Sub

Nếu dữ liệu ít (1000 dòng trở lại) thì dùng cái này:

Sub Tthang_1()
  With Range([B9], [B65536].End(3)).Offset(, 1)
    .Value = "=""T"" & TEXT(RC[-1],""mm"")"
    .Value = .Value
  End With
End Sub

——————–
Sao cứ With ActiveSheet hoài vậy trời? —> Vì dù không With thì cũng mặc định đang nói đến ActiveSheet rồi còn gì
Vậy nếu có With thì With 1 sheet nào đó (chỉ định chính xác)… còn nếu muốn code chạy trên ActiveSheet thì khỏi cần phải With gì ráo

www.giaiphapexcel.com/diendan/threads/gi%C3%BAp-s%E1%BB%ADa-code-h%C3%A0m-month-v%C3%A0-n%E1%BB%91i-chu%E1%BB%97i.75759/

Một cách để học hỏi thôi nhé:

Sub Tthang_1()
Dim i As Long, sArray(), dArr()
sArray = Range("B9:B" & .End(xlUp).Row).Value
ReDim dArr(1 To UBound(sArray, 1), 1 To 1)
For i = 1 To UBound(sArray)
If IsDate(sArray(i, 1)) Then dArr(i, 1) = "T" & Format(Month(sArray(i, 1)), "00")
Next i
.Resize(i – 1).Value = dArr
End Sub

Sub Tthang_1()
Dim i As Long, sArray(), dArr()
sArray = Range("B9:B" & .End(xlUp).Row).Value
For i = 1 To UBound(sArray)
If IsDate(sArray(i, 1)) Then Range("C" & i + 8).Value = "T" & Format(Month(sArray(i, 1)), "00")
Next i
End Sub

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Khóa học SprinGO phù hợp

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ

Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm