Chuyên đề giải đáp những thắc mắc về code VBA

Duong.bach

Thành viên mới
Tham gia ngày
28 Tháng ba 2020
Bài viết
18
Được thích
2
Điểm
15
Tuổi
28

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Bác giúp em cụ thể được không ạ
hàm của bạn tôi chỉnh lại :
Mã:
Function Vlookup_nhieu_gia_tri(ByVal rngRangeFind As Range, ByVal vWhatFind As Variant, Optional iLookAt As Integer = 2)
Dim cllResultFind As Range, strFirstAddress As String, strResult As String
    If Not rngRangeFind Is Nothing Then
        With rngRangeFind
            'Find All In Cell => iLookAt=1, Find Part of Cell=> iLookAt=2
            Set cllResultFind = .Find(What:=vWhatFind, After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=iLookAt, _
                                      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            If cllResultFind Is Nothing Then
                Exit Function
            Else
                strFirstAddress = cllResultFind.Address
                Do
                    strResult = IIf(strResult <> "", strResult & "{|}", "") & cllResultFind.Value
                    Set cllResultFind = .FindNext(cllResultFind)
                Loop While Not cllResultFind Is Nothing And cllResultFind.Address <> strFirstAddress
            End If
        End With
    End If
    If strResult <> "" Then Vlookup_nhieu_gia_tri = Split(strResult, "{|}")
End Function
Sử dụng như sau:
Mã:
Dim arrResultFind
    'Find All In Cell => iLookAt=1, Find Part of Cell=> iLookAt=2
    arrResultFind = Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A30"), Sheet2.Range("C1").Value, 2) 'Tìm phần trong cell
    arrResultFind = Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A30"), Sheet2.Range("C1").Value, 1) 'Tìm toàn bộ trong Cell
Bạn chú ý: nếu tìm chính xác toàn bộ giá trị trong cell thì iLookAt=1 , và nếu chỉ tìm một phần trong cell thì iLookAt=2
Ví dụ: tìm trong A1:A5 ở Sheet2 với giá trị ở ô C1 là "BA"
BBA
BBC
CAA
CBA
CCC
=> tìm chính xác toàn bộ trong Cell: Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A5"), Sheet2.Range("C1").Value, 1) thì sẽ không có kết quả
=> tìm một phần trong Cell: Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A5"), Sheet2.Range("C1").Value, 2) thì kết quả là 2 giá trị "BBA" và "CBA"
 
Lần chỉnh sửa cuối:

Love GPE

Thành viên mới
Tham gia ngày
17 Tháng hai 2020
Bài viết
34
Được thích
14
Điểm
15
Anh Chị giúp Em cách chỉ copy công thức, không copy định dạng với ạ, Mong A/C giúp đỡ.
Range("D5").Copy Range("D6:D" & i)
 

huuthang_bd

Chuyên gia GPE
Tham gia ngày
10 Tháng chín 2008
Bài viết
7,955
Được thích
9,298
Điểm
860
Nơi ở
TP.HCM

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,718
Được thích
2,669
Điểm
360

Love GPE

Thành viên mới
Tham gia ngày
17 Tháng hai 2020
Bài viết
34
Được thích
14
Điểm
15
Mã:
Range("D6:D" & i).FormulaR1C1 = Range("D5").FormulaR1C1
Bạn sửa vậy xem sao.
Mã:
Range("D6:D" & i).Formula = Range("D5").Formula
Mã:
Range("D5").Copy
Range("D6:D" & i).PasteSpecial Operation:=xlPasteFormula
Dạ Em làm được rồi. Cảm ơn A/C rất nhiều!
 

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Xin cho hỏi GPE,
Mình có thể thay code sau:
Mã:
Dim arrReMain() As Integer
    ReDim arrReMain(4 To iLastRow) As Integer
    For i = 4 To iLastRow
        arrReMain(i) = Sheet1.Range("E" & i).Value
    Next i
bằng phương cách nào khác mà mình không dùng vòng lặp For không ạ?
Em muốn giữ chỉ số trong arrRemain đi từ 4 tới iLastRow ạ.

Cám ơn GPE nhiều.
 

Love GPE

Thành viên mới
Tham gia ngày
17 Tháng hai 2020
Bài viết
34
Được thích
14
Điểm
15
Em đang tập tành code. Em muốn chọn dòng từ 12 đến dòng cuối (i). Nếu em thay i vào chỗ chữ đỏ số 30 thì lại bị lỗi. Mong Anh Chị chỉ giúp Em sửa thế nào để thay i được vào đó. Em cảm ơn A/C.
Sub Sort_Sh18()
Dim i As Long
i = Sheet18.Range("C" & Rows.Count).End(xlUp).Row
Sheet18.Rows("12:30").Select
End Sub
 

thnghiachau

Thành viên tiêu biểu
Tham gia ngày
14 Tháng chín 2009
Bài viết
705
Được thích
560
Điểm
860
Em đang tập tành code. Em muốn chọn dòng từ 12 đến dòng cuối (i). Nếu em thay i vào chỗ chữ đỏ số 30 thì lại bị lỗi. Mong Anh Chị chỉ giúp Em sửa thế nào để thay i được vào đó. Em cảm ơn A/C.
Sub Sort_Sh18()
Dim i As Long
i = Sheet18.Range("C" & Rows.Count).End(xlUp).Row
Sheet18.Rows("12:30").Select
End Sub
Sheet18.Rows("12:" & i).Select
 

HieuCD

Chuyên gia GPE
Tham gia ngày
14 Tháng chín 2010
Bài viết
7,288
Được thích
14,361
Điểm
1,860
Xin cho hỏi GPE,
Mình có thể thay code sau:
Mã:
Dim arrReMain() As Integer
    ReDim arrReMain(4 To iLastRow) As Integer
    For i = 4 To iLastRow
        arrReMain(i) = Sheet1.Range("E" & i).Value
    Next i
bằng phương cách nào khác mà mình không dùng vòng lặp For không ạ?
Em muốn giữ chỉ số trong arrRemain đi từ 4 tới iLastRow ạ.

Cám ơn GPE nhiều.
Mã:
  eRow = Sheet1.Range("E" & Rows.Count).End(xlUp).Row
  arrReMain = Application.Transpose(Sheet1.Range("E4:E" & eRow).Value)
  ReDim Preserve arrReMain(4 To eRow)
 

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
587
Được thích
498
Điểm
85
Xin cho hỏi GPE,
Mình có thể thay code sau:
Mã:
Dim arrReMain() As Integer
    ReDim arrReMain(4 To iLastRow) As Integer
    For i = 4 To iLastRow
        arrReMain(i) = Sheet1.Range("E" & i).Value
    Next i
bằng phương cách nào khác mà mình không dùng vòng lặp For không ạ?
Em muốn giữ chỉ số trong arrRemain đi từ 4 tới iLastRow ạ.

Cám ơn GPE nhiều.
Tại sao lại không muốn dùng For bạn? Nếu thực sự không muốn vậy thì dùng do ... loop
 

Love GPE

Thành viên mới
Tham gia ngày
17 Tháng hai 2020
Bài viết
34
Được thích
14
Điểm
15
Mã:
Rows("2:" & i).Sort [B2], 1
Dòng code trên Em đang sort cho cột B. Em chưa sort được thêm các cột. Anh Chị có thể giúp Em cách sort thêm được cột C và D. Em cảm ơn!
 
Lần chỉnh sửa cuối:
Top Bottom