Cần giúp đỡ

Liên hệ QC

doi_trai_co_don

Thành viên chính thức
Tham gia
27/1/07
Bài viết
52
Được thích
5
Mình có vấn đề này cần các Bro giúp
 

File đính kèm

  • Sapxep.zip
    14.8 KB · Đọc: 41
Mình nhờ các bạn giúp mình như thế này (theo File kèm theo):
Bài 1: Tại ô A3 mình sẽ nhập số liệu bằng tay vào VD: 5+6+32+56+4+62 gồm 6 thành phần. Tại ô C3 mình muốn có tổng của các giá trị của ô A3, ở ô D3 mình muốn có tổng số các thành phần có trong ô A3 ( theo VD của mình là có 6 thành phần), còn E3:J3 mình muốn tách riêng từng thành phần có trong ô A3. Trong ô A3 các thành phần liên kết với nhau không nhất thiết phải là dấu cộng có thể là ký tự nào cũng được.
Bài 2: Bài toán so sánh. Mình có 2 cột dữ liệu (cũ và mới), mình muốn so sánh với nhau rồi cho kết quả ra cột khác. Nếu trùng nhau thì giữ nguyên còn khác nhau thì thêm vào cột đó.
Mong các bạn giúp đỡ.
 
Lời giải bài 1

Bạn dùng hàm tự tạo sau:
Mã:
Option Explicit: Option Base 1[b]
Function TongChuoi(StrC As String, Optional Loai As String)[/b]
 ReDim MTFan(9)
 Dim iJ As Integer, iW As Integer
 
 If IsMissing(Loai) Or Loai = "" Then Loai = "F"
 Do
   iJ = InStr(StrC, "+")
    If iJ > 0 Then
        Select Case UCase$(Loai)
        Case "T"
            TongChuoi = TongChuoi + CDbl(Left(StrC, iJ - 1))
        Case "D"
            TongChuoi = TongChuoi + 1
        Case "F"
            iW = 1 + iW:                   MTFan(iW) = Left(StrC, iJ - 1)
        End Select
        StrC = Mid(StrC, iJ + 1)
    Else
        Select Case UCase$(Loai)
        Case "T"
            TongChuoi = TongChuoi + CDbl(StrC)
        Case "D"
            TongChuoi = 1 + TongChuoi
        Case "F"
            iW = 1 + iW:                      MTFan(iW) = StrC
            TongChuoi = MTFan
        End Select
        Exit Do
    End If
 Loop
[b]End Function[/b]
Chú ý: Sẽ là hàm mảng giá trị khi trả về trong trw hợp đối số thứ hai ta cung cấp cho hàm là "F";
Lúc đó bạn chọn dẫy ô để nhận hết các trị của hàm trả về & như ~ hàm mảng # trong excel nên nhấn tổ hợp 3 fím, nha!
 
Lần chỉnh sửa cuối:
Giải bài 2 đây:

doi_trai_co_don[FONT=Verdana đã viết:
Bài 2: Bài toán so sánh. Mình có 2 cột dữ liệu (cũ và mới), mình muốn so sánh với nhau rồi cho kết quả ra cột khác. Nếu trùng nhau thì giữ nguyên còn khác nhau thì thêm vào cột đó.[/FONT]
Mong các bạn giúp đỡ.
Dữ liệu đang ở 2 cột 'J' & 'K'; Chép vộ cột 'H'
Mã:
Option Explicit: Option Base 1
Dim iJ As Long, lZ As Long
Public MCotJ() As Boolean: Public MCotK() As Boolean
Public MTong()

[b]Sub ToHopCot()[/b]
 Dim lCotJ As Long, lCotK As Long
 Dim StrMax As String, StrMin As String
[color="Blue"]' Xep2Cot[/color]
 lCotJ = Range("J36522").End(xlUp).Row:                 lCotK = Range("K36522").End(xlUp).Row
  
 ReDim MTong(lCotJ + lCotK):
 Dim lMin As Long, lMax As Long
 
 If lCotJ > lCotK Then
    lMax = lCotJ:                                       lMin = lCotK
    StrMax = "J":                                       StrMin = "K"
    ReDim MCotMax(lCotJ) As Boolean:                    ReDim MCotMin(lCotK) As Boolean
    ChepDL StrMax, lCotJ
 Else
    lMax = lCotK:                                       lMin = lCotJ:
    StrMax = "K":                                       StrMin = "J"
    ReDim MCotMax(lCotK) As Boolean:                    ReDim MCotMin(lCotJ) As Boolean
    ChepDL StrMax, lCotK
 End If[color="Blue"]
'***[/color]
 For iJ = 2 To lMin
    For lZ = 1 To lMax
        If Range(StrMin & CStr(iJ)).Value = Range(StrMax & CStr(lZ)).Value And MCotMax(lZ) = False Then
            MCotMin(iJ) = True
            MCotMax(lZ) = True:                         Exit For
        End If
    Next lZ
 Next iJ[color="Blue"]
 '***[/color]
 For iJ = 2 To lMin
    If Not MCotMin(iJ) Then
        lMax = 1 + lMax
        MTong(lMax) = Range(StrMin & CStr(iJ)).Value[color="Blue"]
'If iJ Mod 3 = 0 Then MsgBox MTong(lMax), , Range(StrMin & CStr(iJ)).Address
[/color]    End If
 Next iJ
 
 For iJ = 2 To (lCotJ + lCotK)[color="Blue"]
'    If MTong(iJ + 2) = "" Then Exit For [/color]
    Range("H" & CStr(iJ)) = MTong(iJ - 1)
 Next iJ
[b]End Sub


Sub ChepDL(SChu As String, L_Max As Long)[/b]
 For lZ = 2 To L_Max
    MTong(lZ - 1) = Range(SChu & CStr(lZ)).Value
 Next lZ
[b]End Sub


Sub Xep2Cot()[/b]
    Columns("J:J").Select
    Selection.Sort Key1:=Range("J1"), Order1:=xlAscending, Header:= _
        xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Columns("K:K").Select
    Selection.Sort Key1:=Range("K2"), Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
[b]End Sub[/b]
 
Web KT

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

Back
Top Bottom