Hỏi về công thức mảng

Liên hệ QC

thuyyeu99

Trùm Nhiều Chuyện
Tham gia
6/6/08
Bài viết
1,729
Được thích
873
Các anh chị nào biết công thức mảng bằng VBA cho em hỏi xíu nhé.

Em đang mò mẫm về cách viết công thức mảng, nhưng còn lăn tăng 1 chỗ là khi viết công thức mảng có nên gán hết công thức vào trong 1 vùng không hay là chỉ Gán giá trị vào vùng đó (khi nào cần up1date thì chỉ việc Enter vào ô chứa công thức thì dữ liệu sẽ cập nhật lại).

Cám ơn các anh chị quan tâm!

Supper UDF SQL version 2

Hàm Supper UDF SQL version 2.1 hihihi (Hàm Group Concat trong T_SQL)
 
Lần chỉnh sửa cuối:
To @thuyyeu99
Hướng làm có rồi đó
1/ Bằng các gì đó Delete đi số dòng trước đó của nó đã gán xuống Sheet
2/ dùng RecordCount để lấy số dòng xong Insert Shift:=xlDown theo số RecordCount .... có điều phải duyệt For next chèn dòng trước xong gán kết quả sau
....
Cũng mới khám phá thêm vài cái nhỏ vvv:p:p
 
Upvote 0
To @thuyyeu99
Hướng làm có rồi đó
1/ Bằng các gì đó Delete đi số dòng trước đó của nó đã gán xuống Sheet
2/ dùng RecordCount để lấy số dòng xong Insert Shift:=xlDown theo số RecordCount .... có điều phải duyệt For next chèn dòng trước xong gán kết quả sau
....
Cũng mới khám phá thêm vài cái nhỏ vvv:p:p
Ý 1 don giản,
ý 2 mỚi khó hihihi em chỉ cần lấy duoc so dòng và so cot truoc thoi.
hihih
 
Upvote 0
Ý 1 don giản,
ý 2 mỚi khó hihihi em chỉ cần lấy duoc so dòng và so cot truoc thoi.
hihih
Thử xài hàm sau xem mạnh Copy chỉnh sửa Từ GPE đó
Mã:
Public Function CheckRows(ByVal FilePath As String, ByVal SheetName As String)
    Dim Fso As Object, FullPath As String ''Ham IFERROR ko su dung cho Office 2003
    Set Fso = CreateObject("Scripting.FileSystemObject")
    If Fso.FileExists(FilePath) = False Then Exit Function
    FullPath = "'" & Fso.GetParentFolderName(FilePath) & "\[" _
        & Fso.GetFilename(FilePath) & "]" & SheetName & "'!"
    CheckRows = "=IFERROR(LOOKUP(2,1/(" & FullPath & "A1:A65536<>""""),ROW(1:65536)),0)" ''OK
    Set Fso = Nothing
    Application.AskToUpdateLinks = False
End Function

Public Sub test()
    Range("A1") = CheckRows(ThisWorkbook.Path & "\Mau thong ke 3.xlsx", "THA") ''THA = ten Sheet
End Sub
Lấy dòng cột = ADO nè
Mã:
Private Sub GetDataGetRows()
    Dim Rst As Object, SQL As String
    Dim Strcon As String, ExcelPath As String
    Dim RecCount  As Long
    Dim dong As Long, cot As Long
    Dim dArr(), Arr(), i As Long, j As Long, k As Long
    ExcelPath = ThisWorkbook.Path & "\Data.xlsb"
    Set Rst = CreateObject("ADODB.Recordset")
    SQL = "select * from [Data_Nhap$]" ''Tuy chon Mo Rong de lay du lieu
    Strcon = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ExcelPath _
                & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
    Rst.Open SQL, Strcon, 3, 1
    RecCount = Rst.RecordCount
    ''MsgBox RecCount
    If Not Rst.EOF Then
        Arr = Rst.GetRows(RecCount)
        ''ReDim dArr(1 To UBound(Arr, 2) + 1, 1 To UBound(Arr, 1) + 1) ''Bỏ luôn
        dong = UBound(Arr, 2)
        cot = UBound(Arr, 1)
        MsgBox "Co So Cot La : " & Space(1) & cot
        MsgBox "Co So dong La : " & Space(1) & dong
'        For i = 0 To UBound(Arr, 2)
'            k = k + 1
'            For j = 0 To UBound(Arr, 1)
'                dArr(k, j + 1) = Arr(j, i)
'            Next j
'        Next i
'        Cells.ClearContents
'        Range("A2").Resize(UBound(dArr, 1), UBound(dArr, 2)) = dArr
    End If
End Sub

Từ từ thong thả ta thử các kiểu xem sao ... xong cái nào ưu việt nhất thì chốt hạ he hehehehe
 
Lần chỉnh sửa cuối:
Upvote 0
vậy xong ròi hả
 
Upvote 0
Vụ này lâu lâu có một chủ đề rồi mà. (link)

Microsoft chính chủ cũng có lâu rồi.

1547852564371.png
 
Upvote 0
Vụ này lâu lâu có một chủ đề rồi mà. (link)

Microsoft chính chủ cũng có lâu rồi.

View attachment 211275

Không phải lâu đâu. Microsoft mới chỉ update vào phiên bản mới nhất của Excel 2019 và Office 365 (bản nâng cấp 2019) thôi. Và mới chỉ có các hàm SORT, FILTER đơn giản. MS cố làm vụ này để không bị so sánh Google Sheet với hàm ArrayFormula (mặc dù rất chuối) và với một Add-in của Việt Nam đấy :D . Mấy bạn đang muốn làm SQL, INSERT=YES,.. và chạy trên mọi Excel cơ :)
 
Upvote 0
Thật ra trong Windows + Office của Bác Bill có sẳn hết rồi tại mình chưa biết lôi nó ra xài thôi !!!!!!!!!!! ===\.===\.Lôi nó ra ví dụ như ADO vậy thui

Mạnh đang suy nghĩ 1 cái tại sao Bác Bill không viết luôn cái Hàm Mãng đó luôn cho Excel Nhỉ ...???!!! Chắc phải có nguyên nhân chi đó chứ ???!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Thật ra trong Windows + Office của Bác Bill có sẳn hết rồi tại mình chưa biết lôi nó ra xài thôi !!!!!!!!!!! ===\.===\.Lôi nó ra ví dụ như ADO vậy thui

Mạnh đang suy nghĩ 1 cái tại sao Bác Bill không viết luôn cái Hàm Mãng đó luôn cho Excel Nhỉ ...???!!! Chắc phải có nguyên nhân chi đó chứ ???!!!

Vụ hàm mảng này không có sẵn đâu nhé! Hàm để trả ra mảng thì hiển nhiên là có còn điền mảng tự co giãn vừa khít trên sheet lại là chuyện khác hoàn toàn. Cách viết hàm này là giải thuật để lách của nhiều khe cửa chứ không ăn sẵn được đâu (dù lập trình trên ngôn ngữ nào cũng là phải lách) . Ngay cả Google Sheet bao lâu nay họ vẫn còn bị lỗi với hàm này khi co giãn vùng mảng, nếu có giá trị dưới phía mảng đó là bị N/A#. Bạn nào có Office 365 hoặc Excel 2109 thì thử FILTER xem có bị lỗi giống như vậy không biết ngay.
 
Upvote 0
Vụ hàm mảng này không có sẵn đâu nhé! Hàm để trả ra mảng thì hiển nhiên là có còn điền mảng tự co giãn vừa khít trên sheet lại là chuyện khác hoàn toàn. Cách viết hàm này là giải thuật để lách của nhiều khe cửa chứ không ăn sẵn được đâu (dù lập trình trên ngôn ngữ nào cũng là phải lách) . Ngay cả Google Sheet bao lâu nay họ vẫn còn bị lỗi với hàm này khi co giãn vùng mảng, nếu có giá trị dưới phía mảng đó là bị N/A#. Bạn nào có Office 365 hoặc Excel 2109 thì thử FILTER xem có bị lỗi giống như vậy không biết ngay.
Thì theo Mạnh thấy nó cũng chỉ khác nhau cái chỗ Co và Giản đó thôi ... cái đó do người lập trình Sáng tạo viết thêm thôi chứ suy cho cùng ko có cái công cụ kia của bác Bill thì lấy chi ra mà Co Với Giản chứ
Có gốc xong mới có ngọn chứ .... Mạnh nói vậy ko sai chứ .... có chi Vui vẻ nhé :oops::D
 
Upvote 0
Thì theo Mạnh thấy nó cũng chỉ khác nhau cái chỗ Co và Giản đó thôi ... cái đó do người lập trình Sáng tạo viết thêm thôi chứ suy cho cùng ko có cái công cụ kia của bác Bill thì lấy chi ra mà Co Với Giản chứ
Có gốc xong mới có ngọn chứ .... Mạnh nói vậy ko sai chứ .... có chi Vui vẻ nhé :oops::D

ĐÚng là thế, nó nằm ở chỗ "Sáng tạo" - giá trị của nó ở đây. Nhưng rủi ro vô cùng cũng ở đây. Excel hay Google Sheet phải tuân thủ luật công thức tự tính toán, mọi biến động lên vùng, tham chiếu đầu vào của hàm sẽ bị tính toán lại, vì thế cái sự "co giãn" kia nó làm cho mọi thứ rối tung lên, công thức sẽ chạy đi chạy lại loằng ngoằng dẫn đễn chậm hoặc bị đứt phụt. Tầm của họ phân phối sản phẩm rộng thế giới, có thể họ chưa dám mạo hiểm đụng sâu, sợ người sử dụng ham hố làm họ vất vả thêm :) .
(Chia sẻ thêm, code tôi viết hàm mảng co giãn trên Delphi ít nhất là 3k dòng code để có thể làm mọi sự êm đềm đấy :) )
 
Upvote 0
Thật ra trong Windows + Office của Bác Bill có sẳn hết rồi tại mình chưa biết lôi nó ra xài thôi !!!!!!!!!!! ===\.===\.Lôi nó ra ví dụ như ADO vậy thui

Mạnh đang suy nghĩ 1 cái tại sao Bác Bill không viết luôn cái Hàm Mãng đó luôn cho Excel Nhỉ ...???!!! Chắc phải có nguyên nhân chi đó chứ ???!!!
ANh Tuân làm hoàn toàn khác cách làm của em và anh đấy anh Mạnh, anh nhìn câu lệnh SQL của anh Tuân là thuần trong Delphi dùng TADOQuery
Giờ em phát hiện ra có nhiều cách để làm lắm, mà đúng cái vụ co dãn hàm mãn nghĩ đơn giản nhưng hơi phứt tạp, hy vong là em mò ra hihi
 
Upvote 0
ANh Tuân làm hoàn toàn khác cách làm của em và anh đấy anh Mạnh, anh nhìn câu lệnh SQL của anh Tuân là thuần trong Delphi dùng TADOQuery
Giờ em phát hiện ra có nhiều cách để làm lắm, mà đúng cái vụ co dãn hàm mãn nghĩ đơn giản nhưng hơi phứt tạp, hy vong là em mò ra hihi
Cứ thong thả làm đi nay tới qua tết kiểu chi cũng ok à nghiên cứu mà lo chi vấn đề thời gian he

Chân lý thì chỉ có 1 ... còn đường tới chân lý thì có muôn nẻo đường .... ai tới trước thì người đó là người chiến thắng ????!!!
...............
.....
Mạnh mò mấy ngày nay sợ rồi mắt dát và chạy nước ra ... tạm gác lại mấy ngày làm cái đống việc báo cáo thuế của cty và dự hội nghị cuối năm của các nhà mạng mời cái đã ... xong nghiên cứu tiếp he:p:p
 
Upvote 0
Cứ thong thả làm đi nay tới qua tết kiểu chi cũng ok à nghiên cứu mà lo chi vấn đề thời gian he

Chân lý thì chỉ có 1 ... còn đường tới chân lý thì có muôn nẻo đường .... ai tới trước thì người đó là người chiến thắng ????!!!
...............
.....
Mạnh mò mấy ngày nay sợ rồi mắt dát và chạy nước ra ... tạm gác lại mấy ngày làm cái đống việc báo cáo thuế của cty và dự hội nghị cuối năm của các nhà mạng mời cái đã ... xong nghiên cứu tiếp he:p:p
Hhihhi anh bán Sim ah có cái sim nào đẹp đẹp tặng em đi hihihih
 
Upvote 0
Web KT
Back
Top Bottom