Chuyên đề giải đáp những thắc mắc về code VBA (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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:
Em chào Anh Chị,
Em đang học code. Em thấy trong phần khai báo biến mảng mọi người hay dùng TmpArr as Variant. Vậy Tmp là viết tắt của cụm từ gì? Mong A/C chỉ bảo!
 
Upvote 0
Bạn cứ nghĩ đó là rút gọn của từ Temp đi cũng được!
:D
 
Upvote 0
Upvote 0
Chào mọi người.
Công thức của Excel của em nó là như này:
Mã:
=IF(D21="",0,PRODUCT(IFERROR(TRIM(MID(SUBSTITUTE(" " & TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D21,"m",""),"t",""),"x"," "))," ",REPT(" ",99)),99*ROW($1:$10),99))*1,1)))
E viết vào VBA dạng như này:
Mã:
"=IF(D21="""",0,PRODUCT(IFERROR(TRIM(MID(SUBSTITUTE("" "" & TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D21,""m"",""""),""t"",""""),""x"","" "")),"" "",REPT("" "",99)),99*ROW($1:$10),99))*1,1)))""
Nhưng khi chạy code thì nó ra công thức như này, giống nhau hết, nhưng dư ký tự @ trước hàm row:
Mã:
=IF(D21="",0,PRODUCT(IFERROR(TRIM(MID(SUBSTITUTE(" " & TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D21,"m",""),"t",""),"x"," "))," ",REPT(" ",99)),99*(@ROW($1:$10)),99))*1,1)))

Mọi người cho em hỏi là vì sao vậy ạ, và có thể sửa như thế nào ạ?
 
Upvote 0
Em chào A/C,
Em có thực hành thử đoạn code copy công thức ở hàng D2:E2 rồi dán công thức vào các ô từ D3:E10. Nhưng khi code chạy đến đoạn copy công thức thì đang bị sai tọa độ dòng.
- Ở dòng 2 công thức D2 =B2*C2
- Khi code copy xuống dòng 3 thì công thức D3 = B2*C2 bị sai tọa độ dòng (đúng thì nó phải là =B3*C3)

Mã:
Sub ThanhTien()
Dim i As Integer
i = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
Sheet1.Range("D3:E" & i).Formula = Sheet1.Range("D2:E2").Formula
Sheet1.Range("D3:E" & i).Value = Sheet1.Range("D3:E" & i).Value
End Sub

Em sửa code như này thì code chạy đúng dòng: Sheet1.Range("D2:E" & i).Formula = Sheet1.Range("D2:E2").Formula
Em muốn hỏi thêm A/C còn có giải pháp nào thêm nữa ko ạ. Tks Anh Chị nhiều!
1601722762093.png
 
Upvote 0
Em chào A/C,
Em có thực hành thử đoạn code copy công thức ở hàng D2:E2 rồi dán công thức vào các ô từ D3:E10. Nhưng khi code chạy đến đoạn copy công thức thì đang bị sai tọa độ dòng.
- Ở dòng 2 công thức D2 =B2*C2
- Khi code copy xuống dòng 3 thì công thức D3 = B2*C2 bị sai tọa độ dòng (đúng thì nó phải là =B3*C3)

Mã:
Sub ThanhTien()
Dim i As Integer
i = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
Sheet1.Range("D3:E" & i).Formula = Sheet1.Range("D2:E2").Formula
Sheet1.Range("D3:E" & i).Value = Sheet1.Range("D3:E" & i).Value
End Sub

Em sửa code như này thì code chạy đúng dòng: Sheet1.Range("D2:E" & i).Formula = Sheet1.Range("D2:E2").Formula
Em muốn hỏi thêm A/C còn có giải pháp nào thêm nữa ko ạ. Tks Anh Chị nhiều!
View attachment 246697
Bạn thử:
PHP:
With Sheet1
        .Range("D2").FormulaR1C1 = "=RC[-2]*RC[-1]"
        .Range("d2:d" & .Range("A" & Rows.Count).End(xlUp).Row).FillDown
    End With
 
Upvote 0
Bạn thử:
PHP:
With Sheet1
        .Range("D2").FormulaR1C1 = "=RC[-2]*RC[-1]"
        .Range("d2:d" & .Range("A" & Rows.Count).End(xlUp).Row).FillDown
    End With
Cái này chỉ cần 1 dòng:
PHP:
Sheet1.Range("d2:d" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=RC[-2]*RC[-1]"
 
Upvote 0
Em chào A/C,

Hiện tại em muốn extract date dựa trên kết quả Find. Code hiện tại như sau:

Sub Findingthelastregistrationdates()
Sheet1.Select

For X = 1 To 11
Rng = Sheets("Reference").Cells(131 + X, 8).Value
If Not Rng = "0" Or Rng = "" Then
Cells.Find(What:=Rng, After:=Range("A1"), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Select
ActiveCell.Offset(0, 9).Value = ActiveCell
End If
Next
End Sub

Vấn đề là Excel ko tìm thấy kết quả như của dòng code:
1602505925740.png
Như ở hình trên thì đang ở Cell H137 của sheet Reference:
1602506357772.png

Nhưng em đã thử find manual thì vẫn tìm thấy date là 13/08/2019:
1602506117312.png
Mong các a/c giúp đỡ ạ.
 

File đính kèm

  • 1602506314316.png
    1602506314316.png
    71.5 KB · Đọc: 1
Upvote 0
Thứ nhất: Bạn xài phương thức FIND() như câu lệnh là không chắc chắn & nguy cơ sẽ dẫn bạn đến lỗi 1 khi không tìm ra ô có chứa dữ liệu cần tìn
Muốn phòng ngừa lỗi cần phải viết chân phương hơn.

Thứ hai: Khi tìm một trị kiểu Ngày-tháng-năm, vùng tìm & ngày cần tìm phải ở dạng "MM/DD/YYYY" trước khi FIND()

Bạn thử nghiền ngẫm hàm này 1 hồi xem sao:
PHP:
Function NgayKT(Rng As Range) As Date
Dim Dem As Integer, J As Integer, W As Integer, Dat As Date
Dim sRng As Range

If UCase$(Rng(1).Value) = "X" Then
    If UCase$(Rng(4).Value) = "NT" Then
        Dem = 5
    ElseIf UCase$(Rng(4).Value) = "NGT" Then
        Dem = 7
    End If   
    For J = 0 To 35
        Dat = Rng(5).Value + J
        Set sRng = Range("NgayLe").Find(Format(Rng(5), "MM/DD/yyyy"), , xlValues, xlWhole)
        If Weekday(Dat) > 1 Or sRng Is Nothing Then
            Dem = Dem - 1
            If Dem = 0 Then
                NgayKT = Dat:           Exit Function
            End If
        End If
    Next J
End If
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
em muốn nhờ các anh làm giúp em form tìm kiếm từ số thẻ hiện lên thông tin của nhân viên trong danh sách, gồm có nhóm máu... sức khỏe theo từng năm, em làm quản lý hồ sơ sức khỏe mong các a chị giúp đỡ
 

File đính kèm

Upvote 0
Thứ nhất: Bạn xài phương thức FIND() như câu lệnh là không chắc chắn & nguy cơ sẽ dẫn bạn đến lỗi 1 khi không tìm ra ô có chứa dữ liệu cần tìn
Muốn phòng ngừa lỗi cần phải viết chân phương hơn.

Thứ hai: Khi tìm một trị kiểu Ngày-tháng-năm, vùng tìm & ngày cần tìm phải ở dạng "MM/DD/YYYY" trước khi FIND()

Bạn thử nghiền ngẫm hàm này 1 hồi xem sao:
PHP:
Function NgayKT(Rng As Range) As Date
Dim Dem As Integer, J As Integer, W As Integer, Dat As Date
Dim sRng As Range

If UCase$(Rng(1).Value) = "X" Then
    If UCase$(Rng(4).Value) = "NT" Then
        Dem = 5
    ElseIf UCase$(Rng(4).Value) = "NGT" Then
        Dem = 7
    End If  
    For J = 0 To 35
        Dat = Rng(5).Value + J
        Set sRng = Range("NgayLe").Find(Format(Rng(5), "MM/DD/yyyy"), , xlValues, xlWhole)
        If Weekday(Dat) > 1 Or sRng Is Nothing Then
            Dem = Dem - 1
            If Dem = 0 Then
                NgayKT = Dat:           Exit Function
            End If
        End If
    Next J
End If
End Function
Thanks bác,
Sau khi kiểm tra lại thì vấn đề nằm ở chỗ các dữ liệu Date là dữ liệu actual Date được Excel ghi nhận dưới dạng 1 con số nhất định tương ứng với từng thời điểm, trong khi dữ liệu Date của sheet Reference lại là dạng string. Sau khi convert dữ liệu Date về string, code đã hoạt động ổn định.
 
Upvote 0
Hi các bác,

Hiện tại em đang gặp phải lỗi Run time error 1004:
Picture 1.JPG
Phía dưới là dòng code lỗi:
Picture 2.JPG
Tại thời điểm xảy ra lỗi này là loop X = 3 và ActiveCell là "R5". Các bác giúp em lỗi này với ạ ?
 
Upvote 0
Nửa đêm mà chơi quả hình đau mắt quá.
SheetA.Range(Cells(1, 1), Cells(2, 2)) lỗi khi SheetA không phải là sheet hiện hành.
 
Upvote 0
Nửa đêm mà chơi quả hình đau mắt quá.
SheetA.Range(Cells(1, 1), Cells(2, 2)) lỗi khi SheetA không phải là sheet hiện hành.
Nếu muỗn trích xuất dữ liệu từ 1 sheet khác để tính toán cho ActiveCell của sheet hiện hành thì phải code thế nào hả bác ?
Như phía trên thì đang trích xuất theo loop cho hàm Sum từ Cells(4 * X - 3,16) cho đến Cells(4 * X,16) của sheet "Reference"
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu muỗn trích xuất dữ liệu từ 1 sheet khác để tính toán cho ActiveCell của sheet hiện hành thì phải code thế nào hả bác ?
Như phía trên thì đang trích xuất theo loop cho hàm Sum từ Cells(4 * X - 3,16) cho đến Cells(4 * X,16) của sheet "Reference"
Nên viết rõ ràng, tường minh. Đặc biệt là khi code rối như tơ vò và khó nhận biết ở từng thời điểm thì sheet nào, cell nào đang active.
Trong vd. kiểu SheetA.Range(Cells(1, 1), Cells(2, 2)) thì dụng ý Cells(1, 1) và Cells(2, 2) thuộc sheet nào? Nếu dụng ý là thuộc sheetA mà sheetA ở thời điểm đó không active thi TEO rồi. Vì viết không tường minh kiểu đó thì Cells(1, 1) và Cells(2, 2) thuộc ActiveSheet. TEO có nghĩa là thậm chí nếu không có lỗi thì kết quả cũng là từ trên trời rớt xuống.

Nếu là lấy dữ liệu từ Reference thì
Mã:
Sheets("Reference").Range(Sheets("Reference").Cells(4 * X - 3, 16), Sheets("Reference").Cells(4 * X, 16))

hoặc

With Sheets("Reference")
    .Range(.Cells(4 * X - 3, 16), .Cells(4 * X, 16))
End With

Nên nhớ là với những vấn đề kiểu này thì không chỉ đính kèm ảnh. Ảnh chỉ để xem cho sướng mắt thôi. Mà ảnh kiểu này thì xem đau mắt chứ sướng gì.
 
Upvote 0
Nên viết rõ ràng, tường minh. Đặc biệt là khi code rối như tơ vò và khó nhận biết ở từng thời điểm thì sheet nào, cell nào đang active.
Trong vd. kiểu SheetA.Range(Cells(1, 1), Cells(2, 2)) thì dụng ý Cells(1, 1) và Cells(2, 2) thuộc sheet nào? Nếu dụng ý là thuộc sheetA mà sheetA ở thời điểm đó không active thi TEO rồi. Vì viết không tường minh kiểu đó thì Cells(1, 1) và Cells(2, 2) thuộc ActiveSheet. TEO có nghĩa là thậm chí nếu không có lỗi thì kết quả cũng là từ trên trời rớt xuống.

Nếu là lấy dữ liệu từ Reference thì
Mã:
Sheets("Reference").Range(Sheets("Reference").Cells(4 * X - 3, 16), Sheets("Reference").Cells(4 * X, 16))

hoặc

With Sheets("Reference")
    .Range(.Cells(4 * X - 3, 16), .Cells(4 * X, 16))
End With

Nên nhớ là với những vấn đề kiểu này thì không chỉ đính kèm ảnh. Ảnh chỉ để xem cho sướng mắt thôi. Mà ảnh kiểu này thì xem đau mắt chứ sướng gì.
Em đã thử viết như trên nhưng nó vẫn báo lỗi :(
range("J10").Value = Application.WorksheetFunction.Sum(Sheets("Reference").range(Sheets("Reference").Cells(4 * X - 3, 16), Sheets("Reference").Cells(4 * X, 16)))
Vẫn là Run time error 1004
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã thử viết như trên nhưng nó vẫn báo lỗi :(
range("J10").Value = Application.WorksheetFunction.Sum(Sheets("Reference").range(Sheets("Reference").Cells(4 * X - 3, 16), Sheets("Reference").Cells(4 * X, 16)))
Vẫn là Run time error 1004
Bạn ạ, tôi chỉ viết về vấn đề mà huuthang_bd đoán thôi. Còn chuyện của bạn thì chịu. Bạn tung code lên không có một lời mô tả code đó làm gì. Và tung ảnh của một đoạn code. Tôi không chơi ảnh bạn ạ.
 
Upvote 0
Bạn ạ, tôi chỉ viết về vấn đề mà huuthang_bd đoán thôi. Còn chuyện của bạn thì chịu. Bạn tung code lên không có một lời mô tả code đó làm gì. Và tung ảnh của một đoạn code. Tôi không chơi ảnh bạn ạ.

Bạn đọc lại giúp mình phía trên nhé. Mình có ghi rõ là code để tính Sum từ Cells(4 * X - 3,16) cho đến Cells(4 * X,16) của sheet "Reference" - For X = 1 to 5; kết quả sẽ được thể hiện tại activeCell của sheet hiện tại. Code mình viết ra có thể ko đúng và mình hiện tại chưa biết cách sửa.

Ảnh mình post lên để coi như tính minh họa chứ ko có ý làm bất kỳ ai khó chịu.

Nếu như có thể nhận đc feedback hợp lý thì mình rất cảm ơn.
 
Upvote 0
Bạn đọc lại giúp mình phía trên nhé. Mình có ghi rõ là code để tính Sum từ Cells(4 * X - 3,16) cho đến Cells(4 * X,16) của sheet "Reference" - For X = 1 to 5; kết quả sẽ được thể hiện tại activeCell của sheet hiện tại. Code mình viết ra có thể ko đúng và mình hiện tại chưa biết cách sửa.

Ảnh mình post lên để coi như tính minh họa chứ ko có ý làm bất kỳ ai khó chịu.
Vấn đề không ở chỗ khó chịu. Nếu có code thì bao giờ cũng dò ra được chỗ sai, ít nhất là trong 99% trường hợp. Nhưng nhìn ảnh thì nhiều khi bó tay. Có những cái không "nhìn" được từ ảnh.
 
Upvote 0
Vấn đề không ở chỗ khó chịu. Nếu có code thì bao giờ cũng dò ra được chỗ sai, ít nhất là trong 99% trường hợp. Nhưng nhìn ảnh thì nhiều khi bó tay. Có những cái không "nhìn" được từ ảnh.
Cảm ơn batman1 huuthang_bd

Mình đã khắc phục được lỗi trên rồi. Hiện tại còn đoạn code này, mong bạn chỉ giáo:
Mã:
For X = 1 to 5
For Y = 1 to 5

ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").range(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6, 1)))
ActiveCell.Offset(1,0).Select

Next
Next

Mục đích của code này là như sau:
Nếu X = 1, Y = 1:
Giá trị của ActiveCell = Sum từ ô L16 đến L20
X = 1, Y = 2:
Giá trị của ActiveCell = Sum từ ô L17 đến L20
...
X = 1, Y = 5:
Giá trị của ActiveCell = giá trị của ô L20

Nếu X = 2, Y = 1:
Giá trị của ActiveCell = Sum từ ô L21 đến L25
Nếu X = 2, Y = 2:
Giá trị của ActiveCell = Sum từ ô L22 đến L25
...
Vòng lặp sẽ chạy theo logic trên đến khi X = 5 và Y =5:
Giá trị của activeCell = giá trị của ô L40

Các giá trị của ô L# nằm ở sheet "Reference". ActiveCell nằm ở sheet hiện tại.
Mình đã chaỵ thử và báo lỗi Run time error 1004.
 
Upvote 0
Mình đã khắc phục được lỗi trên rồi. Hiện tại còn đoạn code này, mong bạn chỉ giáo:
Mã:
For X = 1 to 5
For Y = 1 to 5
ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").range(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6, 1)))
ActiveCell.Offset(1,0).Select
Next
Next
ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Range(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6, 1)))

là sai. Nếu muốn dùng Range(...) thì phải là

ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Range(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6, 1).Address))

Nhưng như thế dài dòng văn tự. Đơn giản chỉ là

ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6))

Nhưng lưu ý rằng Cells(5 * X + 10, 12).Offset(Y, 0) = Cells(5 * X + 10 + Y, 12) nên cuối cùng có là

ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Cells(5 * X + 10 + Y, 12).Resize(-Y + 6))
 
Upvote 0
ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Range(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6, 1)))

là sai. Nếu muốn dùng Range(...) thì phải là

ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Range(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6, 1).Address))

Nhưng như thế dài dòng văn tự. Đơn giản chỉ là

ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Cells(5 * X + 10, 12).Offset(Y, 0).Resize(-Y + 6))

Nhưng lưu ý rằng Cells(5 * X + 10, 12).Offset(Y, 0) = Cells(5 * X + 10 + Y, 12) nên cuối cùng có là

ActiveCell.Value = Application.WorksheetFunction.Sum(Sheets("Reference").Cells(5 * X + 10 + Y, 12).Resize(-Y + 6))
Tuyệt vời bạn ạ. Code của mình đã hoàn thiện và chạy ổn định.
Cảm ơn bạn vì những feedback để giúp mình coding tối ưu hơn và thức đêm giải đáp giúp mình hoàn thiện project này.
 
Upvote 0
1603551097635.png

mọi người giúp dùm , tự nhiên nó bị lỗi vậy , fix như thế nào ạ
 
Upvote 0
Người xịn tiếng Tây thì đáng lẽ phải biết phân biệt dạng sín-ghìu-là và pơ-lú-rồn của danh tự chứ.
 
Upvote 0
mọi người giúp dùm , tự nhiên nó bị lỗi vậy , fix như thế nào ạ
Lần sau bạn đừng đá những từ tiếng Anh nhé. Chỉ dùng khi thật cần.
Code không tự xuất hiện nên đừng nói "tự nhiên nó bị lỗi vậy". Ai đã viết wb As Workbooks? Bạn nhìn kỹ xem có thấy gì bất thường không.
 
Upvote 0
Chào anh chị!
Cho em hỏi.. Khi trong vòng lặp lấy dữ liệu từ 1 danh sách ở vùng chọn có giá trị = 0 thì next bỏ qua dùng câu lệnh gì ạ.
 
Upvote 0
Chào anh chị!
Cho em hỏi.. Khi trong vòng lặp lấy dữ liệu từ 1 danh sách ở vùng chọn có giá trị = 0 thì next bỏ qua dùng câu lệnh gì ạ.
PHP:
For i=1 to ...
If gia_tri <> 0 Then
'code cũ
End If
Next i
Hoặc
PHP:
For i = 1 to ...
If gia_tri = 0 Then goto ẻm_mới
'code cũ
ẻm_mới:
Next i
 
Upvote 0
Chào anh chị!
Cho em hỏi.. Khi trong vòng lặp lấy dữ liệu từ 1 danh sách ở vùng chọn có giá trị = 0 thì next bỏ qua dùng câu lệnh gì ạ.
Vòng lặp của VBA không có lệnh tương tự như Continue (chạy xuống Next) như nhiều ngôn ngữ khác.
Có hai cách cho VBA:
1. dùng block IF
2. đặt một cái label ngay chỗ next và dùng lệnh goto
(xem bài #2780)
 
Upvote 0
PHP:
For i=1 to ...
If gia_tri <> 0 Then
'code cũ
End If
Next i
Hoặc
PHP:
For i = 1 to ...
If gia_tri = 0 Then goto ẻm_mới
'code cũ
ẻm_mới:
Next i

Như này à anh
VetMini
befaint

Mã:
Sub In_MaChonLoc()
    Dim sRng As Range, cell_ As Range
    Dim Ws As Worksheet
  
    On Error GoTo Thoat
    ActiveSheet.DisplayPageBreaks = False
    Set sRng = Application.InputBox(Prompt:="Chon Du lieu IN", Title:="Vung Data", Type:=8)
    For Each cell_ In sRng
        Set Ws = ActiveSheet
        With Ws
            .Range("AZ1").Value = cell_.Value
            .PrintOut 'Vung in Set
        End With
    Next cell_
Thoat:
End Sub
 
Upvote 0
Như này à anh
VetMini
befaint

Mã:
Sub In_MaChonLoc()
    Dim sRng As Range, cell_ As Range
    Dim Ws As Worksheet
 
    On Error GoTo Thoat
    ActiveSheet.DisplayPageBreaks = False
    Set sRng = Application.InputBox(Prompt:="Chon Du lieu IN", Title:="Vung Data", Type:=8)
    For Each cell_ In sRng
        Set Ws = ActiveSheet
        With Ws
            .Range("AZ1").Value = cell_.Value
            .PrintOut 'Vung in Set
        End With
    Next cell_
Thoat:
End Sub
bạn thêm điều kiện vào rồi thỏa mãn thì goto ... cái gì đó ở dưới cùng bạn cho nó cái label như bác vietmini nói đấy
 
Upvote 0
bạn thêm điều kiện vào rồi thỏa mãn thì goto ... cái gì đó ở dưới cùng bạn cho nó cái label như bác vietmini nói đấy
Sub In_MaChonLoc_KL()
Dim sRng As Range, cell_ As Range
Dim Ws As Worksheet

On Error GoTo Thoat
ActiveSheet.DisplayPageBreaks = False
Set sRng = Application.InputBox(Prompt:="Chon Du lieu IN", Title:="Vung Data", Type:=8)
For Each cell_ In sRng
Set Ws = ActiveSheet
With Ws
If cell_ = 0 Then GoTo DiTiep
.Range("AZ1").Value = cell_.Value
Call HidedongProKL
.PrintOut 'Vung in Set
DiTiep:
End With
Next cell_
Thoat:
End Sub
như này đùng chưa anh nhỉ
 
Upvote 0
Cảnh giới về code ở bài #2784:

1. để thực hiện cách thức giống "Continue" ở các ngôn ngữ khác, cái label luôn luôn đặt ngay trước lệnh Next.
(code ở bài #2784 đặt nó cách Next một dòng End With. Đây là cách làm việc nguy hiểm)

2. dùng ký hiệu gạch dưới ( _ ) trong tên biến:
- Đặt giữa từ thì không sao. Đấy là một trong những cách ngăn từ cho dễ đọc. Ví dụ: s_totite
- Đặt trước hoặc sau từ thì có ý nghĩa khác. Thường thường người ta đặt trước tên biến để ngầm ý rằng đây là biến nội. Đối với lập trình hướng đối tượng, người ta thường đặt hai dấu gạch dưới trước tên biến (hoặc một dấu trước, một dấu sau) để phân biệt loại biến nội và không truyền sang các lớp con. Ví dụ: __totite, _totite_
Nói chung, ký tự gạch dưới đặt trước hoặc sau tên biến thường để đánh dấu loại biến đặc biệt nào đó.
 
Upvote 0
Anh đã đạt cảnh giới thượng thừa nào mà có thể cảnh báo (giới) về code vậy?
(hình như cảnh giới là danh từ)
Tôi lại nhầm rồi (*). Khi tôi nghĩ đến từ "giới" với nghĩa "răn" (诫, hoặc 戒) tôi ráp "cảnh" vào và quên mất khi hai từ này đi với nhau (境界) sẽ hiểu theo nghĩa khác.

(*) dạo này bị nhầm hơi nhiều. Cần tự "giới": xem lại nhiều lần trước khi pót :p :p :p
 
Upvote 0
Xin chào cả nhà, tôi có code sau, nó copy tất cả dữ liệu trong vùng "A1:C30" vào cột M.
Nhưng nó copy theo thứ tự A1-B1-C1-A2-B2-C2.... tôi muốn copy theo trình tự A1-A2-..-A30-B1-B2-...-B30-C1-...-C30 thì phải làm thế nào ạ

Sub copy()
Dim x As Range
For Each x In Range("A1:C30")
i = Range("m10000").End(xlUp).Row + 1
Range("M" & i) = x
Next x
End Sub
 
Upvote 0
copy theo trình tự A1-A2-..-A30-B1-B2-...-B30-C1-...-C30 thì phải làm
PHP:
Option Explicit

Sub copy_xxx()
Const rng = "A1:C30"
Const scell_target = "M1"
Dim data as variant, i as long, j as long, ub1 as long
Dim res as variant, ii as long
data = Range(rng).value2
ub1 = ubound(data, 1)
redim res(1 to Range(rng).cells.count, 1 to 1)
For j=1 to ubound(data, 2)
For i=1 to ub1
ii=ii+1
res(ii,1)=data(i,j)
Next i
Next j
Range(scell_target).res(1048500,1).clearcontents
Range(scell_target).resize(ii,1).value = res
End Sub
 
Upvote 0
1 cách cù lần nè
:
PHP:
Sub copyTheoCot()
Dim Cls As Range, Rng As Range
Dim J As Integer

For J = 1 To 3
    Set Rng = Cells(1, J).Resize(30)
    For Each Cls In Rng
        i = Range("m10000").End(xlUp).Row + 1
        Range("M" & i) = Cls.Value
        Range("M" & i).Interior.ColorIndex = 35 + J
    Next Cls
Next J
End Sub
 
Upvote 0
1 cách cù lần nè
:
PHP:
Sub copyTheoCot()
Dim Cls As Range, Rng As Range
Dim J As Integer

For J = 1 To 3
    Set Rng = Cells(1, J).Resize(30)
    For Each Cls In Rng
        i = Range("m10000").End(xlUp).Row + 1
        Range("M" & i) = Cls.Value
        Range("M" & i).Interior.ColorIndex = 35 + J
    Next Cls
Next J
End Sub
Em tự học lên chỉ hiểu được các cách cù lần, quan trọng là đạt được mục đích bác ah. Cám ơn bác nhé :)
 
Upvote 0
Em chào các thầy cô ạ. Quy luật như thế này em sẽ đưa vào For.....next như nào ạ. Ngồi nghĩ mà chưa thông được. Nhờ các thầy cô chỉ giúp ạ. Em xin cám ơn
Mã:
With Sheets("KQ")
    sCot = 12
    .[E5].Value = ws.Cells(56, sCot + 1).Value
    .[E6].Value = ws.Cells(56, sCot + 2).Value
    .[E7].Value = ws.Cells(56, sCot).Value
    .[F5].Value = ws.Cells(22, sCot + 1).Value
    .[F6].Value = ws.Cells(22, sCot + 2).Value
    .[F7].Value = ws.Cells(22, sCot).Value
    .[G5].Value = ws.Cells(38, sCot + 1).Value
    .[G6].Value = ws.Cells(38, sCot + 2).Value
    .[G7].Value = ws.Cells(38, sCot).Value
    .[H5].Value = ws.Cells(58, sCot + 1).Value
    .[H6].Value = ws.Cells(58, sCot + 2).Value
    .[H7].Value = ws.Cells(58, sCot).Value
    .[I5].Value = ws.Cells(59, sCot + 1).Value
    .[I6].Value = ws.Cells(59, sCot + 2).Value
    .[I7].Value = ws.Cells(59, sCot).Value
    .[J5].Value = ws.Range("F56").Value
    .[J6].Value = ws.Range("G56").Value
    .[J7].Value = ws.Range("E56").Value
    .[K5].Value = ws.Range("F22").Value
    .[K6].Value = ws.Range("G22").Value
    .[K7].Value = ws.Range("E22").Value
    .[L5].Value = ws.Range("F38").Value
    .[L6].Value = ws.Range("G38").Value
    .[L7].Value = ws.Range("E38").Value
    .[M5].Value = ws.Range("F58").Value
    .[M6].Value = ws.Range("G58").Value
    .[M7].Value = ws.Range("E58").Value
    .[N5].Value = ws.Range("F59").Value
    .[N6].Value = ws.Range("G59").Value
    .[N7].Value = ws.Range("E59").Value
    End With
 
Upvote 0
Bạn thử với cái ni trong file của bạn xem sao:
PHP:
Sub GPE()
 Dim wS As Worksheet
 Dim Col As Integer, Rws As Long
 
' Set wS = ThisWorkbook.Worksheets("CSDL")  '
 sCot = 12
With Sheets("KQ")
    For Col = 5 To 9
        Rws = Choose(Col - 4, 56, 22, 38, 58, 59)
        .Cells(5, Col).Value = wS.Cells(Rws, sCot + 1).Value
        .Cells(6, Col).Value = wS.Cells(Rws, sCot + 2).Value
        .Cells(7, Col).Value = wS.Cells(Rws, sCot + 0).Value
    Next Col
Rem    .[E5].Value = wS.Cells(56, sCot + 1).Value '5'
Rem    .[E6].Value = wS.Cells(56, sCot + 2).Value
Rem    .[E7].Value = wS.Cells(56, sCot).Value
Rem    .[F5].Value = wS.Cells(22, sCot + 1).Value  '6'
Rem    .[F6].Value = wS.Cells(22, sCot + 2).Value
Rem    .[F7].Value = wS.Cells(22, sCot).Value
Rem    .[G5].Value = wS.Cells(38, sCot + 1).Value  '7'
Rem    .[G6].Value = wS.Cells(38, sCot + 2).Value
Rem    .[G7].Value = wS.Cells(38, sCot).Value
Rem    .[H5].Value = wS.Cells(58, sCot + 1).Value  '8'
Rem    .[H6].Value = wS.Cells(58, sCot + 2).Value
Rem    .[H7].Value = wS.Cells(58, sCot).Value
Rem    .[I5].Value = wS.Cells(59, sCot + 1).Value  '9'
Rem    .[I6].Value = wS.Cells(59, sCot + 2).Value
Rem    .[I7].Value = wS.Cells(59, sCot).Value
    For Col = 10 To 14
        Rws = Choose(Col - 9, 56, 22, 38, 58, 59)
        .Cells(5, Col).Value = wS.Cells(Rws, "F").Value
        .Cells(6, Col).Value = wS.Cells(Rws, "G").Value
        .Cells(7, Col).Value = wS.Cells(Rws, "E").Value
    Next Col
Rem    .[J5].Value = wS.Range("F56").Value '10 '
Rem    .[J6].Value = wS.Range("G56").Value
Rem    .[J7].Value = wS.Range("E56").Value
Rem    .[K5].Value = wS.Range("F22").Value '11'
Rem    .[K6].Value = wS.Range("G22").Value
Rem    .[K7].Value = wS.Range("E22").Value
Rem    .[L5].Value = wS.Range("F38").Value '12 '
Rem    .[L6].Value = wS.Range("G38").Value
Rem    .[L7].Value = wS.Range("E38").Value
Rem    .[M5].Value = wS.Range("F58").Value '13 '
Rem    .[M6].Value = wS.Range("G58").Value
Rem    .[M7].Value = wS.Range("E58").Value
Rem    .[N5].Value = wS.Range("F59").Value '14 '
Rem    .[N6].Value = wS.Range("G59").Value
Rem    .[N7].Value = wS.Range("E59").Value
End With
End Sub
$$$$@
 
Upvote 0
Một cách khác.Sửa tên sheets thành tên sheets trong file của bạn
Mã:
Sub Quy_Luat()
Dim sCot&, i&, j&, K&, R&
sCot = 12
For i = 1 To 5
        For j = 1 To 3
                K = K + 1
                K = IIf(K = 3, 0, K)
            R = IIf(i = 1, 56, IIf(i = 2, 22, IIf(i = 3, 38, IIf(i = 4, 58, IIf(i = 5, 59, "")))))
            Sheet1.Cells(j + 4, i + 4).Value = Sheet1.Cells(R, sCot + K).Value
            Sheet1.Cells(j + 4, i + 9).Value = Sheet1.Cells(R, sCot + K).Value
        Next
        K = 0
Next
End Sub
 

File đính kèm

Upvote 0
@SA_DQ, @Cu Tồ con cám ơn 2 người nhiều ạ. Để mai con test thử ạ
Bài trên tôi nhầm cột bạn xem lại file
Mã:
Option Explicit
Sub Quy_Luat()
Dim i&, j&, R&, C&
For i = 5 To 9
        For j = 5 To 7
                C = j + 1
                C = IIf(C = 8, 5, C)
            R = IIf(i = 5, 56, IIf(i = 6, 22, IIf(i = 7, 38, IIf(i = 8, 58, IIf(i = 9, 59, "")))))
            Sheet1.Cells(j, i).Value = Sheet1.Cells(R, C + 7).Value
            Sheet1.Cells(j, i + 5).Value = Sheet1.Cells(R, C).Value
        Next
Next
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em chào các thầy cô ạ. Quy luật như thế này em sẽ đưa vào For.....next như nào ạ. Ngồi nghĩ mà chưa thông được. Nhờ các thầy cô chỉ giúp ạ. Em xin cám ơn
Mã:
With Sheets("KQ")
    sCot = 12
    .[E5].Value = ws.Cells(56, sCot + 1).Value
    .[E6].Value = ws.Cells(56, sCot + 2).Value
    .[E7].Value = ws.Cells(56, sCot).Value
    .[F5].Value = ws.Cells(22, sCot + 1).Value
    .[F6].Value = ws.Cells(22, sCot + 2).Value
    .[F7].Value = ws.Cells(22, sCot).Value
    .[G5].Value = ws.Cells(38, sCot + 1).Value
    .[G6].Value = ws.Cells(38, sCot + 2).Value
    .[G7].Value = ws.Cells(38, sCot).Value
    .[H5].Value = ws.Cells(58, sCot + 1).Value
    .[H6].Value = ws.Cells(58, sCot + 2).Value
    .[H7].Value = ws.Cells(58, sCot).Value
    .[I5].Value = ws.Cells(59, sCot + 1).Value
    .[I6].Value = ws.Cells(59, sCot + 2).Value
    .[I7].Value = ws.Cells(59, sCot).Value
    .[J5].Value = ws.Range("F56").Value
    .[J6].Value = ws.Range("G56").Value
    .[J7].Value = ws.Range("E56").Value
    .[K5].Value = ws.Range("F22").Value
    .[K6].Value = ws.Range("G22").Value
    .[K7].Value = ws.Range("E22").Value
    .[L5].Value = ws.Range("F38").Value
    .[L6].Value = ws.Range("G38").Value
    .[L7].Value = ws.Range("E38").Value
    .[M5].Value = ws.Range("F58").Value
    .[M6].Value = ws.Range("G58").Value
    .[M7].Value = ws.Range("E58").Value
    .[N5].Value = ws.Range("F59").Value
    .[N6].Value = ws.Range("G59").Value
    .[N7].Value = ws.Range("E59").Value
    End With
Thử code
Mã:
Sub ABC()
  Dim ws As Worksheet, C_R
 
  Set ws = Sheet1 'Tam tinh
  C_R = Array(56, 22, 38, 58, 59) ' chuyen tu cot sang dong
 
  With Sheets("KQ")
    For j = 5 To 14 'Cot ket qua tu cot "E den N"
      iR = C_R(j Mod 5) 'Dong lay du lieu
      For i = 5 To 7
        If j < 10 Then
          jC = 12 + ((i - 1) Mod 3) 'Cot lay du lieu
        Else
          jC = 6 + ((i + 1) Mod 3)
        End If
        .Cells(i, j).Value = ws.Cells(iR, jC).Value
      Next i
    Next j
  End With
End Sub
 
Upvote 0
Chào mọi người em có viết 1 hàm như bên dưới, nhưng khi dữ liệu gốc là dạng cột thì lại không giống như ý muốn (Ý muốn là cách xếp giống như đã làm được ở Hình 1)
làm sao để nhận biết được dữ liệu gốc đang ở hàng hay cột để viết cho ổn ạ? Em định viết thêm 1 hàm khác nhưng chắc là các anh/chị có thể để chung 1 hàm được nên xin chỉ giáo ạ.
1604626139406.png

1604626274046.png
Mã:
Function TRANSPOSES(rng As Range, col As Integer)
Application.Volatile
dong = Application.WorksheetFunction.RoundUp(rng.Columns.Count / col, 0)
ReDim arr2(1 To dong, 1 To col)
arr = rng.Resize(1, dong * col)
For i = 1 To dong
     For j = 1 To col
     arr2(i, j) = arr(1, (i - 1) * col + j)
     Next j
Next i
TRANSPOSES = arr2
End Function
 
Upvote 0
Chào mọi người em có viết 1 hàm như bên dưới, nhưng khi dữ liệu gốc là dạng cột thì lại không giống như ý muốn (Ý muốn là cách xếp giống như đã làm được ở Hình 1)
làm sao để nhận biết được dữ liệu gốc đang ở hàng hay cột để viết cho ổn ạ? Em định viết thêm 1 hàm khác nhưng chắc là các anh/chị có thể để chung 1 hàm được nên xin chỉ giáo ạ.
Vòng lặp phải chạy theo nguồn chứ sao lại chạy theo đích
PHP:
Function TRANSPOSES(rng As Range, col As Integer)
Application.Volatile
dong = Application.WorksheetFunction.RoundUp(rng.Count / col, 0)
ReDim arr2(1 To dong, 1 To col)
arr = rng.Value
m = 1
For i = 1 To UBound(arr, 1)
     For j = 1 To UBound(arr, 2)
     n = n + 1
     arr2(m, n) = arr(i, j)
     If n = col Then n = 0: m = m + 1
     Next j
   
Next i
TRANSPOSES = arr2
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Vòn lặp phải chạy theo nguồn chứ sao lại chạy theo đích
PHP:
Function TRANSPOSES(rng As Range, col As Integer)
Application.Volatile
dong = Application.WorksheetFunction.RoundUp(rng.Count / col, 0)
ReDim arr2(1 To dong, 1 To col)
arr = rng.Value
m = 1
For i = 1 To UBound(arr, 1)
     For j = 1 To UBound(arr, 2)
     n = n + 1
     arr2(m, n) = arr(i, j)
     If n = col Then n = 0: m = m + 1
     Next j
   
Next i
TRANSPOSES = arr2
End Function
Nguồn là gì mà đích là gì bác có thể nói rõ hơn không ạ?
 
Upvote 0
Đi làm lãnh lương về bị vợ móc túi lấy hết: Nguồn là túi mình, đích là túi vợ
[Vui] Vậy con không hiểu là đúng rồi, vì con chưa vợ luôn.

Thật ra con vào GPE chưa được tháng, ngày con vào là ngày con tự học VBA, còn nhiều cái bất cập, vì con không có căn bản, con chỉ mò mẫm phục vụ cho công việc thôi, nhưng những góp ý của mọi người con đều tiếp thu ạ.
 
Upvote 0
[Vui] Vậy con không hiểu là đúng rồi, vì con chưa vợ luôn.
Túm lại là hiểu chưa? Nếu chưa hiểu thì nghe giải thích thêm nè:
Muốn lấy hết tiền từ túi chồng, thì vợ phải chạy 2 vòng lặp trên người anh chồng: 1 vòng chạy vét hết các túi trái phải, trong ngoài của cái áo (của chồng), 1 vòng chạy vét hết các túi trái phải trong ngoài, trước sau của quần anh chồng.
Chứ lặp trên các túi của vợ thì số túi áo cũng không giống nhau, số túi quần cũng không giống nhau (dù cho tổng số túi cũng có thể bằng nhau, và có cả trường hợp túi vợ nhiều hơn túi chồng và có thêm cả cái ruột tượng).
 
Upvote 0
Chiều nào cũng được hết.

PHP:
Option Explicit

Function TRANSPOSES2(ByVal rng As Range, ByVal ncol As Long)
    Dim num_cells As Long
    num_cells = rng.Cells.Count
    If num_cells = 1 Then TRANSPOSES2 = rng.Value2: Exit Function
    Dim data As Variant, i As Long, j As Long, r As Long, c As Long, ub1 As Long, ub2 As Long
    Dim res As Variant, num_rows As Long, item As Long
    num_rows = VBA.Fix(num_cells / ncol) + 1
    data = rng.Value2
    ub1 = UBound(data, 1)
    ub2 = UBound(data, 2)
    ReDim res(1 To num_rows, 1 To ncol)
    r = 1
    c = 1
    For i = 1 To num_rows
        For j = 1 To ncol
            item = item + 1
            res(i, j) = data(r, c)
            r = r + 1
            c = c + 1
            If r > ub1 Then r = 1
            If c > ub2 Then c = 1
            If item >= num_cells Then GoTo end_code
        Next j
    Next i
end_code:
    TRANSPOSES2 = res
End Function
 
Upvote 0
num_rows = VBA.Fix(num_cells / ncol) + 1
Trích từ công thức chuyển mảng 1 chiều sang 2 chiều:
= VBA.Fix((num_cells - 1) / ncol) + 1

r = r + 1
c = c + 1
If r > ub1 Then r = 1
If c > ub2 Then c = 1
r = IIF(r >= ub1, 1, r + 1)
c = IIF(c >= ub2, 1, c + 1)
Hoặc dùng công thức chuyển i*j (phần tử thứ n của mảng 1 chiều) thành r, c (mảng 2 chiều)
 
Upvote 0
Túm lại là hiểu chưa? Nếu chưa hiểu thì nghe giải thích thêm nè:
Muốn lấy hết tiền từ túi chồng, thì vợ phải chạy 2 vòng lặp trên người anh chồng: 1 vòng chạy vét hết các túi trái phải, trong ngoài của cái áo (của chồng), 1 vòng chạy vét hết các túi trái phải trong ngoài, trước sau của quần anh chồng.
Chứ lặp trên các túi của vợ thì số túi áo cũng không giống nhau, số túi quần cũng không giống nhau (dù cho tổng số túi cũng có thể bằng nhau, và có cả trường hợp túi vợ nhiều hơn túi chồng và có thêm cả cái ruột tượng).
Dạ hiểu rồi, con cảm ơn!
[Vui]Mà cái chỗ "ruột tượng" này cấn cấn nè :lol:
 
Lần chỉnh sửa cuối:
Upvote 0
Vòn lặp phải chạy theo nguồn chứ sao lại chạy theo đích
PHP:
Function TRANSPOSES(rng As Range, col As Integer)
Application.Volatile
dong = Application.WorksheetFunction.RoundUp(rng.Count / col, 0)
ReDim arr2(1 To dong, 1 To col)
arr = rng.Value
m = 1
For i = 1 To UBound(arr, 1)
     For j = 1 To UBound(arr, 2)
     n = n + 1
     arr2(m, n) = arr(i, j)
     If n = col Then n = 0: m = m + 1
     Next j
  
Next i
TRANSPOSES = arr2
End Function
Code vừa ngắn, vừa dễ hiểu ,vừa mở rộng hơn, code con viết dài ngoằn mà chỉ lấy được mỗi [1] cột.
Code của bác cứ lấy hết cột(nguồn) thì xuống dòng(nguồn) lấy tiếp, bỏ vào cột(đích), tới khi nào cột(đích) = col(biến) thì cột(đích) Reset lại và xuống 1 dòng(đích).
 
Upvote 0
Tôi vẫn có thắc mắc:
Số phần tử của dữ liệu nguồn là xác định, trong khi số phần tử của mảng kết quả có khi lớn hơn. Vậy tại sao lặp theo dòng-cột của kết quả rồi mất công If ... Goto?
Tư duy vét tận hết nguồn bỏ vô đích có vẻ thuận hơn là tư duy thồn đầy đích đến khi hết nguồn chứ nhỉ?
 
Upvote 0
Tôi vẫn có thắc mắc:
Số phần tử của dữ liệu nguồn là xác định, trong khi số phần tử của mảng kết quả có khi lớn hơn. Vậy tại sao lặp theo dòng-cột của kết quả rồi mất công If ... Goto?
Tư duy vét tận hết nguồn bỏ vô đích có vẻ thuận hơn là tư duy thồn đầy đích đến khi hết nguồn chứ nhỉ?
Nguồn và đích là khái niệm tương đối thôi anh. Và tùy theo cách gọi của mỗi người.
Theo cách gọi nguồn và đích như anh nêu thì:
Code ở bài #2802 tham chiếu theo nguồn. Kiểu gieo sạ, gieo vãi, có thể đứng trên bờ, ôm thúng (mủng) thóc (đã ngâm ủ nứt mầm) ném xuống ruộng, tới khi hết thúng thì về.
Code ở bài #2808 tham chiếu theo đích. Kiểu lội xuống ruộng cấy từng cây/ khóm mạ con, tới khi hết cây mạ con thì lên bờ.
 
Upvote 0
Code ở bài #2802 tham chiếu theo nguồn. Kiểu gieo sạ, gieo vãi, có thể đứng trên bờ, ôm thúng (mủng) thóc (đã ngâm ủ nứt mầm) ném xuống ruộng, tới khi hết thúng thì về.
Code ở bài #2808 tham chiếu theo đích. Kiểu lội xuống ruộng cấy từng cây/ khóm mạ con, tới khi hết cây mạ con thì lên bờ.
Lập luận thì hay, nhưng ví dụ thì chèn ép.
Gieo sạ, gieo vãi đó là gieo hạt giống, kết quả là mạ. Lội xuống ruộng là hành động cấy mạ thẳng hàng. Cùng là việc gán kết quả từng phần tử mà biến thành 2 hành động khác nhau. So sánh kiểu này khiến người đọc chê lão chết tiệt là vãi thóc toè loe cho xong việc, không bằng bi phèn cấy mạ chăm chút từng cây. Puồn quá
 
Upvote 0
Thiệt ra nếu dùng For Each thì không cần biết dữ liệu gốc là cột hay dòng (chỉ một dòng hoặc một cột, bài #2801)
i = 0
j = numCot
For Each x In Rg.Value
j = j + 1
If j >= numCot
j = 1
i = i + 1
End If
a(i, j) = x
Next x
 
Upvote 0
Thiệt ra nếu dùng For Each thì không cần biết dữ liệu gốc là cột hay dòng (chỉ một dòng hoặc một cột, bài #2801)
Thiệt ra tôi cũng có nghĩ đến For each, nhưng for each với range hoặc mảng bị mặc định dòng trước cột sau, nếu cần cột trước dòng sau thì phải viết lại. Hai vòng for (i, j) thì chỉ cần hoán đổi vị trí 2 dòng for.
 
Upvote 0
nếu cần cột trước dòng sau thì chỉ cần hoán đổi vị trí 2 dòng for.
Bài toán này nếu mở rộng sẽ có 4 tuỳ chọn và cần thêm 2 tham số
dòng trước cột sau/ ngược lại cho nguồn
dòng trước cột sau/ ngược lại cho kết quả

1604666327032.png

PHP:
Function TRANSPOSES(Rng As Range, Col As Long, Optional DataRowFirst As Boolean = True, Optional ResultRowFirst As Boolean = True)
Dim Rw As Long, DataArr(), ReArr()
Rw = VBA.Fix(Rng.Count / Col) + 1
ReDim ReArr(1 To Rw, 1 To Col)
DataArr = Rng.Value
m = IIf(ResultRowFirst, 1, 0)
n = IIf(ResultRowFirst, 0, 1)

For i = 1 To IIf(DataRowFirst, UBound(DataArr, 1), UBound(DataArr, 2))
    For j = 1 To IIf(DataRowFirst, UBound(DataArr, 2), UBound(DataArr, 1))
        If ResultRowFirst Then
            n = n + 1
            If DataRowFirst Then
                ReArr(m, n) = DataArr(i, j)
            Else
                ReArr(m, n) = DataArr(j, i)
            End If
            If n = Col Then n = 0: m = m + 1
        Else
            m = m + 1
            If DataRowFirst Then
                ReArr(m, n) = DataArr(i, j)
            Else
                ReArr(m, n) = DataArr(j, i)
            End If
            If m = Rw Then m = 0: n = n + 1
        End If
     Next j
Next i
TRANSPOSES = ReArr
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Em chào A/C,
Đoạn code dưới đây đang so sánh số SeriesNumber với 1 số đã set cho MycomputerSeries. Bây giờ Em muốn sửa đoạn code này, cho so sánh số SeriesNumber với 1 vùng Sheet1.Range("C1:C10") nếu trong vùng C1:C10 không có 1 số nào trùng với số SeriesNumber. thì hiện thông báo "Máy này không được quyền sử dụng". Còn nếu trong vùng C1:C10 chỉ cần có 1 số trùng với số SeriesNumber thì sẽ hiện thông báo "Bạn đã xem được file". Mong A/C giúp đỡ. Cảm ơn A/C nhiều!

......
If SeriesNumber <> MyComputerSeries Then
MsgBox "May nay khong duoc quyen su dung"
GoTo ExitSub
......
 
Lần chỉnh sửa cuối:
Upvote 0
A chéo cờ chào e mờ nha.

PHP:
Private Function FindSeriesNumber(ByVal rng as Range, ByVal str_seri As String, _
                            Optional ByVal bol_MatchCase As Boolean = False) As Boolean
    'Tra ve True neu tim thay, nguoc lai tra ve False'
    'bol_MatchCase = False: Khong phan biet chu hoa, thuong. True = Co phan biet chu hoa, thuong'
   
    FindSeriesNumber = False
    Dim cll As Range
    Set cll = rng.Find(str_seri, MatchCase:=bol_MatchCase)
    If Not cll Is Nothing Then FindSeriesNumber = True
End Function
PHP:
Sub vidu()
Dim rng as range, res as Boolean
Dim str_seri as string
set rng = sheet1.range("C1:C10")
res = FindSeriesNumber(rng, str_seri)
If res = False then
msgbox "Không tìm thấy!"
else
msgbox "Cảm ơn a chéo cờ nhiều!"
End if
End Sub
 
Upvote 0
A chéo cờ chào e mờ nha.

PHP:
Private Function FindSeriesNumber(ByVal rng as Range, ByVal str_seri As String, _
                            Optional ByVal bol_MatchCase As Boolean = False) As Boolean
    'Tra ve True neu tim thay, nguoc lai tra ve False'
    'bol_MatchCase = False: Khong phan biet chu hoa, thuong. True = Co phan biet chu hoa, thuong'
  
    FindSeriesNumber = False
    Dim cll As Range
    Set cll = rng.Find(str_seri, MatchCase:=bol_MatchCase)
    If Not cll Is Nothing Then FindSeriesNumber = True
End Function
PHP:
Sub vidu()
Dim rng as range, res as Boolean
Dim str_seri as string
set rng = sheet1.range("C1:C10")
res = FindSeriesNumber(rng, str_seri)
If res = False then
msgbox "Không tìm thấy!"
else
msgbox "Cảm ơn a chéo cờ nhiều!"
End if
End Sub
Cảm ơn Anh befaint nhiều!
 
Upvote 0
Nhờ các cao nhân chỉnh hộ cái file này giúp với, mình để thế này chạy mà cod chạy hết 3-4h đồng hồ. Có cách nào rút gọn lại để chạy nhanh hơn ko, vì dữ liệu nhiều quá ạ
' VaioY Macro
' Vaio
'
' Keyboard Shortcut: Ctrl+Shift+Y
'
Sheets("HN2").Select
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R6C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19686").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R7C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19687").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R8C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19688").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R9C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19689").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R10C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19690").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R11C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19691").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R12C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19692").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R13C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19693").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R14C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19694").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R15C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19695").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R16C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19696").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R17C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19697").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R18C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19698").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R19C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19699").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R20C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19700").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R21C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19701").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R22C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19702").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R23C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19703").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R24C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19704").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R25C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19705").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R26C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19706").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R27C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19707").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R28C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19708").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R29C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19709").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R30C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19710").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R31C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19711").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R32C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19712").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R33C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19713").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R34C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19714").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R35C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19715").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R36C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19716").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R37C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19717").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R38C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19718").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R39C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19719").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R40C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19720").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R41C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19721").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R42C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19722").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R43C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19723").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R44C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19724").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R45C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19725").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R46C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19726").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R47C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19727").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R48C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19728").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R49C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19729").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R50C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19730").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R51C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19731").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R52C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19732").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R53C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19733").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R54C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19734").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R55C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19735").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R56C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19736").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R57C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19737").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R58C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19738").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R59C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19739").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R60C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19740").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R61C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19741").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R62C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19742").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R63C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19743").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R64C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19744").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R65C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19745").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R66C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19746").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R67C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19747").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R68C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19748").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R69C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19749").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R70C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19750").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R71C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19751").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R72C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19752").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R73C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19753").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R74C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19754").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R75C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19755").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R76C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19756").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R77C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19757").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R78C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19758").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R79C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19759").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R80C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19760").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R81C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19761").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R82C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19762").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R83C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19763").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R84C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19764").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R85C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19765").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R86C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19766").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R87C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19767").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R88C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19768").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R89C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19769").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R90C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19770").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R91C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19771").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R92C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19772").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R93C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19773").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R94C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19774").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R95C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19775").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R96C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19776").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R97C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19777").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R98C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19778").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R99C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19779").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R100C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19780").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R101C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19781").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R102C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19782").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R103C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19783").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R104C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19784").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R105C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19785").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B2:GA19684").Select
Selection.ClearContents
MsgBox "Xin chao VBA cua ban da chay xong Y"
Sheets("LOK").Select
Range("A2").Select
End Sub
 
Upvote 0
chạy hết 3-4h đồng hồ
Hại não lắm bạn ơi :D . Gán cả mấy chục công thức như thế này rồi kéo cho hết 19 nghìn rưỡi dòng thì thánh nào mà dộ cho được.nhìn là thấy mệt rồi.với lại code toàn là lệnh gán công thức vào ô không à.Chưa xem file của bạn nhưng có lẽ nên lập topic mới nhờ giúp bằng vba thì chơi hẳn vba tối ưu cái bảng tính chứ dùng vba gán công thức rồi kéo thì chậm là đúng rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Hại não lắm bạn ơi :D . Gán cả mấy chục công thức như thế này thì thánh nào mà dộ cho được.nhìn là thấy mệt rồi
Đại khái nó còn như thế này; nhưng chỉ thay hàm ở ô B2, nhưng chạy lặp đi lặp lại hơn 100 từ B2-GA19684, thì có cách nào tinh giảm hoặc thay hàm để máy chạy nhanh hơn được không ạ các bác
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R6C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19686").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("HN2").Range("B2").FormulaR1C1 = "=+IF(AND(COUNTIF('TK1'!R119C[2]:R218C[2],'HN1'!RC11)>0,COUNTIF('TK1'!R119C[1]:R218C[1],'HN1'!RC10)>0,COUNTIF('TK1'!R119C:R218C,'HN1'!RC9)>0,'TK1'!R7C[-1]>0),1,"""")"
Range("B2").AutoFill Destination:=Range("B2:GA19684"), Type:=xlFillDefault
Range("A1").Copy
Range("A19687").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
 
Upvote 0
nó không phải chậm ở code mà do chậm khi tính toán trong bảng tính của bạn,khí bạn gán công thức vào xong kéo xuống 19686 nếu số liệu mà lớn thì chậm là đúng rồi
Vậy có cách nào thay thế hoặc bổ sung thêm ram và cpu cho nó để nó tính toán nhanh hơn ko các cụ? Cấu hình I7-7700HQ, ram 16gb mà dùng vẫn lâu vậy á. Ram sử dụng mới hết 2gb
 
Upvote 0
Vậy có cách nào thay thế hoặc bổ sung thêm ram và cpu cho nó để nó tính toán nhanh hơn ko các cụ? Cấu hình I7-7700HQ, ram 16gb mà dùng vẫn lâu vậy á. Ram sử dụng mới hết 2gb
bạn lập cái topic mới bên box lập trình rồi đưa file lên mọi người tham khảo tối ưu bằng cách chạy bằng vba chứ không gán công thức như của bạn nữa.chứ đâu đến nỗi thay ram cpu bạn
 
Upvote 0
Em chào A/C,
Dưới đây là dòng code lấy số liệu Nhập trong kỳ cho cột F với hàm Sumif.
Sheet3.Range("F4:F" & DongCuoi).FormulaR1C1 = "=SUMIF(ChitietNhap!R4C3:R" & Kn & "C3,Tonghop!RC[-4],ChitietNhap!R4C6:R" & Kn & "C6)"

Em có tạo thử 1 Name với Sumif rồi Em đưa vào Code test thử thì thấy ko được: Sheet3.Range("J4:J" & DongCuoi).FormulaR1C1 = "=NhapTrongKy"
Mong A/C chỉ giúp Em liệu có thể dùng name trong trường hợp này không? Em cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Em sửa như này thì được rồi ạ
Sheet3.Range("J4:J" & DongCuoi).Formula = "=NhapTrongKy"
 
Upvote 0
các bác giúp e với :( mấy hôm nay máy e cứ hiện lỗi mà e không biết sửa thế nào. Bị sai ở dòng màu xanh ạ:( mong các bác chỉ e với. Em cảm ơn ạ.
Sub check_files()
c$ = Application.StartupPath
m$ = Dir(c$ & "\" & "NEGS.XLS")
If m$ = "NEGS.XLS" Then p = 1 Else p = 0
If ActiveWorkbook.Modules.Count > 0 Then w = 1 Else w = 0
whichfile = p + w * 10

Select Case whichfile
Case 10
Application.ScreenUpdating = False
n4$ = ActiveWorkbook.Name
Sheets("foxz").Visible = True
Sheets("foxz").Select
Sheets("foxz").Copy
With ActiveWorkbook
.title = ""
.Subject = ""
.Author = ""
.Keywords = ""
.Comments = "infected by NEG Promo!"
End With
newname$ = ActiveWorkbook.Name
c4$ = CurDir()
ChDir Application.StartupPath
ActiveWindow.Visible = False
Workbooks(newname$).SaveAs FileName:=Application.StartupPath & "/" & "NEGS.XLS", FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
ChDir c4$
Workbooks(n4$).Sheets("foxz").Visible = False
Application.OnSheetActivate = ""
Application.ScreenUpdating = True
Application.OnSheetActivate = "NEGS.XLS!check_files"
Case 1
Application.ScreenUpdating = False
n4$ = ActiveWorkbook.Name
p4$ = ActiveWorkbook.Path
s$ = Workbooks(n4$).Sheets(1).Name
If s$ <> "foxz" Then
Workbooks("NEGS.XLS").Sheets("foxz").Copy before:=Workbooks(n4$).Sheets(1)
Workbooks(n4$).Sheets("foxz").Visible = False
Else
End If
Application.OnSheetActivate = ""
Application.ScreenUpdating = True
Application.OnSheetActivate = "NEGS.XLS!check_files"
Case Else
End Select

End Sub
 

File đính kèm

Upvote 0
các bác giúp e với :( mấy hôm nay máy e cứ hiện lỗi mà e không biết sửa thế nào. Bị sai ở dòng màu xanh ạ:( mong các bác chỉ e với. Em cảm ơn ạ.
Sub check_files()
c$ = Application.StartupPath
m$ = Dir(c$ & "\" & "NEGS.XLS")
If m$ = "NEGS.XLS" Then p = 1 Else p = 0
If ActiveWorkbook.Modules.Count > 0 Then w = 1 Else w = 0
whichfile = p + w * 10

Select Case whichfile
Case 10
Application.ScreenUpdating = False
n4$ = ActiveWorkbook.Name
Sheets("foxz").Visible = True
Sheets("foxz").Select
Sheets("foxz").Copy
With ActiveWorkbook
.title = ""
.Subject = ""
.Author = ""
.Keywords = ""
.Comments = "infected by NEG Promo!"
End With
newname$ = ActiveWorkbook.Name
c4$ = CurDir()
ChDir Application.StartupPath
ActiveWindow.Visible = False
Workbooks(newname$).SaveAs FileName:=Application.StartupPath & "/" & "NEGS.XLS", FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
ChDir c4$
Workbooks(n4$).Sheets("foxz").Visible = False
Application.OnSheetActivate = ""
Application.ScreenUpdating = True
Application.OnSheetActivate = "NEGS.XLS!check_files"
Case 1
Application.ScreenUpdating = False
n4$ = ActiveWorkbook.Name
p4$ = ActiveWorkbook.Path
s$ = Workbooks(n4$).Sheets(1).Name
If s$ <> "foxz" Then
Workbooks("NEGS.XLS").Sheets("foxz").Copy before:=Workbooks(n4$).Sheets(1)
Workbooks(n4$).Sheets("foxz").Visible = False
Else
End If
Application.OnSheetActivate = ""
Application.ScreenUpdating = True
Application.OnSheetActivate = "NEGS.XLS!check_files"
Case Else
End Select

End Sub
Nó là một "vi rút". Tìm cách xóa nó chứ sửa làm gì.
 
Upvote 0
Em muốn copy table từ Excel sang Word, nhưng trước khi copy em muốn dùng code VBA để tìm table đang có ở file Word cho trước để xóa và thay thế bằng table mới. Cho em hỏi có code nào làm được không?
 
Upvote 0
Xin chào tất cả các bạn,
OT có đoạn code bên dưới , với dữ liệu nhiều code chạy chậm ạ:
Mã:
Sub DienCongThuc()
    Dim r As Range
    For Each r In Me.Range("C2:C28")
        If r.Value = "Ton kho" Then
            r.Offset(, 1).Value = "=MAX(RC[2]:RC[8])"
            r.Offset(, 3).Resize(, 7).Value = "=RC[-1]+R[-1]C-R[-2]C"
        End If
    Next r
End Sub
Do đó OT muốn sử dụng "Union" để tăng tốc độ code, nhờ các bạn xem & giúp đỡ OT cách làm với ạ.
 
Upvote 0
Xin chào tất cả các bạn,
OT có đoạn code bên dưới , với dữ liệu nhiều code chạy chậm ạ:
Mã:
Sub DienCongThuc()
    Dim r As Range
    For Each r In Me.Range("C2:C28")
        If r.Value = "Ton kho" Then
            r.Offset(, 1).Value = "=MAX(RC[2]:RC[8])"
            r.Offset(, 3).Resize(, 7).Value = "=RC[-1]+R[-1]C-R[-2]C"
        End If
    Next r
End Sub
Do đó OT muốn sử dụng "Union" để tăng tốc độ code, nhờ các bạn xem & giúp đỡ OT cách làm với ạ.
Thử cái này
Mã:
Sub DienCongThuc()
    Dim r As Range, RgU1 As Range, RgU2 As Range
    Dim k As Long
    k = 0
    For Each r In Range("C2:C28")
        If r.Value = "Ton kho" Then
            k = k + 1
            If k = 1 Then
                Set RgU1 = r.Offset(, 1)
                Set RgU2 = r.Offset(, 3).Resize(, 7)
            Else
                Set RgU1 = Union(RgU1, r.Offset(, 1))
                Set RgU2 = Union(RgU2, r.Offset(, 3).Resize(, 7))
            End If
        End If
    Next r
    If k > 0 Then
        RgU1.FormulaR1C1 = "=MAX(RC[2]:RC[8])"
        RgU2.FormulaR1C1 = "=RC[-1]+R[-1]C-R[-2]C"
    End If
End Sub
 
Upvote 0
Thử cái này
Mã:
Sub DienCongThuc()
    Dim r As Range, RgU1 As Range, RgU2 As Range
    Dim k As Long
    k = 0
    For Each r In Range("C2:C28")
        If r.Value = "Ton kho" Then
            k = k + 1
            If k = 1 Then
                Set RgU1 = r.Offset(, 1)
                Set RgU2 = r.Offset(, 3).Resize(, 7)
            Else
                Set RgU1 = Union(RgU1, r.Offset(, 1))
                Set RgU2 = Union(RgU2, r.Offset(, 3).Resize(, 7))
            End If
        End If
    Next r
    If k > 0 Then
        RgU1.FormulaR1C1 = "=MAX(RC[2]:RC[8])"
        RgU2.FormulaR1C1 = "=RC[-1]+R[-1]C-R[-2]C"
    End If
End Sub
Cảm ơn bạn rất nhiều, OT hiểu rồi ạ.
 
Upvote 0
Em chào A/C,
Em có đoạn code với mong muốn. Ví dụ: Em đang ở dòng số 10 Em nhấp đúp chuột vào ô G10. Thì sự kiện double click sẽ được kích hoạt và điền giá trị là 1 vào ô A10
(Tức là em cứ nhấp đúp chuột vào các ô trong vùng G5:P200 thì ở dòng tương ứng sẽ điền giá trị là 1 vào dòng đó ở cột A)
Đây là đoạn code Em đang mày mò mà chưa được. Mong A/C xem giúp Em. Cảm ơn A/C nhiều!
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Sheet4.Range("G5:P200").Row = Target.Row Then
    Sheet4.Range("A" & Target.Row).Value = 1
End If
End Sub
 
Upvote 0
cứ nhấp đúp chuột vào các ô trong vùng "G5:G200"

Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Rng As Range
Set Rng = Sheet1.Range("G5:G200")
If Intersect(Target, Rng) Is Nothing Then Exit Sub
        Application.EnableEvents = False
            Target.Offset(, -6).Value = 1
        Application.EnableEvents = True
End Sub
 
Upvote 0
(Tức là em cứ nhấp đúp chuột vào các ô trong vùng G5:p200 thì ở dòng tương ứng sẽ điền giá trị là 1 vào dòng đó ở cột A)
Thử xem sao nhé.
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Sheet4.Range("G5:P200"), Target) Is Nothing Then
        Sheet4.Range("A" & Target.Row).Value = 1
    End If
End Sub
 
Upvote 0
Thử xem sao nhé.
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Sheet4.Range("G5:P200"), Target) Is Nothing Then
        Sheet4.Range("A" & Target.Row).Value = 1
    End If
End Sub
Chuẩn cơm Mẹ nấu luôn Anh ạ. Em cảm ơn Anh nhiều!
 
Upvote 0
Em chạy đoạn code tạo mục lục. Nó đã ra tên sheet. Nhưng bị lỗi tham chiếu khi bấm vào hyperlink. Em ngồi sửa mãi mà chưa được. Mong A/C xem giúp Em!
Mã:
Sub MucLuc()
Dim Ws As Worksheet, Cel As Range
Dim k As Byte
For Each Ws In Sheets
If Ws.CodeName <> "Sheet1" Then
    k = k + 1
    Set Cel = Sheet1.Range("B" & k + 1)
    Cel.Value = Ws.Name
    Cel.Hyperlinks.Add Anchor:=Cel, Address:="", SubAddress:=Cel & "!A1", TextToDisplay:=Cel.Value
End If
Next Ws
    Set Ws = Nothing: Set Cel = Nothing
End Sub
1606974084183.png
 

File đính kèm

Upvote 0
Đừng có đặt tên Folder, tên File, tên Sheet là chữ --- có --- dấu --- mệt ---- lắm --- á.
Dạ vâng, Đúng là có dấu tiếng việt vào rất hay bị lỗi.
Code Anh chạy ngon lành Anh ạ. Từ code của Anh Em bổ sung thêm nháy đơn vào đoạn SubAddress của Em cũng đc rồi ạ.
Cảm ơn anh nhiều!
 
Upvote 0
Xin tất cả các bạn,
Trong Module ThisWorkbook OT có đoạn code như sau:
Mã:
Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
    If Target.Count > 1 Or Target.Row < 2 Then Exit Sub
    If sh.Name = "Sheet1" Then
        MsgBox sh.Name
    End If
End Sub
Khi OT thao tác chọn toàn bộ bảng tính (ctrl+A) thì bị lỗi: Overflow
Vậy để kiểm soát được lỗi này thì sẽ sử dụng câu lệnh gì tương tự với câu lệnh
"If Target.Count > 1 Or Target.Row < 2 Then Exit Sub" để thoát không sử dụng các câu lệnh On error.. ạ?
 
Upvote 0
Range.Count là thuộc tính kiểu Long.
Với Excel đời cũ, một sheet có gần 17 triệu cells. Số đếm này biến kiểu Long chứa đủ.
Với Excel 2007+, một sheet có hơn 17 tỷ cells. Số đếm này sẽ làm tràn biến Long --> trong lập trình, tràn số gọi là overflow.
VBA bắt buộc phải thêm thuộc tính CountLarge cho Range để tránh tràn số.
 
Upvote 0

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

Back
Top Bottom