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:
Sub test()
Dim i As Integer
For i = 2 To 36 Step 5
For j = 8 To 38 Step 5
Range("G" & i).Value = "='[03.2019 CROWN.xlsm]Oshidashi Crown'!K$" & j
Next j
Next i
End Sub
nhờ các thầy giúp em xem đoạn code này sai chỗ nào với ạ
Đơn thuần em muốn ở ô:
G2 = K8 của sheet khác
G7= K13
 
Upvote 0
nhờ các thầy giúp em xem đoạn code này sai chỗ nào với ạ
Đơn thuần em muốn ở ô:
G2 = K8 của sheet khác
G7= K13
Bạn dùng 2 vòng lặp ở tình huấn này là không đúng
Mã:
Sub test()
Dim i As Integer
For i = 2 To 36 Step 5
Range("G" & i).Value = "='[03.2019 CROWN.xlsm]Oshidashi Crown'!K$" & i + 6
Next i
End Sub
 
Upvote 0
Bạn dùng 2 vòng lặp ở tình huấn này là không đúng
Mã:
Sub test()
Dim i As Integer
For i = 2 To 36 Step 5
Range("G" & i).Value = "='[03.2019 CROWN.xlsm]Oshidashi Crown'!K$" & i + 6
Next i
End Sub
nếu em muốn cho nó chạy từ cột G đến cột AK thì phải thêm vòng lặp thế nào ạ
 
Upvote 0
Các bác cho em hỏi có lệnh như này thì viết như nào ạ?
Nếu textbox.text = "" thì không không thực hiện chạy sub ( không thực nhập dữ liệu từ button "nhập liệu")
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn dùng 2 vòng lặp ở tình huấn này là không đúng
Mã:
Sub test()
Dim i As Integer
For i = 2 To 36 Step 5
Range("G" & i).Value = "='[03.2019 CROWN.xlsm]Oshidashi Crown'!K$" & i + 6
Next i
End Sub
Anh ạ. Nó vẫn chưa ra kết quả đúng.
Chẳng hạn em muốn ngược lại là:
K9=G3
k14=G8
K19= G13
thì phải làm thế nào ạ. hay tạo 1 cột xong lấy range theo số mình muốn ạ
Lý do có cái này là do em muốn link dữ liệu từ 2 file sang cho nhau ạ
 
Upvote 0
Anh ạ. Nó vẫn chưa ra kết quả đúng.
Chẳng hạn em muốn ngược lại là:
K9=G3
k14=G8
K19= G13
thì phải làm thế nào ạ. hay tạo 1 cột xong lấy range theo số mình muốn ạ
Lý do có cái này là do em muốn link dữ liệu từ 2 file sang cho nhau ạ
Bạn có thể áp dụng code sau, tuy nhiên đã chạy code rồi thì không ai đi làm phương pháp thủ công nữa cả

PHP:
Sub test_CopyData()
  CopyData [k9], [g3], -6, "Oshidashi Crown", "03.2019 CROWN.xlsm", 36, 5, True, False
End Sub
  Function CopyData(Rng1 As Range, _
  Rng2 As Range, _
  istep%, _
  Optional ByVal worksheetStr$ = "Oshidashi Crown", _
  Optional ByVal workbookStr$, _
  Optional ByVal stopLoop% = 36, _
  Optional ByVal stepLoop% = 5, _
  Optional ByVal RowAbsolute As Boolean = True, Optional ByVal ColumnAbsolute As Boolean = False)
    Dim i%
    For i = Rng1.Row To stopLoop Step stepLoop
      Cells(i, Rng1.Column).Formula = "=" & IIf(workbookStr = "", "", "[" & workbookStr & "]") & worksheetStr & "!" & _
      Cells(i + istep, Rng2.Column).Address(RowAbsolute, ColumnAbsolute)
    Next i
  End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể áp dụng code sau, tuy nhiên đã chạy code rồi thì không ai đi làm phương pháp thủ công nữa cả

PHP:
Sub test_CopyData()
  CopyData [k9], [g3], -6, "Oshidashi Crown", "03.2019 CROWN.xlsm", 36, 5, True, False
End Sub
  Function CopyData(Rng1 As Range, _
  Rng2 As Range, _
  istep%, _
  Optional ByVal worksheetStr$ = "Oshidashi Crown", _
  Optional ByVal workbookStr$, _
  Optional ByVal stopLoop% = 36, _
  Optional ByVal stepLoop% = 5, _
  Optional ByVal RowAbsolute As Boolean = True, Optional ByVal ColumnAbsolute As Boolean = False)
    Dim i%
    For i = Rng1.Row To stopLoop Step stepLoop
      Cells(i, Rng1.Column).Value = "=" & IIf(workbookStr = "", "", "[" & workbookStr & "]") & worksheetStr & "!" & _
      Cells(i + istep, Rng2.Column).Address(RowAbsolute, ColumnAbsolute)
    Next i
  End Function
Cám ơn anh ạ. Tại em mới học. Nên mới thủ công thế ạ. Nhưng file đính kèm là 2 file em muốn links dữ liệu cho nhau. Do 2 file nằm trên 2 chỗ khác nhau. Nếu có thể phiền anh viết đoạn code cập nhật giúp ạ. Và hướng dẫn luôn cho em để các tháng tiếp theo em có thể tự làm ạ.
em cám ơn trước
 

File đính kèm

  • FILE.rar
    194.8 KB · Đọc: 1
Upvote 0
Cám ơn anh ạ. Tại em mới học. Nên mới thủ công thế ạ. Nhưng file đính kèm là 2 file em muốn links dữ liệu cho nhau. Do 2 file nằm trên 2 chỗ khác nhau. Nếu có thể phiền anh viết đoạn code cập nhật giúp ạ. Và hướng dẫn luôn cho em để các tháng tiếp theo em có thể tự làm ạ.
em cám ơn trước
Bạn đăng bài mới, hỏi đúng chủ đề sẽ có người hỗ trợ bạn
 
Upvote 0
Sub GOMU()
Dim i As Integer
Dim j As Integer
For i = 2 To 251
For j = 5 To 35
If Cells(i, 4) = "KHSX" Then Cells(i, j) = "'[KH Thang 03.2019 GOMU + SHINSHEN.xlsm]gomu'!" & j & "$" & Cells(i, 39)
Next j
Next i
End Sub
Chào các thầy ạ. các thầy cho em hỏi 1 chút ạ.
Em đang khai báo j là cột. mà giờ em muốn khi j=1 thì nó trả về =cột A
j=2 thì trả về giá trị bằng cột B thì phải dùng hàm gì ạ
 
Upvote 0
Chào các thầy ạ. các thầy cho em hỏi 1 chút ạ.
Em đang khai báo j là cột. mà giờ em muốn khi j=1 thì nó trả về =cột A
j=2 thì trả về giá trị bằng cột B thì phải dùng hàm gì ạ
Bạn hỏi kỳ vậy.Mặc định j=1 là cột A rồi mà.Cần gì hàm nữa.Mà bạn gửi file lên xem.
 
Upvote 0
Bạn hỏi kỳ vậy.Mặc định j=1 là cột A rồi mà.Cần gì hàm nữa.Mà bạn gửi file lên xem.
Xin lỗi anh chị ạ. Tại em nói chưa vỡ lẽ. Cái đoạn code trên kia. Khi em để j chạy từ 5 đến 35. Khi chạy đoạn code nó hiện ra số luôn. Mà mục đích cuối cùng của em muốn là hiện ra tên cột ạ
 
Upvote 0
Upvote 0
Xin lỗi anh chị ạ. Tại em nói chưa vỡ lẽ. Cái đoạn code trên kia. Khi em để j chạy từ 5 đến 35. Khi chạy đoạn code nó hiện ra số luôn. Mà mục đích cuối cùng của em muốn là hiện ra tên cột ạ
Cột:
tenCot = Split(Cells(i, j).Addess(), "$")(1)
 
Upvote 0
Khi thử Code thì ta đơn giản những thứ khác đi, sao cho nó chạy đúng cái đã; Bạn thử với cái này, khi có trang 'GPE'
PHP:
Sub Test()
Dim I As Integer, J As Integer
For I = 2 To 36 Step 5
    For J = 8 To 13 Step 5
        Range("G" & I).Value = "=GPE!K$" & CStr(J)
        MsgBox Range("G" & I).Value, , Range("G" & I).Address
    Next J
Next I
End Sub
 
Upvote 0
Cột:
tenCot = Split(Cells(i, j).Addess(), "$")(1)
em đưa vào đoạn code trên không được ạ
Bài đã được tự động gộp:

Khi thử Code thì ta đơn giản những thứ khác đi, sao cho nó chạy đúng cái đã; Bạn thử với cái này, khi có trang 'GPE'
PHP:
Sub Test()
Dim I As Integer, J As Integer
For I = 2 To 36 Step 5
    For J = 8 To 13 Step 5
        Range("G" & I).Value = "=GPE!K$" & CStr(J)
        MsgBox Range("G" & I).Value, , Range("G" & I).Address
    Next J
Next I
End Sub
Thầy ơi.
là thế nào ạ
 
Upvote 0
Thì bạn tạo ra trang tính có tên là vậy; Trên trang đó nhập những số liệu khác nhau vào các ô trước khi chạy macro.
 
Upvote 0
Chào cả nhà,
Mình đang cần như sau:
Mình có 10 sheets (hoặc hơn). Mình muốn đánh số cho sheet thứ 4 trở đi đến hết, còn các sheets trước sheet mình đặt button thì không đánh số thì code như thế nào? Nhờ các bạn tư vấn giúp.
Tks tất cả.
 
Upvote 0
Chào cả nhà,
Mình đang cần như sau:
Mình có 10 sheets (hoặc hơn). Mình muốn đánh số cho sheet thứ 4 trở đi đến hết, còn các sheets trước sheet mình đặt button thì không đánh số thì code như thế nào? Nhờ các bạn tư vấn giúp.
Tks tất cả.
Bạn thử code sau
PHP:
Sub OrderSheets()
    Dim i%, K%
    For i = 1 to Worksheets.Count
        If i > 3 Then K = K + 1: Worksheets(i).Name = K & ". " & Worksheets(i).Name
    Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom