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

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Chào các anh chị em,

Em xin nhờ các anh chị một chút ạ: Hiện tại em đang muốn lập VBA dạng Sub để hiện outline chỉ một số dòng cụ thể (ví dụ chỉ các mục 2.1, 3.1, 4.1...) nhưng khi em thử ghi macro thì không hiện dòng mã. Em cũng thử tìm trên help nhưng chưa tìm đc dòng lệnh để điều khiển ẩn hiện outline từng dòng mà chỉ ẩn hiện chung theo level đã group.

Có anh chị nào biết chỉ em với ạ.
Em cảm ơn ace.
 
Upvote 0
Anh/Chị trên diễn đàn cho e hỏi : Có cách nào để lấy một giá trị trên 1 Cell bằng hàm iputbox hoặc hàm gì khác không ạ.?
E sử dụng hàm iputbox thì nó chỉ cho phép nhập bằng tay chứ không cho chọn giá trị trên Cell.
Cám ơn!
 
Upvote 0
Thì bạn nhập chỉ số dòng (hàng) & chỉ số cột vô InputBox, như ví dụ sau:
PHP:
Sub LayDuLieu1OBangInputBox()
 Dim TriCanLay, Hang_Cot As String
 Dim Dg As Long, Cot As Integer, VTr As Byte
 Hang_Cot = InputBox("Nhâp Theo Kiêu 'Number(Hàng)|Numbrt(Côt)'", "GPE.COM", "5|9")
 If Len(Hang_Cot) > 2 Then
    VTr = InStr(Hang_Cot, "|")
    Dg = CLng(Left(Hang_Cot, VTr - 1))
    Cot = CInt(Mid(Hang_Cot, VTr + 1, Len(Hang_Cot)))
    TriCanLay = Cells(Dg, Cot).Value
    MsgBox TriCanLay
 End If
End Sub
 
Upvote 0
Thì bạn nhập chỉ số dòng (hàng) & chỉ số cột vô InputBox, như ví dụ sau:
PHP:
Sub LayDuLieu1OBangInputBox()
Dim TriCanLay, Hang_Cot As String
Dim Dg As Long, Cot As Integer, VTr As Byte
Hang_Cot = InputBox("Nhâp Theo Kiêu 'Number(Hàng)|Numbrt(Côt)'", "GPE.COM", "5|9")
If Len(Hang_Cot) > 2 Then
    VTr = InStr(Hang_Cot, "|")
    Dg = CLng(Left(Hang_Cot, VTr - 1))
    Cot = CInt(Mid(Hang_Cot, VTr + 1, Len(Hang_Cot)))
    TriCanLay = Cells(Dg, Cot).Value
    MsgBox TriCanLay
End If
End Sub
Em cám ơn.
Thực ra là e muốn viết một sub xóa dòng trống bằng việc lựa chọn cột điều kiện tùy ý bằng iputbox mà không chọn lên Cell được.
Thôi thì đành nhập bằng tay lên iputbox vậy.
 
Upvote 0
Có phải thế này là bạn muốn không:
Giả dụ cột F có dự liệu từ F5 cho đến F99; Nhưng trong nớ có vài ô trống (trắng) như [F35] & [F40:F41] mà bạn muốn xóa nguyên những dòng đó?
 
Upvote 0
Có phải thế này là bạn muốn không:
Giả dụ cột F có dự liệu từ F5 cho đến F99; Nhưng trong nớ có vài ô trống (trắng) như [F35] & [F40:F41] mà bạn muốn xóa nguyên những dòng đó?
Vâng đúng rồi ạ.
Nên e tính sử dụng inputbox chọn đại 1 ô trên cột F. Sau đó dùng lệnh .row để xác định cột cần xóa dữ liệu ạ
 
Upvote 0
Bạn khai báo 1 biến kiểu Range
Tạo vòng lặp duyệt theo cột f:f mà mình ví dụ
Gạp ô nào trống thì nạp nó vô biến (đã khai báo)
Sau khi duyệt hết cột F:F thì nếu tham biến không phải là Nothing thì xóa . . .
 
Upvote 0
Bạn khai báo 1 biến kiểu Range
Tạo vòng lặp duyệt theo cột f:f mà mình ví dụ
Gạp ô nào trống thì nạp nó vô biến (đã khai báo)
Sau khi duyệt hết cột F:F thì nếu tham biến không phải là Nothing thì xóa . . .
Nếu vậy hình như nó không được linh động cho lắm ạ. Em muốn là mình muốn lựa chọn cột trước khi duyệt for. Bởi đâu cố định vd là cột F mãi được
 
Upvote 0
Càng linh động thì càng sai sót thêm thôi.
Mà 1 CSDL chỉ 1 sai sót nhỏ là thành đống rác.
 
Upvote 0
Nếu vậy hình như nó không được linh động cho lắm ạ. Em muốn là mình muốn lựa chọn cột trước khi duyệt for. Bởi đâu cố định vd là cột F mãi được
Yêu cầu của bạn chỉ áp dụng đối với tiêu đề cột là dòng 1, vì nếu chọn Cell rổng và Delete và xóa dòng thì nó sẽ dịch chuyển dữ liệu lên trên.
 
Upvote 0
Dạ xin chào các bác,

Chả là em mới tập tành học VBA nên trình độ còn kém quá, có bài toán như ở file đính kèm nghĩ mãi mà vẫn chưa ra cách giải. Nhờ các bác chỉ giáo giúp em với ạ. Em cảm ơn nhiều.
 

File đính kèm

Upvote 0
Dạ xin chào các bác,

Chả là em mới tập tành học VBA nên trình độ còn kém quá, có bài toán như ở file đính kèm nghĩ mãi mà vẫn chưa ra cách giải. Nhờ các bác chỉ giáo giúp em với ạ. Em cảm ơn nhiều.
Bạn chạy thử code này xem sao
Mã:
Dim Dem As Long
Sub Xuat()
Dim DL
Dim i, j, k
With Sheet1
    DL = .Range("a2", .Range("a1000000").End(xlUp))
    For i = 1 To UBound(DL)
        If DL(i, 1) <> "" Then
            j = j + 1
        End If
    Next i
    Dem = Dem + 1
    Dem = (Dem - 1) Mod j + 1
    
    For i = 1 To UBound(DL)
        If DL(i, 1) <> "" Then
            k = k + 1
            If k = Dem Then
                .Range("h1") = DL(i, 1)
                Exit For
            End If
        End If
    Next i
End With
End Sub
 
Upvote 0
Bạn chạy thử code này xem sao
Mã:
Dim Dem As Long
Sub Xuat()
Dim DL
Dim i, j, k
With Sheet1
    DL = .Range("a2", .Range("a1000000").End(xlUp))
    For i = 1 To UBound(DL)
        If DL(i, 1) <> "" Then
            j = j + 1
        End If
    Next i
    Dem = Dem + 1
    Dem = (Dem - 1) Mod j + 1
   
    For i = 1 To UBound(DL)
        If DL(i, 1) <> "" Then
            k = k + 1
            If k = Dem Then
                .Range("h1") = DL(i, 1)
                Exit For
            End If
        End If
    Next i
End With
End Sub
Chuẩn luôn rồi bác ạ. Mỗi tội em đọc code của bác không hiểu gì cả :( chắc tại em thiếu kiến thức quá, để em mày mò học thêm vậy :(
Tks bác nhiều nhé.
 
Upvote 0
Chào các anh chị,

Em cũng mới tập viết VBA, đoạn code sau em check đi check lại không bị lỗi gì nhưng không hiểu sao lại không chạy. Nhờ các anh chị kiểm tra giúp em với ạ. Mục tiêu của đoạn code là khi gõ mã vào cột 1 của Sheet 1 thì Excel sẽ tìm kiếm dòng công thức từ thư viện "Lib" để copy vào dòng vừa gõ mã. Em cảm ơn các anh chị.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim var As Variant
    Dim Add As String
    If Target.Cells.Count > 1 Then
        Exit Sub
    End If
    On Error GoTo ErrHandler:
    
    If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
        Add = Intersect(Target, Range("A:A")).Address
        var = Application.Match(Range(Add).Value, Worksheets("Lib").Columns(1), 0)
        Worksheets("Lib").Rows(var).Copy
        Worksheets("Sheet1").Range(Add).Paste
        
    End If
ErrHandler:
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chào mọi người, mọi người giúp em về code VBA cho việc tính các thông số rij (thời gian sẵn sàng), dij (thời gian tới hạn) của các công việc trên sơ đồ mạng ạ.
Cụ thể như hình đính kèm214307
Ví dụ có 3 công việc được gia công trên 4 máy như hình (ô 2,1 thì 2 là máy 2, 1 là công việc 1 ạ). Em sử dụng giải thuật shifting bottleneck để điều độ các công việc. Đầu tiên, em tính rij, dij cho tungwg ô như vậy, sau đó sẽ tìm được máy nghẽn rồi chọn thứ tự điều độ trên đó (trên hình là máy 1). Sau đó em sẽ tiến hành tính lại rij, dij của sơ đồ mạng mới (có thêm các đường nối giữa các công việc trên máy 1). Sau đó lại tìm máy nghẽn, rồi lặp lại cho tới khi hết máy nghẽn.
Em tính được rij, dij của lần đầu tiên, nhưng sau khi lặp, có thêm có đường liên kết mới, em không biết viết code để tính thế nào. Mọi người giúp em với ạ. Em cảm ơn
 
Upvote 0
Các anh chị trong diễn đàn có ai biết tài liệu về VBA để vẽ biểu đồ và tinh chỉnh biểu đồ không? Cho em xin với. Xin cám ơn !
 
Upvote 0
các thầy cho em hỏi 1 xíu ạ. ví dụ em nghĩ như này:
nếu tên sheet = "a" hoặc "b" thì....
sẽ phải viết code như nào ạ
 
Upvote 0
Web KT

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

Back
Top Bottom