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:
Khi i=1 thì cou=0+1=1
Vậy khi i=2 thì theo bạn i =? luôn >0 là chắc chắn nên kết quả của bạn có 1 giá trị duy nhất

Đúng rồi ! Cái này em đúng là bị NGU quá mà +-+-+-++-+-+-++-+-+-++-+-+-+ Khi mình Next i đi thì biến cou sẽ lấy giá trị cũ của nó từ vòng lặp trước làm giá trị ban đầu nên biến cou đâu còn bằng 0 nữa. Cảm ơn anh nhiều ạ....--=0--=0--=0
 
Lần chỉnh sửa cuối:
Upvote 0
vì chưa bao giờ làm việc trên file text nên chưa hiểu rõ cách làm việc với nó như thế nào? mong các thành viên giúp đỡ, vấn đề như sau, tôi có rất nhiều file text, bây giờ muốn tổng hợp tất cả các file text đó vào 1 file excel, với mỗi sheet tương ứng là 1 file text, tôi có đính kèm file mẫu, xin được sự giúp đỡ của các bạn, xin chân thành cảm ơn
http://www.mediafire.com/download/qt0bk9ab38xw0jd/CHUYEN_FILE_TEXT_VAO_EXCEL.rar

Lấy dữ liệu từ file text thì được rồi nhưng sao phần tô màu linh tinh vậy? 3 sheet mà tô màu chẳng giống nhau tí nào
 
Upvote 0
Không cần tô màu đâu anh

Cho hết đống code này vào 1 Module nhé:
Mã:
Function SheetExists(ByVal SheetName As String) As Boolean
  On Error Resume Next
  SheetExists = Not Sheets(SheetName) Is Nothing
End Function
Private Sub ImportTextFile(ByVal FilePath As String, ByVal Target As Range)
  With Target.Parent.QueryTables.Add("TEXT;" & FilePath, Target)
    .TextFileTabDelimiter = True
    .Refresh False
  End With
End Sub
Sub Main()
  Dim vFiles, fileItem, wks As Worksheet
  Dim SheetName As String, FilePath As String
  vFiles = Application.GetOpenFilename("Text Files, *.txt", , , , True)
  If IsArray(vFiles) Then
    For Each fileItem In vFiles
      FilePath = CStr(fileItem)
      SheetName = Mid(FilePath, InStrRev(FilePath, "\") + 1)
      SheetName = Left(SheetName, Len(SheetName) - 4)
      If Not SheetExists(SheetName) Then Worksheets.Add(After:=Sheets(Sheets.Count)).Name = SheetName
      Set wks = Worksheets(SheetName)
      wks.UsedRange.Clear
      ImportTextFile FilePath, wks.Range("A1")
    Next
  End If
End Sub
Xong, chay sub Main và xem kết quả
Phần format (tô màu, kẻ khung...) bạn có thể làm bằng tay hoặc bằng code tùy ý
---------------------
Lưu ý: Khi chạy code từ lần thứ 2 trở đi thì nó sẽ xóa dữ liệu cũ, đè lên bằng dữ liệu mới
 

File đính kèm

  • ImportTextFiles.xlsm
    20.5 KB · Đọc: 19
Upvote 0
E chào các AC trong diễn đàn. Nhờ các AC xem giúp em đoạn code không cho nhấp chuột phải tại 1 Picture, e thử mà k thấy nó hoạt động ạ. E xin cảm ơn !
 

File đính kèm

  • KHO.xlsm
    103.6 KB · Đọc: 6
Upvote 0
Upvote 0
E chào các AC trong diễn đàn. Nhờ các AC xem giúp em đoạn code không cho nhấp chuột phải tại 1 Picture, e thử mà k thấy nó hoạt động ạ. E xin cảm ơn !

Bạn đang dùng code:
Mã:
Sub Worksheet_BeforeRightClick([COLOR=#ff0000]ByVal Target As Range[/COLOR], Cancel As Boolean) 
''......................
End Sub
Chú ý chỗ màu đỏ: Đối số Target thuộc Range. Vậy nên code này chỉ có tác dụng trên Range và đương nhiên chẳng có tác dụng gì với các đối tượng Shape, Picture...
 
Upvote 0
Bạn đang dùng code:
Mã:
Sub Worksheet_BeforeRightClick([COLOR=#ff0000]ByVal Target As Range[/COLOR], Cancel As Boolean) 
''......................
End Sub
Chú ý chỗ màu đỏ: Đối số Target thuộc Range. Vậy nên code này chỉ có tác dụng trên Range và đương nhiên chẳng có tác dụng gì với các đối tượng Shape, Picture...
Vâng e sẽ nghiên cứu thêm về các đối số này, chúc thầy 1 ngày mới tốt lành :)
 
Upvote 0
Chào các bạn,

Các bạn giúp cải tiến Sub (Code Dic) hiện có trong file để có thể Count được Item (giống hàm countif ngoài trang tính)
Kết quả dán vào cột M -tô màu xanh, (kế bên có cột N đã làm sẵn hàm countif để đối chiếu.)

Hiện tại trong code Dic mình chỉ hiểu và tính tổng như Sumif (còn kết hợp Count theo từng Item thì chịu thua) nên nhờ các bạn giúp cải tiến để code trên đáp ứng được nhu cầu là vừa tính tổng như sumif lẫn countif

Trân trọng cảm ơn!
Mã:
Sub Dic_02()
    Dim Dic As Object
    Dim i As Long, j As Long, k As Long
    Dim Tmp As String
    Dim Arr, dArr
    Arr = Range(Sheet1.[A2], Sheet1.[A100000].End(3)).Resize(, 5)
    ReDim dArr(1 To UBound(Arr, 1), 1 To 7)
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        For i = 1 To UBound(Arr, 1)
            Tmp = Arr(i, 1)
            If Not .Exists(Tmp) Then
                k = k + 1
                .Add Tmp, k
                For j = 1 To UBound(Arr, 2)
                    dArr(k, 1) = k
                    dArr(k, j + 1) = Arr(i, j)
                Next j
            Else
                dArr(.Item(Tmp), 3) = dArr(.Item(Tmp), 3) + Arr(i, 2)
                dArr(.Item(Tmp), 4) = dArr(.Item(Tmp), 4) + Arr(i, 3)
                dArr(.Item(Tmp), 5) = dArr(.Item(Tmp), 5) + Arr(i, 4)
                dArr(.Item(Tmp), 6) = dArr(.Item(Tmp), 6) + Arr(i, 5)
            End If
        Next i
    End With
    Sheet1.Range("G2:M19").ClearContents
    Sheet1.Range("G2").Resize(k, 7) = dArr
End Sub
 

File đính kèm

  • Test_code_DIC_001.xlsb
    18.9 KB · Đọc: 14
Upvote 0
có nên trả lời cho anh này không ta ? hi hi
cộng dồn số lượng được mà không cộng dồn số lần được là sao ta
dArr(.Item(Tmp), 7) = dArr(.Item(Tmp), 7) + 1
 
Upvote 0
có nên trả lời cho anh này không ta ? hi hi
cộng dồn số lượng được mà không cộng dồn số lần được là sao ta
dArr(.Item(Tmp), 7) = dArr(.Item(Tmp), 7) + 1

Bác giúp phát đi. (mới bước vào con đường Dic mà, vì thấy nó thật hay, và nhiều cái tiện, nhưng chưa hiểu được các thuộc tính của nó lắm).
Đọc Dic chỉ thấy mỗi cái Dic.Count nên nó cộng cả cục. Hông biết làm sao cộng dồn từng Item ...hichic)(&&@@
 
Lần chỉnh sửa cuối:
Upvote 0
Bác giúp phát đi. (mới bước vào con đường Dic mà, vì thấy nó thật hay, và nhiều cái tiện, nhưng chưa hiểu được các thuộc tính của nó lắm).
Đọc Dic chỉ thấy mỗi cái Dic.Count nên nó cộng cả cục. Hông biết làm sao cộng đồn từng Item ...hichic)(&&@@
nhìn cho kỹ đi nha . banh con mắt lên mà nhìn #335 đi
 
Upvote 0
thôi mình nói luôn vậy
trong khối
if not dic.exists
dArr(k, 7) =1
end if

Ok. đã được rồi. Cảm ơn, cảm ơn! => cảm giác thật sướng. Công nhận Dic tuyệt thật... (mà mới chỉ hiểu có sơ sơ ah)
Nhưng vẫn chưa hiểu vụ cộng dồn này lắm, Bác có thể giải thích rõ ràng cách chạy code của Dic ở đoạn vừa giúp mình không?
 
Lần chỉnh sửa cuối:
Upvote 0
Ok. đã được rồi. Cảm ơn, cảm ơn!
Nhưng vẫn chưa hiểu vụ cộng dồn này lắm, Bác có thể giải thích rõ ràng cách chạy code của Dic ở đoạn vừa giúp mình không?
thì mỗi item của Dic ở đây lưu lại số index của item đó trong cái mảng dArr
chẳng hạn gọi dArr(Dic("A"), c + 1) cũng chính là gọi dArr(1,c+1) thôi mà
 
Upvote 0
Chào mọi người, mọi người giúp em thêm câu lệnh nào đó trong File này để sau khi nhấn tô , sẽ không có cái đường viền chạy quanh cell nữa

Ví dụ khi em chon nhạc - Hiếu rồi ấn tô đường viền chạy quanh ô F23 ko xuất hiện nữa. Em xin cảm ơn
 
Upvote 0
Chào mọi người, mọi người giúp em thêm câu lệnh nào đó trong File này để sau khi nhấn tô , sẽ không có cái đường viền chạy quanh cell nữa

Ví dụ khi em chon nhạc - Hiếu rồi ấn tô đường viền chạy quanh ô F23 ko xuất hiện nữa. Nếu có thể xin giải thích giúp em đoạn này trong code với ạ :

With Range("C4:K32").Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With

Em xin cảm ơn
 

File đính kèm

  • to mau excel theo o da chon.xls
    48.5 KB · Đọc: 12
Upvote 0
Chào mọi người, mọi người giúp em thêm câu lệnh nào đó trong File này để sau khi nhấn tô , sẽ không có cái đường viền chạy quanh cell nữa
Câu lệnh này:
Mã:
Application.CutCopyMode = False
Mấy dòng trong câu hỏi trên là không tô màu (Fill).
 
Upvote 0
Web KT
Back
Top Bottom