Trang 1 trên 1

Giúp viết Function từ VBA sang VB.NET

Đã gửi: T.Tư 02/01/2019 11:09 pm
gửi bởi Miccpro
Kính chào các anh chị trên diễn đàn, trước em có biết qua về VBA, giờ muốn học VB.NET mà còn loay hoay chưa hiểu được gì nhiều. Mong các anh chị chuyển giúp em 2 hàm ở VBA sang VB.NET được không ạ:

Mã: Chọn hết

 Function Tachchuoi(Ma As Variant, ByVal dau As String, n As Long) As String
    Application.Volatile
    On Error Resume Next
    Dim tmp, Tach As String
   
    If Ma <> Empty Then
        tmp = Split(Ma, dau)
        Tach = Split(tmp)
        Tachchuoi = tmp(n - 1)
    End If
    If Ma = Empty Then Tachchuoi = ""
End Function


Mã: Chọn hết

Function NDPPKT(Ma As String, rng As Range, n As Long)
    Dim my_arr, sArr, Dic As Object, Tem  As String, R As Long
    Dim j As Long, i As Long
    Set Dic = CreateObject("Scripting.Dictionary")
    sArr = rng.value
    my_arr = Split(Ma, "|")
    For i = 1 To UBound(sArr)
        Tem = sArr(i, 1)
        If Tem <> Empty Then
            Dic.Item(Tem) = i
        End If
    Next i
    For j = 0 To UBound(my_arr)
        Tem = Trim(my_arr(j))
        R = Dic.Item(Tem)
        If R Then
            If NDPPKT <> Empty Then
                NDPPKT = NDPPKT & sArr(R, n)
            Else
                NDPPKT = sArr(R, n)
            End If
        End If
    Next j
End Function

Đặc biệt là hàm thứ 2 liên quan đến Range. Mong các anh chị giúp đỡ, em xin chân thành cảm ơn

Re: Giúp viết Function từ VBA sang VB.NET

Đã gửi: T.Bảy 05/01/2019 2:14 pm
gửi bởi ncxn
VB.net thì đơn giản
  1.      
  2. Dim words As String() = s.Split(New Char() {"ký tự muốn cắt"c})
  3.  

Re: Giúp viết Function từ VBA sang VB.NET

Đã gửi: CN 06/01/2019 2:45 pm
gửi bởi Miccpro
Các anh chị giúp em sửa code này được không ạ

Mã: Chọn hết

Imports Excel = Microsoft.Office.Interop.Excel
 Public Function Vlookup_1(ByVal Ma As String, ByVal rng As Excel.Range, ByVal n As Long) As String
        Dim sArr = rng.Value
        Dim my_arr = Ma.Split("|")
        Dim i, j, R As Long
        Dim Tem As String

        Dim Dic As New Dictionary(Of String, Int16)
        For i = 1 To UBound(sArr)
            Tem = sArr(i, 1)
            If Tem <> vbEmpty Then
                Dic.Item(Tem) = i

            End If
        Next
        For j = 0 To UBound(my_arr)
            Tem = Trim(my_arr(j))
            R = Dic.Item(Tem)
            If R Then
                Dim Ketqua As String = sArr(R, n)
            End If
        Next
        Return Ketqua

    End Function

Em không chạy được hàm này ạ

Re: Giúp viết Function từ VBA sang VB.NET

Đã gửi: T.Hai 07/01/2019 9:05 am
gửi bởi ncxn
Dim array(), ví dụ: string(); int(), hoặc as New ArrayList ....

Vòng lặp đầu tiên thì dùng phương thức Add sẽ được một list("value",key)
Ví dụ:
Dic.Add(tem,i)

Vòng lặp thứ 2, theo mình thì bạn đang so sánh trong list() để tìm những phần tử trùng với range() trong file excel rồi lấy kết quả là một mảng ketqua as string()?

---------------
Mà nếu bài toán là tìm các phần tử giống nhau ở 2 mảng thì trên này có rất nhiều bài viết rồi nhé.

Re: Giúp viết Function từ VBA sang VB.NET

Đã gửi: T.Hai 07/01/2019 9:39 am
gửi bởi Miccpro
Vòng lặp thứ 2, theo mình thì bạn đang so sánh trong list() để tìm những phần tử trùng với range() trong file excel rồi lấy kết quả là một mảng ketqua as string()?

Đúng như vậy ạ, đó là 1 hàm giống Vlookup, với tham số n là cột trả về giá trị trong range.

Mã: Chọn hết

Imports Excel = Microsoft.Office.Interop.Excel
 Public Function Vlookup_1(ByVal Ma As String, ByVal rng As Excel.Range, ByVal n As Long) As String

em khai báo tham số rng dạng range như thế có sai không ạ, nó không chạy

Re: Giúp viết Function từ VBA sang VB.NET

Đã gửi: T.Hai 07/01/2019 11:20 am
gửi bởi ncxn
nếu chỉ là vlookup thì dùng luôn hàm của excel

  1. Imports Excel = Microsoft.Office.Interop.Excel
  2.  
  3.     Function VBNET_vlookup(ByVal key As string, ByVal xlRange As Excel.Range, n as int )
  4.  
  5.         Dim xlApp As Excel.Application
  6.         Dim VlResult As String = ("")
  7.         Dim xlBook As Excel.Workbook
  8.         Dim xlSheet As Excel.Worksheet
  9.        
  10.  
  11.         xlApp = New Excel.Application()
  12.         xlBook = xlApp.Workbooks.Open("C:\examples.xlsx")
  13.         xlSheet = xlBook.Worksheets("Sheet cố định thì chơi cái này")
  14.         xlRange = xlSheet.UsedRange
  15.         ' Muốn lấy range do người dùng chọn thì dùng acticesheet.rang.selected
  16.         Dim id As VariantType = " xyz"
  17.  
  18.         Try
  19.            ' Nếu muốn kết quả là một mảng thì loop + công thức này để lấy kết quả
  20.             VlResult = xlApp.WorksheetFunction.VLookup(id, xlRange, n, 0)
  21.  
  22.         Catch ex As Exception
  23.  
  24.         End Try
  25.  
  26.         return = VlResult
  27.  
  28.         xlBook.Close()
  29.  
  30.     End Function