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:
Nhờ các bạn giúp viết code cho dòng TỔNG CỘNG như sau :
Ô C159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(C$10:C$158))
Ô D159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(D$10:D$158))
Ô E159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(E$10:E$158))
Ô F159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(F$10:F$158))
Ô G159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(G$10:G$158))
Ô H159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(H$10:H$158))
Các bạn lưu ý
1/ Dòng Tổng Cộng này sẽ không cố định, nó có thể bị dời lên hay dời xuống
2/ Vui lòng viết code để trong Module
Cảm ơn các bạn!
 

File đính kèm

  • DongTongCong.xls
    41.5 KB · Đọc: 12
Upvote 0
Nhờ các bạn giúp viết code cho dòng TỔNG CỘNG như sau :
Ô C159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(C$10:C$158))
Ô D159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(D$10:D$158))
Ô E159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(E$10:E$158))
Ô F159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(F$10:F$158))
Ô G159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(G$10:G$158))
Ô H159
PHP:
=SUMPRODUCT((CODE($B$10:$B$158)>72)*(CODE($B$10:$B$158)<87)*(H$10:H$158))
Các bạn lưu ý
1/ Dòng Tổng Cộng này sẽ không cố định, nó có thể bị dời lên hay dời xuống
2/ Vui lòng viết code để trong Module
Cảm ơn các bạn!
Ý cùa mình là lập các công thức trên cho dòng Tổng cộng rồi sau đó Paste Value luôn cho dòng này. Vì hiện nay tôi đang dùng 1 code khác, mà code này khi chạy thì nó Paste Value toàn bộ bảng tính. Xin cảm ơn
---------
P/S Vì mỗi tháng sẽ phát sinh các Sheet như Thang01, Thang02 ....Thang12, tôi định đặt Name, nếu như vậy đặt name cho mỗi Tháng thì nhiều quá!
 
Upvote 0
Ý cùa mình là lập các công thức trên cho dòng Tổng cộng rồi sau đó Paste Value luôn cho dòng này. Vì hiện nay tôi đang dùng 1 code khác, mà code này khi chạy thì nó Paste Value toàn bộ bảng tính. Xin cảm ơn
---------
P/S Vì mỗi tháng sẽ phát sinh các Sheet như Thang01, Thang02 ....Thang12, tôi định đặt Name, nếu như vậy đặt name cho mỗi Tháng thì nhiều quá!
Bạn dùng Code sau và đảm bảo rằng dòng liền sau dòng 159 là trống, ô A159 không rỗng (A159 - ô cuối vũng dữ liệu)
Mã:
Sub Total()
Dim Arr, sArr, i As Long, j As Long
Arr = Range("A10", Range("A10").End(xlDown)).Resize(, Range("a10").End(xlToRight).Column)
ReDim sArr(1 To 1, 1 To UBound(Arr, 2) - 2)


For i = 1 To UBound(Arr, 1)
    If Not IsNumeric(Arr(i, 2)) Then
        For j = 3 To UBound(Arr, 2)
            sArr(1, j - 2) = sArr(1, j - 2) + Arr(i, j)
        Next
    End If
Next
Range("C" & Range("A10").End(xlDown).Row).Resize(, UBound(sArr, 2)) = sArr
End Sub
 
Upvote 0
Ý cùa mình là lập các công thức trên cho dòng Tổng cộng rồi sau đó Paste Value luôn cho dòng này. Vì hiện nay tôi đang dùng 1 code khác, mà code này khi chạy thì nó Paste Value toàn bộ bảng tính. Xin cảm ơn
---------
P/S Vì mỗi tháng sẽ phát sinh các Sheet như Thang01, Thang02 ....Thang12, tôi định đặt Name, nếu như vậy đặt name cho mỗi Tháng thì nhiều quá!
Góp vui thêm 1 cách, chơi xong thì bỏ!!!
Mã:
Sub TongCong()    
    With ActiveSheet
        Range("B10:B" & [B65536].End(3).Row).Name = "BBBB"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 1).Name = "CCCC"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 2).Name = "DDDD"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 3).Name = "EEEE"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 4).Name = "FFFF"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 5).Name = "GGGG"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 6).Name = "HHHH"
    End With
    [B50000].End(xlUp).Offset(1, 1).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(CCCC))"
    [B50000].End(xlUp).Offset(1, 2).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(DDDD))"
    [B50000].End(xlUp).Offset(1, 3).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(EEEE))"
    [B50000].End(xlUp).Offset(1, 4).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(FFFF))"
    [B50000].End(xlUp).Offset(1, 5).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(GGGG))"
    [B50000].End(xlUp).Offset(1, 6).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(HHHH))"
    With Range([A10], [A5000].End(xlUp)).Resize(, 8)
        .Value = .Value
    End With
    ActiveWorkbook.Names("BBBB").Delete
    ActiveWorkbook.Names("CCCC").Delete
    ActiveWorkbook.Names("DDDD").Delete
    ActiveWorkbook.Names("EEEE").Delete
    ActiveWorkbook.Names("FFFF").Delete
    ActiveWorkbook.Names("GGGG").Delete
    ActiveWorkbook.Names("HHHH").Delete
End Sub
 
Upvote 0
Góp vui thêm 1 cách, chơi xong thì bỏ!!!
Mã:
Sub TongCong()    
    With ActiveSheet
        Range("B10:B" & [B65536].End(3).Row).Name = "BBBB"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 1).Name = "CCCC"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 2).Name = "DDDD"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 3).Name = "EEEE"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 4).Name = "FFFF"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 5).Name = "GGGG"
        Range("B10:B" & [B65536].End(3).Row).Offset(, 6).Name = "HHHH"
    End With
    [B50000].End(xlUp).Offset(1, 1).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(CCCC))"
    [B50000].End(xlUp).Offset(1, 2).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(DDDD))"
    [B50000].End(xlUp).Offset(1, 3).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(EEEE))"
    [B50000].End(xlUp).Offset(1, 4).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(FFFF))"
    [B50000].End(xlUp).Offset(1, 5).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(GGGG))"
    [B50000].End(xlUp).Offset(1, 6).Value = "=SUMPRODUCT((CODE(BBBB)>72)*(CODE(BBBB)<87)*(HHHH))"
    With Range([A10], [A5000].End(xlUp)).Resize(, 8)
        .Value = .Value
    End With
    ActiveWorkbook.Names("BBBB").Delete
    ActiveWorkbook.Names("CCCC").Delete
    ActiveWorkbook.Names("DDDD").Delete
    ActiveWorkbook.Names("EEEE").Delete
    ActiveWorkbook.Names("FFFF").Delete
    ActiveWorkbook.Names("GGGG").Delete
    ActiveWorkbook.Names("HHHH").Delete
End Sub
Nếu là mình thì mình sẽ làm thế này nhìn cho đẹp tí
PHP:
Sub TongCong()
Dim Sname, i
Sname = Array("BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH")
For i = 0 To 6
   Range("B10:B" & [B65536].End(3).Row).Offset(0, i).Name = Sname(i)
Next
'......................
For i = 0 To 6
    ActiveWorkbook.Names(Sname(i)).Delete
Next

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mong các thầy chỉ em với

Em có phiếu chứng từ , và em muốn gán 1 nút cmd để khi nhấp vào nút khai báo sẽ hiện tất cả các dòng bị ẩn, khi khai báo xong em click xong sẽ ẩn tất cả các dòng rỗng và = 0 nhưng những dòng có dữ liệu thì để lại đồng thời protect hết tất cả không cho chỉnh sữa, nhưng em viết code như thế này thì nó ẩn hết tất cả nd và dòng rỗng, mong các thầy chỉnh lại giúp em. Cám ơn. Em có file đính kèm

Sub Cmd_Click()
Sheets("CT").Unprotect "3624"
DK = Cmd.Caption = "Xong"
Range("A3:A1599").SpecialCells(3, 22).EntireRow.Hidden = DK
Cmd.Caption = Choose(-1 * DK + 1, "Xong", "Khai bao")
Sheets("CT").Protect "3624"
End Sub
 

File đính kèm

  • Hoi Lap Nut KB.rar
    52.3 KB · Đọc: 6
Upvote 0
Các bạn cho mình hỏi, cách clear format các màu tô số liệu
Trong File mình có nhiều màu tô số liệu ví dụ màu nâu (.Font.ColorIndex = 13) màu đỏ (.Font.ColorIndex = 3) ...
Bây giờ mình muốn xóa hết các màu chỉ giữ lại màu nâu ? thì code viết như thế nào?
cảm ơn các bạn
 
Upvote 0
Help file excel với VBA

Hiện tại mình đang có 1 file excel.Mình đã viết 1 số công thức trên đó bằng VBA.

HIện tại mình cần thao tác kiểm tra giá trị của 2 cell trước khi nhấn enter đề thực hiện.Mọi người giúp đỡ mình cái này nhe.

Mọi người kiểm tra ngay sheet INPUT Sheet. Mình muốn so sánh giá trị của cells(5,3) và Cột(E9:E65536)


Thanks all.
 

File đính kèm

  • Label Data for WH_1.rar
    224.5 KB · Đọc: 19
Upvote 0
Các bạn cho mình hỏi, cách clear format các màu tô số liệu
Trong File mình có nhiều màu tô số liệu ví dụ màu nâu (.Font.ColorIndex = 13) màu đỏ (.Font.ColorIndex = 3) ...
Bây giờ mình muốn xóa hết các màu chỉ giữ lại màu nâu ? thì code viết như thế nào?
cảm ơn các bạn
Bài này sao không có ai giúp mình nhỉ, chẳng lẻ mình giải thích không ai hiểu!!!!
Giờ trong khối A1: B100, muốn giữ màu nâu, còn các màu còn lại thì clear hết, đã record macro rồi, nhưng xóa hết thì biết, còn giữ lại 1 màu như trên thì hổng biết, mong sự giúp đỡ của các bạn!
 
Upvote 0
Bài này sao không có ai giúp mình nhỉ, chẳng lẻ mình giải thích không ai hiểu!!!!
Giờ trong khối A1: B100, muốn giữ màu nâu, còn các màu còn lại thì clear hết, đã record macro rồi, nhưng xóa hết thì biết, còn giữ lại 1 màu như trên thì hổng biết, mong sự giúp đỡ của các bạn!
Bạn thử code này
PHP:
Sub xoa_format()
Dim cell
For Each cell In [A1:B100]
   If cell.Font.ColorIndex <> 13 Then
      cell.Font.ColorIndex = xlColorIndexAutomatic
   End If
Next
End Sub
 
Upvote 0
mong các bác xem giúp em đây là lỗi gì và sửa như thế nào ạ!

Em viết rồi cho chạy nhưng mà lúc nào nó cũng báo lỗi:
"End if without block if"

''Tinh toan


For i = nBG To nEND
'Tinh DeltaLtong
DeltaLtong(i) = K * P(i) * Lcoc / EA
SDmin(i) = DeltaLtong(i)
Thudan:
Qfthuc(i) = 0
Smui(i) = (SD(i) - DeltaLtong(i)) * 1000
DeltaLi(i) = (SD(i) - Smui(i) / 2) * 1000
For j = 1 To nlop
'Tinh suc khang ben tung lop
Wi(i, j) = A(j) * Math.Log(DeltaLi(i)) + B(j)
If Wi(i, j) < 0 Then SD(i) = SD(i) + DeltaSD
GoTo Thudan
End If
Fithuc(i, j) = Wi(i, j) * L(j) / 10
Qfthuc(i) = Qfthuc(i) + Fithuc(i, j) * Dcoc * PI
Next
'Tinh suc khang mui
Wmui(i) = C(nlop) * Math.Log(Smui(i)) + D(nlop)
If Wmui(i) < 0 Then SD(i) = SD(i) + DeltaSD
GoTo Thudan
End If
Qpthuc(i) = PI * Dcoc ^ 2 / 4 * Wmui(i) / 10
Qthuc(i) = Qfthuc(i) + Qpthuc(i)
DeltaQP(i) = Qthuc(i) - P(i)
'Kiem tra DeltaQP(i)
If DeltaQP(i) = 0 Then
GoTo Thoat
Else
If DeltaQP(i) > 0 Then
SD(i) = 0
GoTo Thoat
Else
DeltaQP(i) = Abs(DeltaQP(i))

Do
Do While DeltaQP(i) > epxilon
If SD(i) >= SDmax Then
GoTo Thoat
Else
SD(i) = SD(i) + DeltaSD
GoTo Thudan
End If
Loop
Loop Until DeltaQP(i) <= epxilon
End If
End If


Thoat:
 
Upvote 0
PHP:
For i = nBG To nEND
'Tinh DeltaLtong
DeltaLtong(i) = K * P(i) * Lcoc / EA
SDmin(i) = DeltaLtong(i)
Thudan:
Qfthuc(i) = 0
Smui(i) = (SD(i) - DeltaLtong(i)) * 1000
DeltaLi(i) = (SD(i) - Smui(i) / 2) * 1000
For j = 1 To nlop
'Tinh suc khang ben tung lop
Wi(i, j) = A(j) * Math.Log(DeltaLi(i)) + B(j)
If Wi(i, j) < 0 Then SD(i) = SD(i) + DeltaSD
GoTo Thudan
End If
Fithuc(i, j) = Wi(i, j) * L(j) / 10
Qfthuc(i) = Qfthuc(i) + Fithuc(i, j) * Dcoc * PI
Next
'Tinh suc khang mui
Wmui(i) = C(nlop) * Math.Log(Smui(i)) + D(nlop)
If Wmui(i) < 0 Then SD(i) = SD(i) + DeltaSD
GoTo Thudan
End If
Qpthuc(i) = PI * Dcoc ^ 2 / 4 * Wmui(i) / 10
Qthuc(i) = Qfthuc(i) + Qpthuc(i)
DeltaQP(i) = Qthuc(i) - P(i)
'Kiem tra DeltaQP(i)
If DeltaQP(i) = 0 Then
GoTo Thoat
Else
If DeltaQP(i) > 0 Then
SD(i) = 0
GoTo Thoat
Else
DeltaQP(i) = Abs(DeltaQP(i))

Do
Do While DeltaQP(i) > epxilon
If SD(i) >= SDmax Then
GoTo Thoat
Else
SD(i) = SD(i) + DeltaSD
GoTo Thudan
End If
Loop
Loop Until DeltaQP(i) <= epxilon
End If
End If

Bạn gửi file lên thì dễ xem hơn nhiều
 
Upvote 0
Em viết rồi cho chạy nhưng mà lúc nào nó cũng báo lỗi:
"End if without block if"
Mã:
''Tinh toan

    If Wi(i, j) < 0 Then SD(i) = SD(i) + DeltaSD
    GoTo Thudan
   [COLOR=#ff0000][B]End If[/B][/COLOR]
    
    If Wmui(i) < 0 Then SD(i) = SD(i) + DeltaSD
    GoTo Thudan
   [COLOR=#ff0000][B]End If[/B][/COLOR]


Thoat:
Mấy cái End If màu đỏ là thừa
Cấu trúc If phải thế này mới đúng
Mã:
''Tinh toan
If Wi(i, j) < 0 Then
  SD(i) = SD(i) + DeltaSD
  GoTo Thudan
[COLOR=#ff0000]End If[/COLOR]
    
If Wmui(i) < 0 Then
  SD(i) = SD(i) + DeltaSD
  GoTo Thudan
[COLOR=#ff0000]End If[/COLOR]



Thoat:
 
Lần chỉnh sửa cuối:
Upvote 0
Wi(i, j) = A(j) * Math.Log(DeltaLi(i)) + B(j)
Em sửa như bác chỉ rồi nhưng ở phần này nó chạy và không nhận đc giá trị nào cả. k biết còn lỗi gì ở câu lệnh này không ạ??
bác xem giúp em với!
 
Upvote 0
Wi(i, j) = A(j) * Math.Log(DeltaLi(i)) + B(j)
Em sửa như bác chỉ rồi nhưng ở phần này nó chạy và không nhận đc giá trị nào cả. k biết còn lỗi gì ở câu lệnh này không ạ??
bác xem giúp em với!

Muốn biết chi tiết còn lỗi nào không thì buộc phải có file đính kèm bạn à!
Tụng kinh bằng băng cassette thế này khó thành chánh quả lắm! Ẹc... Ẹc...
 
Upvote 0
Cần các cao thủ giúp đỡ về đoạn code này

Em hơi kém về excel xin các pro giải thích hộ em đoạn code này với , càng chi tiết càng tốt ạ , em xin cảm ơn nhiều nhiều .................

Private Sub ListBox1_Click()
ActiveCell.Value = Sheet1.ListBox1.Value
HideTextBox1
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
loc1
End Sub
Private Sub ListBox2_Click()
ActiveCell.Value = Sheet1.ListBox2.Value
HideTextBox2
End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
loc2
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrHandler
Application.EnableEvents = False
Dim val As String
Dim rng As Range
If Not Intersect(Target, [b3:b100]) Is Nothing Then
Target.Offset(0, 1).Value = Application.WorksheetFunction.VLookup(Target.Value, Sheet2.Range("Nhap"), 2, 0)
Target.Offset(0, 2).Value = Application.WorksheetFunction.VLookup(Target.Value, Sheet2.Range("Nhap"), 3, 0)
End If

If Not Intersect(Target, [C3:C100]) Is Nothing Then
r = Application.WorksheetFunction.Match(Target.Value, Sheet2.Range("TenSP"), 0)
Target.Offset(0, -1).Value = Application.WorksheetFunction.Index(Sheet2.Range("Mahang"), r)
Target.Offset(0, 1).Value = Application.WorksheetFunction.Index(Sheet2.Range("GiaNhap"), r)

End If

ErrHandler:
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [b3:b10000]) Is Nothing Then
thaydoi1
Else
HideTextBox1
End If

If Not Intersect(Target, [C3:C10000]) Is Nothing Then
thaydoi2
Else
HideTextBox2
End If


End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bổ sung code tính toán.

sheet MAUCHUAN là sheet dữ liệu. Sau khi tra mã công việc ở sheet TLuong DT (click vào A10 sheet TLuong DT và chọn 1 công việc) thì ở cột P ( cột số lượng) công thức tính toán là P11 = O11 x D10 ; nhưng công thức ở cột P thuờng không đúng khi tra mã hiệu thứ 2. Mong các anh bổ sung đoạn code phần tính toán đó ở sheet TLuong DT ( hoặc công thức, name động). Thường thì sau khi tra mã em toàn dùng thủ công để đánh đúng công thức rồi kéo xuống, nên em muốn sau khi tra mã thì công thức tính ở cột P là chính xác. Em co nhặt được phần bổ sung này nhưng ko đúng:

Tinh so luong:
m = Target.Row
n = Target.Offset(0, -1).End(xlUp).Row
Target.Offset(0, 5) = "=(O" & n & "*D" & m & ",3)"

Em cảm ơn. Thân
http://www.mediafire.com/?6m729co1qp7ec24
 
Upvote 0
Nếu m = 5, n = 6 thì "=(O" & n & "*D" & m & ",3)" trở thành:

=(O6*D5,3)

Bạn xem bình thường gõ vào ô cái ấy sẽ ra cái gì
 
Upvote 0
Upvote 0
Status
Không mở trả lời sau này.
Web KT

Bài viết mới nhất

Back
Top Bottom