[Hỏi] Cách tạo một hàm riêng để sử dụng SQL trên Excel (1 người xem)

Liên hệ QC

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

sakutara1505

Thành viên mới
Tham gia
15/4/12
Bài viết
11
Được thích
2
Đầu tiên, em xin chào tát cả mọi người trong forum, chúc một người một năm mới đầy sức khỏe và thành công.
Dạo gần đây, em mới biết đến SQL trên excel, và cũng mày mò tìm được cách sử dụng nó, tuy nhiên em mới chỉ biết sử dụng nó tại một ô duy nhất trong bảng tính, em dùng mã này (Sub kích hoạt sql của em là "run_sql_sql"):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = ActiveSheet.Range("A1")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If InStr(KeyCells.Value2, "xxx") > 0 Then
Range("A2:XDF1000000").Select
Selection.ClearContents
sql = Right(KeyCells.Value2, Len(KeyCells.Value2) - Len("xxx"))
run_sql_sub sql
Range("A2").Select
End If
End If
End Sub

Giờ em muốn tự tạo một công thức để có thể sử dụng tại mọi ô trong bảng tính ạ, em nghĩ dạng nó sẽ như này
=XXX("Select*From data") , em muốn XXX sẽ là tên hàm, còn phần nội dung khởi chạy sẽ là phần trong "". Rất mong được sự giúp đỡ của mọi người
 
Công thức (hàm) chỉ trả về 1 giá trị cho ô, hoặc trả về mảng (công thức mảng) cho nhóm ô.
Công thức không thể ghi ở 1 ô và tự động ghi kết quả vào nhiều ô.
Nói tóm lại, hàm XXX của bạn chỉ có thể hoạt động nếu câu truy vấn "Select..." chỉ trả về 1 trị. Nếu câu ấy trả về 1 recordset thì bạn phải biết trước bao nhiêu lớn để chọn vùng.
 
Upvote 0
Đầu tiên, em xin chào tát cả mọi người trong forum, chúc một người một năm mới đầy sức khỏe và thành công.
Dạo gần đây, em mới biết đến SQL trên excel, và cũng mày mò tìm được cách sử dụng nó, tuy nhiên em mới chỉ biết sử dụng nó tại một ô duy nhất trong bảng tính, em dùng mã này (Sub kích hoạt sql của em là "run_sql_sql"):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = ActiveSheet.Range("A1")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If InStr(KeyCells.Value2, "xxx") > 0 Then
Range("A2:XDF1000000").Select
Selection.ClearContents
sql = Right(KeyCells.Value2, Len(KeyCells.Value2) - Len("xxx"))
run_sql_sub sql
Range("A2").Select
End If
End If
End Sub

Giờ em muốn tự tạo một công thức để có thể sử dụng tại mọi ô trong bảng tính ạ, em nghĩ dạng nó sẽ như này
=XXX("Select*From data") , em muốn XXX sẽ là tên hàm, còn phần nội dung khởi chạy sẽ là phần trong "". Rất mong được sự giúp đỡ của mọi người
Gợi ý cho bạn theo clip bên dưới:

 
Upvote 0
Để làm được cái hàm trả về một mảng tự động là rất khó đấy. Việc này không đơn giản như ta viết hàm thông thường trong VBA đâu, mà phải viết cả một cơ chế làm việc của Excel trước khi chạy hàm. Kỹ thuật viết hàm trả về mảng tự động co giãn này nó trở thành bí quyết mà nhiều người ngại đụng vào vì mất rất nhiều công sức tìm hiểu và làm ra nó (một số add-in ở Việt Nam tạo ra trong năm 2017 làm được việc này, tuy là sơ khai nhưng lại là copy nguyên bản của nước ngoài, một đặc điểm chung những add-in copy code này không chạy trên Excel 2007 là do tác giả gốc của nước ngoài viết cơ chế Excel 2010 :)) .

BS_SQL_Demo.gif
 
Upvote 0
Web KT

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

Back
Top Bottom