Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Các huynh giúp em viết một code sao cho tại cột A (sheet active) các vận đơn tàu khi gặp các ký tự bôi đậm như trên thì 4 chữ cái đầu tiền đổi về KLIS (thay thế cho KKLU)

Cám ơn các huynh
Các chữ bold kia là phải tìm Bold hay là có danh mục: FRE, SYD, MEL, BNE.
Nếu phải tìm theo DM như trên thì nên dùng Find. Với What:=iFind
Trong đó iFind=RngFind(i)
RngFind={"FRE", "SYD", "MEL", "BNE"}
Tự làm sẽ hay hơn.
 
Upvote 0
Các huynh giúp em viết một code sao cho tại cột A (sheet active) các vận đơn tàu khi gặp các ký tự bôi đậm như trên thì 4 chữ cái đầu tiền đổi về KLIS (thay thế cho KKLU)

Cám ơn các huynh
Yêu cầu của bạn chắc phải dùng find và Replect quá, Mình nghỉ là như vậy. Bạn tham khảo phương thức find ở link này xem sao.
http://www.giaiphapexcel.com/forum/showthread.php?p=107268
 
Upvote 0
ThuNghi đã viết:
Các chữ bold kia là phải tìm Bold hay là có danh mục: FRE, SYD, MEL, BNE.
Nếu phải tìm theo DM như trên thì nên dùng Find. Với What:=iFind
Trong đó iFind=RngFind(i)
RngFind={"FRE", "SYD", "MEL", "BNE"}
Tự làm sẽ hay hơn.

Em bôi đậm lên cho dễ nhìn thôi, thực tế nó bình thường.
Em làm công thức và record lại được macro như sau
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 27/10/2008 by ST

'
Range("J2").Select
Selection.FormulaArray = _
"=IF(MID(RC[-9],5,3)={""FRE"";""SYD"";""MEL"";""BNE""},SUBSTITUTE(RC[-9],RC[-9],""KLIS""&RIGHT(RC[-9],LEN(RC[-9])-4)),RC[-9])"
End Sub
Nhưng dựa vào cơ sở trên em tạo một vòng lặp bắt đầu tại A1 --> .endup

Các huynh gợi ý
 
Upvote 0
Em bôi đậm lên cho dễ nhìn thôi, thực tế nó bình thường.
Em làm công thức và record lại được macro như sau

Nhưng dựa vào cơ sở trên em tạo một vòng lặp bắt đầu tại A1 --> .endup

Các huynh gợi ý

Nếu bạn đã làm được 1 hàng thì sao bạn không dùng chức năng autofill để fill nó xuống các hàng khác cho dến hết

Autofill thì có thể viết bằng VBA bằng cách thư reco macro và chỉnh sữa tí síu ra theo ý mình (Autofill đã nói đến trong topic này ở mấy bài # ở dưới đó, bạn xêm nhé)
 
Upvote 0
Em bôi đậm lên cho dễ nhìn thôi, thực tế nó bình thường.
Em làm công thức và record lại được macro như sau

Nhưng dựa vào cơ sở trên em tạo một vòng lặp bắt đầu tại A1 --> .endup

Các huynh gợi ý

Bạn làm thử theo code sau, số ...B/L nằm ở cột 1, sheet1
PHP:
Sub ThayThe()
Dim MyRng As Range, RngFound As Range, iA As Long
Dim eR As Long, iFind As String, Dem As Long
Dim MyArr() As Variant
Sheet1.Select
eR = [A65000].End(xlUp).Row
Set MyRng = Range("A1:A" & eR)
MyArr = Array("FRE", "SYD", "MEL", "BNE")
For iA = LBound(MyArr()) To UBound(MyArr())
    iFind = MyArr(iA)
    Dem = WorksheetFunction.CountIf(MyRng, "*" & iFind & "*")
    Set RngFound = MyRng(1)
    For i = 1 To Dem
        With MyRng
            Set RngFound = .Find(iFind, After:=RngFound, SearchOrder:=xlColumns, _
                 LookIn:=xlFormulas, LookAt:=xlPart, SearchDirection:=xlPrevious)
        End With
        With RngFound
            .Value = Replace(.Value, "KKLU", "KLIS")
            .Font.ColorIndex = 5
            .AddComment ("OK")
        End With
    Next
Next

End Sub
 
Upvote 0
Bạn ơi Auto fill phải OR đến 4 lần, mình muốn viết code đại loại như
sub thaythe()


Dim Er As Long, thaythe As String
Er = Cells(Cells.Rows.Count, 1).End(xlUp).Row
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
ActiveSheet.Select

For i = 2 To Er
if mid(A&I;5;3) = "FRE" or "SYD".......then subtistute(A&I...)
End if
Next

End sub

Em chỉ hình dung được code như thế , chưa viết được

Các huynh chỉ giáo thêm
 
Upvote 0
Các huynh giúp em viết một code sao cho tại cột A (sheet active) các vận đơn tàu khi gặp các ký tự bôi đậm như trên thì 4 chữ cái đầu tiền đổi về KLIS (thay thế cho KKLU)
Bình thường công thức em vẫn làm như sau
Cám ơn các huynh
Hình như mình đã đi lạc chủ để rồi đó. Ở đây mình chỉ nên giải quyết các code dùng chung chung. Không phải là giải quyết cả 1 bài tập vì
1. Để các thành viên khác có thắc mắc về code, có thể vào đây tham khảo và có thể đọc và hiểu liền code mình cần tìm
2. Các thành viên vào tìm code để hỏi mà đọc từ đầu đến cuối topic này chắc cũng loạn đầu với mấy bài tập luôn, vì có khi bài tập không liên quan gì đến họ.
3. Theo mình nghỉ ở đây mình chỉ nên giải thích về 1 vấn đề mà code sử lý => tác dụng của code, hoặc 1 lỗi nào đó trong code không thể hiểu nổi (Đây không phải topic làm bài tập mới), còn áp dụng vào bài tập thì tự thành viên áp dụng, hoặc mở topic khác để hỏi về bài tập của mình. Anh em nghĩ sao?
Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Pmhoang
Thực ra mình là thành viên mới tham gia, hôm nọ nghe Admin cảnh báo...và move lại bài của mình vào topic này. Và từ đó mình ko dám post thành một chủ đề mới

Nhân tiện em xin hỏi cách hoặc nhiều lần trong một hàm if
ví dụ
Nếu a1 = 1 hoặc = 2 hoặc = 3 hoặc = 4 thì....câu lệnh

thì em phải viết code như nào

xin cám ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Pmhoang
Thực ra mình là thành viên mới tham gia, hôm nọ nghe Admin cảnh báo...và move lại bài của mình vào topic này. Và từ đó mình ko dám post thành một chủ đề mới
Nhân tiện em xin hỏi cách hoặc nhiều lần trong một hàm if
ví dụ
thì em phải viết code như nào

xin cám ơn
Bài này không thuộc về những vấn để Code.
Bạn nên vào tìm kiếm và nhập từ if vào. sẽ có rất nhiều cái hay cho bạn (vấn đề if đã nói rất nhiều rồi) hoặc tham khảo link
http://www.giaiphapexcel.com/forum/showthread.php?t=12212

Bạn hỏi không rõ ràng, nếu hỏi if trong VB thì cấu trúc như sau:
if <điều kiện> then
[thực hiện lệnh True]
else
[thưc hien lệnh False]
end if
else có thể thêm điểu kiện là else [điều kiện - then]
Có thể bôi đen if và ấn F1, xem ví dụ cụ thể trong Help, khi nào không hiểu sẽ hỏi GPE tiếp.
Trước khi hỏi bài bạn nên tìm kiếm xem chủ đề mình định hỏi đã có trên GPE chưa, nếu có rồi thì mình tham khảo và gốp y. còn chưa có thì hãy post bài (tránh trường hợp post bài đã có rồi). Thân chào.
 
Lần chỉnh sửa cuối:
Upvote 0
Anh ThuNghi đã viết:
For iA = LBound(MyArr()) To UBound(MyArr())
iFind = MyArr(iA)
Dem = WorksheetFunction.CountIf(MyRng, "*" & iFind & "*")
Set RngFound = MyRng(1)

Đoạn code của anh phức tạp ghê!
Anh cho em hỏi ý nghĩa của đoạn bôi đậm trên với
và tại sao trong Myrng(1) lại có số 1 hả anh?

cám ơn anh
 
Upvote 0
Anh cho em hỏi ý nghĩa của đoạn bôi đậm trên với
và tại sao trong Myrng(1) lại có số 1 hả anh?

For iA = LBound(MyArr()) To UBound(MyArr())
iFind = MyArr(iA)

Set RngFound = MyRng(1)

For iA = LBound(MyArr()) To UBound(MyArr())
Cho biến iA chạy từ phần tử đầu tiên đến phần tử cuối cùng có trong mảng MyArr()

iFind = MyArr(iA)
Gán biến iFind bằng với phần tử thứ iA trong mảng MyArr()

Set RngFound = MyRng(1)
Gán biến RngFound bằng với phần tử thứ nhất trong vùng MyRng
Nếu MyRng= [A1:A10] thì MyRng(1) = [A1], MyRng(10) = [A10]
 
Upvote 0
Chào các bác.
Nhờ các bác xem giúp (trong file đính kèm:
rar.gif
BANGGIA boyxin.rar )

  1. Sau khi List 1 -> List 2, quay lại chọn lại List 1 thì báo lỗi
  2. Sau khi List 1 -> List 2 -> List 3, quay lại chọn lại List 1 hoặc List 2 thì báo lỗi
Em tìm mãi mà không rõ nguyên nhân, cách khắc phục? Mong các bác sớm hồi âm

Oài, sao không ai xem giúp em à.
Các bác bớt chút thời gian vàng ngọc xem giúp em nhé



Không hiểu rõ câu hỏi của bác, bác giải thích cụ thể hơn đi

Xem file đính kèm: yêu cầu chi tiết, có VD tham khảo tại Lọc theo điều kiện cho các ComboBox

Khi chay code timgia (hoặc Nhấn nút Test tại K1)-> lên 1 form có 3 List chọn (1-nhóm hàng, 2-nhà sản xuất, 3-mã số hàng). sau khi chọn đủ 3 list thì sẽ lọc trong sheet1 ra các thông số và cho hiện ở các ô còn lại của form

Nếu chọn list theo đúng trình tự 1 - 2 - 3 thì không vấn đề gì
Nhưng nếu

  1. Sau khi List 1 -> List 2, muốn chọn lại chọn lại List 1 thì báo lỗi
  2. Sau khi List 1 -> List 2 -> List 3, muốn chọn lại chọn lại List 1 hoặc List 2 thì báo lỗi
Tìm mãi mà không rõ nguyên nhân <=> cách khắc phục ? ĐỂ KHÔNG BỊ LỖI
 
Upvote 0
Theo mình, nguyên nhân của lỗi trên là tình trạng code chạy chồng chéo lên nhau do cả 3 List đều dùng sự kiện Change:
-Khi chọn List 1 - code chạy gán giá trị vào List 2. Khi chọn List 2 - code chạy gán giá trị vào List 3: Không có vấn để gì.
-Khi chọn List 1 mà List 2 đã có giá trị - code chạy gán giá trị mới vào List 2 - vô tình kích hoạt sự kiện Change của List 2 - code List 2 chạy chồng lên code List 1 ---> báo lỗi.
Cách khắc phục: dùng sự kiện DropButtonClick cho List 2 và List 3
 
Upvote 0
THUNGHI đã viết:
Sub thaythe()

Dim MyRng As Range, RngFound As Range, iA As Long
Dim ei As Long, iFind As String, Dem As Long
Dim MyArr() As Variant
ActiveSheet.Select
ei = [A65000].End(xlUp).Row
Set MyRng = Range("A1:A" & eR)
MyArr = Array("FRE", "SYD", "MEL", "BNE")
For iA = LBound(MyArr()) To UBound(MyArr())
iFind = MyArr(iA)
Dem = WorksheetFunction.CountIf(MyRng, "*" & iFind & "*")
Set RngFound = MyRng(1)
For i = 1 To Dem
With MyRng
Set RngFound = .Find(iFind, After:=RngFound, SearchOrder:=xlColumns, _
LookIn:=xlFormulas, LookAt:=xlPart, SearchDirection:=xlPrevious)
End With
With RngFound
.Value = Replace(.Value, "KKLU", "KLIS")
.Font.ColorIndex = 5
.AddComment ("OK")
End With
Next
Next





End Sub

Thu nghi viết giúp code chạy ngon

Nhưng không hiểu sao khi bê sang sheet khác chạy báo lỗi 400 hoặc Object were require

Các bác giúp em
 
Lần chỉnh sửa cuối:
Upvote 0
Code chạy sheet này thì được, sheet khác không được

Bác Thunghi à

Em gửi file chạy ko được lên nhé

Bác xem ngâm cứu giúp


ST
 

File đính kèm

  • Book1.zip
    10.8 KB · Đọc: 40
Upvote 0
Khắc phục lỗi khi sub không tồn tại?

Trong lệnh Call <Sub> , Nếu vì 1 lý do nào đó Sub đó bị Delete đi, khi đó sẽ báo lỗi như sau:
PHP:
Compile error:
Sub or Function not defined
Làm sao để bẩy lỗi cho lỗi này, Mình dùng lệnh On Erorr goto <Erorr_Sub> nhưng vẫn không có bẫy được lỗi này.
Mong các bạn chỉ giáo cho? Thanks
 
Upvote 0
Bác Boyxin có viết giúp em một đoạn code, do nhu cầu công việc em phải chình lại một tí
nhưng chỉnh xong không chạy được

------> em thêm code để lọc những dòng có VNHPH tại cột POP

Các bác xem file giúp ST sai ở chỗ nào nhé

------------------------------------------------

Thấy GPE đang lỗi, ngồi cố nghĩ mãi cũng ra được....nhưng vẫn thiếu code chạy để
gắn "KLIS" nếu bill bắt đầu bằng "BNE", "FRE";"MEL";SYD"



Option Explicit
Dim Rng As Range, Str As String, idate As String
Dim Tmp, i As Long, Er As Long
Sub Hang_nhap_Loc()
ActiveSheet.Select
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
Range("A:A,C:C,E:G,J:M,O:O").Select
Selection.Delete Shift:=xlToLeft
Set Rng = [A1].CurrentRegion
Rng.AutoFilter Field:=8, Criteria1:="<>C"
Rng.Offset(1).SpecialCells(12).EntireRow.Delete
Selection.AutoFilter

Rng.AutoFilter Field:=7, Criteria1:="<>VNHPH"
Rng.Offset(1).SpecialCells(12).EntireRow.Delete
Selection.AutoFilter


Er = [A65536].End(xlUp).Row
For i = 2 To Er
idate = Mid(Cells(i, 9), 1, 10)
Cells(i, 9) = idate
Str = Trim(Cells(i, 1))
Cells(i, 1) = "KKLU" & Str
Tmp = Cells(i, 6)
If Cells(i, 1) = Cells(i - 1, 1) Then
Tmp = Tmp + Cells(i - 1, 6)
Cells(i - 1, 8).ClearContents
Cells(i - 1, 7).ClearContents
Cells(i, 6) = Tmp
End If
Cells(i, 6) = Tmp
Next
Range("H2:H" & Er).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Range("G2:G" & Er).SpecialCells(xlCellTypeBlanks).EntireRow.Delete


Range([A1], Selection.End(xlDown)).Columns.AutoFit

With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
[A1].Select
End Sub
 

File đính kèm

  • HN1.zip
    55 KB · Đọc: 72
Lần chỉnh sửa cuối:
Upvote 0
------> em thêm code để lọc những dòng có VNHPH tại cột POP

ngồi cố nghĩ mãi cũng ra được....nhưng vẫn thiếu code chạy để
gắn "KLIS" nếu bill bắt đầu bằng "BNE", "FRE";"MEL";SYD"

CẢM ƠN BÁC ThuNghi đã góp ý. Em đã điều chỉnh lại code.

PHP:
Option Explicit
Dim Rng As Range, Clls As Range, Str As String
Dim Tmp, i As Long, Er As Long
Sub GPE_Loc()
Sheet2.Select
With Application
       .DisplayAlerts = False:       .ScreenUpdating = False
End With

' Xóa những cột màu vàng'
Range("A:A,C:C,E:G,J:M,O:O").Delete Shift:=xlToLeft

' Lọc giữ lại cột POP CD="VNHPH" và cột PREPAID COLLECT CD="C" '
Set Rng = [A1].CurrentRegion
With Rng
    .AutoFilter Field:=7, Criteria1:="<>VNHPH", Field:=8, Criteria2:="<>C"
    .Offset(1).SpecialCells(12).EntireRow.Delete
End With
Selection.AutoFilter

' Một kiểu SUMIF ...    '
Er = [A65536].End(xlUp).Row
For i = 2 To Er
    Cells(i, 9) = Mid(Cells(i, 9), 1, 10)
    Tmp = Cells(i, 6)
    If Cells(i, 1) = Cells(i - 1, 1) Then
        Tmp = Tmp + Cells(i - 1, 6)
        Cells(i - 1, 7).ClearContents
        Cells(i, 6) = Tmp
    End If
    Cells(i, 6) = Tmp
Next
Range("G2:G" & Er).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

' Nối "KKLU" vào cột BL NUM sau khi đã TRIM(..)  '
Set Rng = Range([A2], [A65536].End(xlUp))
For Each Clls In Rng
        Clls = "KKLU" & Trim(Clls)
Next

'Thay "KKLU" = "KLIS" nếu trước khi nối bắt đầu = "FRE" hoặc "MEL" hoặc "BNE" hoặc "SYD" '
With Rng
    .Replace What:="KKLUFRE", Replacement:="KLISFRE"
    .Replace What:="KKLUMEL", Replacement:="KLISMEL"
    .Replace What:="KKLUBNE", Replacement:="KLISBNE"
    .Replace What:="KKLUSYD", Replacement:="KLISSYD"
End With

' Tự động căn chỉnh độ rộng cells  '
[A1].CurrentRegion.Columns.AutoFit
[A1].Select

With Application
    .DisplayAlerts = True:      .ScreenUpdating = True
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom