cho 2 xin lệnh hoặc hàm ghép 5 dàn số tạo thành mức 0,1,2,3 với ạ (1 người xem)

Liên hệ QC

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

luuquanghung91

Thành viên mới
Tham gia
25/6/21
Bài viết
9
Được thích
2
như tiêu đề, các bac pro cho e xin cách ghép các dàn số tạo mức như trong file. e càm ơn
 

File đính kèm

bác cho e xin làm bằng mã code nữa đc k?
Thích thì chiều
Mã:
Sub ABC()
  Dim sArr(), Arr&(0 To 99), S, Res(), sCol&, i&, j&

  sArr = Sheets("Sheet1").Range("A2:G2").Value
  sCol = UBound(sArr, 2)
  ReDim Res(0 To sCol, 1 To 2)
  For j = 1 To sCol
    S = Split(sArr(1, j), ",")
    For i = 0 To UBound(S)
      Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next j
  For i = 0 To 99
    If Res(Arr(i), 2) = Empty Then
      Res(Arr(i), 1) = "Muc:  " & Arr(i)
      Res(Arr(i), 2) = Format(i, "00")
    Else
      Res(Arr(i), 2) = Res(Arr(i), 2) & "," & Format(i, "00")
    End If
  Next i
  Sheets("Sheet1").Range("E5").Resize(sCol + 1, 2) = Res
End Sub
 
Thích thì chiều
Mã:
Sub ABC()
  Dim sArr(), Arr&(0 To 99), S, Res(), sCol&, i&, j&

  sArr = Sheets("Sheet1").Range("A2:G2").Value
  sCol = UBound(sArr, 2)
  ReDim Res(0 To sCol, 1 To 2)
  For j = 1 To sCol
    S = Split(sArr(1, j), ",")
    For i = 0 To UBound(S)
      Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next j
  For i = 0 To 99
    If Res(Arr(i), 2) = Empty Then
      Res(Arr(i), 1) = "Muc:  " & Arr(i)
      Res(Arr(i), 2) = Format(i, "00")
    Else
      Res(Arr(i), 2) = Res(Arr(i), 2) & "," & Format(i, "00")
    End If
  Next i
  Sheets("Sheet1").Range("E5").Resize(sCol + 1, 2) = Res
End Sub
thak kiu bác ạ :D e mơi học
 
Nếu vẫn còn hứng thú với bài này
e dùng hàm =CONCATENATE nhưng ghép với nhau thì k bỏ đc những số trùng.
làm sao để ghép dàn 1 và dàn 2 để ra đc dàn 3
thì thử xem.
P/S: Code học mót trên diễn dàn, chế cháo lại cho hợp vói đề bài. chắc cũng còn nhiều thiếu sót. mong các anh chị em xem, bổ xung và hoàn chỉnh
 

File đính kèm

Thích thì chiều
Mã:
Sub ABC()
  Dim sArr(), Arr&(0 To 99), S, Res(), sCol&, i&, j&

  sArr = Sheets("Sheet1").Range("A2:G2").Value
  sCol = UBound(sArr, 2)
  ReDim Res(0 To sCol, 1 To 2)
  For j = 1 To sCol
    S = Split(sArr(1, j), ",")
    For i = 0 To UBound(S)
      Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next j
  For i = 0 To 99
    If Res(Arr(i), 2) = Empty Then
      Res(Arr(i), 1) = "Muc:  " & Arr(i)
      Res(Arr(i), 2) = Format(i, "00")
    Else
      Res(Arr(i), 2) = Res(Arr(i), 2) & "," & Format(i, "00")
    End If
  Next i
  Sheets("Sheet1").Range("E5").Resize(sCol + 1, 2) = Res
End Sub
82CF26E7-473F-40DB-8013-9C62D9D0C8D2.jpeg66B0FE3F-0DCA-46AC-A871-A82614812BDD.jpeg
Em bị lỗi này là sao vậy bác. Hộ em với
 
VBA chạy trên file excel không chạy được trên nền file hình ảnh
 
Dạ ý em là muốn nhờ bác hộ e chỉnh lại mã code cho dòng mức và số cùng 1 cột ạ ( em bôi đỏ), của bác bây giờ đang là 2 cột riếng. hơi phiền bác thông cảm giúp em
 

File đính kèm

Dạ ý em là muốn nhờ bác hộ e chỉnh lại mã code cho dòng mức và số cùng 1 cột ạ ( em bôi đỏ), của bác bây giờ đang là 2 cột riếng. hơi phiền bác thông cảm giúp em
Chỉnh lại
Mã:
Sub ABC()
  Dim sArr(), Arr&(0 To 99), S, Res(), sCol&, i&, k&

  sArr = Sheets("CT7").Range("A8:G8").Value
  sCol = UBound(sArr, 2)
  ReDim Res(0 To (sCol + 1) * 2, 1 To 2)
  For k = 1 To sCol
    S = Split(sArr(1, k), ",")
    For i = 0 To UBound(S)
      Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next k
  For i = 0 To 99
    k = Arr(i) * 2
    Res(k, 2) = Res(k, 2) + 1
    If Res(k, 1) = Empty Then
      Res(k, 1) = "Muc:  " & Arr(i)
      Res(k + 1, 1) = Format(i, "00")
    Else
      Res(k + 1, 1) = Res(k + 1, 1) & "," & Format(i, "00")
    End If
  Next i
  For k = 0 To sCol * 2 Step 2
    If Res(k, 2) <> Empty Then
      Res(k, 1) = Res(k, 1) & " ( " & Res(k, 2) & " So)"
    End If
  Next k
  Sheets("CT7").Range("C9").Resize((sCol + 1) * 2) = Res
End Sub
 
Chỉnh lại
Mã:
Sub ABC()
  Dim sArr(), Arr&(0 To 99), S, Res(), sCol&, i&, k&

  sArr = Sheets("CT7").Range("A8:G8").Value
  sCol = UBound(sArr, 2)
  ReDim Res(0 To (sCol + 1) * 2, 1 To 2)
  For k = 1 To sCol
    S = Split(sArr(1, k), ",")
    For i = 0 To UBound(S)
      Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next k
  For i = 0 To 99
    k = Arr(i) * 2
    Res(k, 2) = Res(k, 2) + 1
    If Res(k, 1) = Empty Then
      Res(k, 1) = "Muc:  " & Arr(i)
      Res(k + 1, 1) = Format(i, "00")
    Else
      Res(k + 1, 1) = Res(k + 1, 1) & "," & Format(i, "00")
    End If
  Next i
  For k = 0 To sCol * 2 Step 2
    If Res(k, 2) <> Empty Then
      Res(k, 1) = Res(k, 1) & " ( " & Res(k, 2) & " So)"
    End If
  Next k
  Sheets("CT7").Range("C9").Resize((sCol + 1) * 2) = Res
End Sub
em cám ơn bác..........
 
Bác @HieuCD lập giúp em hàm để tách mức các cột số trong bảng này với.
Chạy sub . . .
Mã:
Sub ABC()
  Dim sArr(), Arr&(0 To 99), S, Res$(), sRow&, i&, r&

  sArr = Sheets("Sheet1").Range("B2:B11").Value
  sRow = UBound(sArr, 1)
  ReDim Res(0 To sRow, 1 To 1)
  For r = 1 To sRow
    S = Split(sArr(r, 1), ",")
    For i = 0 To UBound(S)
      If S(i) <> Empty Then Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next r
  For i = 0 To 99
    If Res(Arr(i), 1) = Empty Then
      Res(Arr(i), 1) = Format(i, "00")
    Else
      Res(Arr(i), 1) = Res(Arr(i), 1) & "," & Format(i, "00")
    End If
  Next i
  Sheets("Sheet1").Range("G1").Resize(sRow + 1, 1) = Res
End Sub
 
Chạy sub . . .
Mã:
Sub ABC()
  Dim sArr(), Arr&(0 To 99), S, Res$(), sRow&, i&, r&

  sArr = Sheets("Sheet1").Range("B2:B11").Value
  sRow = UBound(sArr, 1)
  ReDim Res(0 To sRow, 1 To 1)
  For r = 1 To sRow
    S = Split(sArr(r, 1), ",")
    For i = 0 To UBound(S)
      If S(i) <> Empty Then Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next r
  For i = 0 To 99
    If Res(Arr(i), 1) = Empty Then
      Res(Arr(i), 1) = Format(i, "00")
    Else
      Res(Arr(i), 1) = Res(Arr(i), 1) & "," & Format(i, "00")
    End If
  Next i
  Sheets("Sheet1").Range("G1").Resize(sRow + 1, 1) = Res
End Sub
bác có cách nào viết hàm cho code kiểu như này cho tiện giúp nhà e không?
Em không hiểu lắm nên không biết làm tn.
 
Không hiểu chỗ nào?
Lưu ý theo nội quy của diễn đàn không nên dùng từ viết tắt
Cám ơn bác nhắc nhở.
Bác hướng dẫn em làm hàm của lệnh đấy được không; ví dụ như làm hàm Tach_muc(...,...) để tạo ra được các mức như thế từ vùng dữ liệu chọn ấy
bác giúp nhà em, nhà em xin chân thành cảm ơn và hậu tạ :))
 
Cám ơn bác nhắc nhở.
Bác hướng dẫn em làm hàm của lệnh đấy được không; ví dụ như làm hàm Tach_muc(...,...) để tạo ra được các mức như thế từ vùng dữ liệu chọn ấy
bác giúp nhà em, nhà em xin chân thành cảm ơn và hậu tạ :))
Dùng hàm tự tạo
Mã:
Function TachMuc(ByVal rng As Range, ByVal muc As Long) As String
  Dim sArr(), Arr&(0 To 99), S, Res$, sRow&, i&, r&

  sArr = rng.Value
  sRow = UBound(sArr, 1)
  For r = 1 To sRow
    S = Split(sArr(r, 1), ",")
    For i = 0 To UBound(S)
      If S(i) <> Empty Then Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next r
  For i = 0 To 99
    If Arr(i) = muc Then
      Res = Res & "," & Format(i, "00")
    End If
  Next i
  If Res <> Empty Then TachMuc = Mid(Res, 2)
End Function
Xem cách dùng hàm trong file
 

File đính kèm

Dùng hàm tự tạo
Mã:
Function TachMuc(ByVal rng As Range, ByVal muc As Long) As String
  Dim sArr(), Arr&(0 To 99), S, Res$, sRow&, i&, r&

  sArr = rng.Value
  sRow = UBound(sArr, 1)
  For r = 1 To sRow
    S = Split(sArr(r, 1), ",")
    For i = 0 To UBound(S)
      If S(i) <> Empty Then Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next r
  For i = 0 To 99
    If Arr(i) = muc Then
      Res = Res & "," & Format(i, "00")
    End If
  Next i
  If Res <> Empty Then TachMuc = Mid(Res, 2)
End Function
Xem cách dùng hàm trong file
Cám ơn bác @HieuCD nhiều nhiều
 
Dùng hàm tự tạo
Mã:
Function TachMuc(ByVal rng As Range, ByVal muc As Long) As String
  Dim sArr(), Arr&(0 To 99), S, Res$, sRow&, i&, r&

  sArr = rng.Value
  sRow = UBound(sArr, 1)
  For r = 1 To sRow
    S = Split(sArr(r, 1), ",")
    For i = 0 To UBound(S)
      If S(i) <> Empty Then Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next r
  For i = 0 To 99
    If Arr(i) = muc Then
      Res = Res & "," & Format(i, "00")
    End If
  Next i
  If Res <> Empty Then TachMuc = Mid(Res, 2)
End Function
Xem cách dùng hàm trong file
Giờ em muốn gộp mức 3,4,5,6 thì dùng lệnh gì được bác @HieuCD
 
Bạn nhấn vào mục "Đóng góp" trên menu và gởi vào 1 trong các tài khoản trên, cám ơn bạn đã đóng góp cho diễn đàn
View attachment 276101
Bạn nhấn vào mục "Đóng góp" trên menu và gởi vào 1 trong các tài khoản trên, cám ơn bạn đã đóng góp cho diễn đàn
View attachment 276101
Thông tin như thế này đúng không bác
 

File đính kèm

  • F01DEE4F-317C-4285-805F-96E040DB66EA.png
    F01DEE4F-317C-4285-805F-96E040DB66EA.png
    178 KB · Đọc: 34
Dùng hàm tự tạo
Mã:
Function TachMuc(ByVal rng As Range, ByVal muc As Long) As String
  Dim sArr(), Arr&(0 To 99), S, Res$, sRow&, i&, r&

  sArr = rng.Value
  sRow = UBound(sArr, 1)
  For r = 1 To sRow
    S = Split(sArr(r, 1), ",")
    For i = 0 To UBound(S)
      If S(i) <> Empty Then Arr(CLng(S(i))) = Arr(CLng(S(i))) + 1
    Next i
  Next r
  For i = 0 To 99
    If Arr(i) = muc Then
      Res = Res & "," & Format(i, "00")
    End If
  Next i
  If Res <> Empty Then TachMuc = Mid(Res, 2)
End Function
Xem cách dùng hàm trong file
vâng thưa anh, hàm này có dùng được cho dạng 3D ko ạ a. là 3 càng đấy ạ. e cảm ơn nhiều.
vì e cũng có đoạn code nhưng chỉ dùng được cho dạng 2D thôi ạ. e cảm ơn.


Public Function laymuc(rng, rnd)
Dim Arr1, Arr2(99), i, j
Arr1 = rng
For i = 0 To UBound(Arr2)
For Each j In Arr1
If InStr(j, Right(100 + i, 2)) Then
Arr2(i) = Arr2(i) + (Len(j) - Len(Replace(j, Right(100 + i, 2), ""))) / 2
End If
Next j
Next i
For i = 0 To UBound(Arr2)
If Arr2(i) = rnd Then laymuc = laymuc & " " & Right(100 + i, 2)
Next i
laymuc = Replace(Trim(laymuc), " ", ",")
End Function
 
vâng thưa anh, hàm này có dùng được cho dạng 3D ko ạ a. là 3 càng đấy ạ. e cảm ơn nhiều.
vì e cũng có đoạn code nhưng chỉ dùng được cho dạng 2D thôi ạ. e cảm ơn.
Mã:
Public Function laymuc(rng, rnd)
    Dim Arr1, Arr2(999), i, j
    Arr1 = rng
    For i = 0 To UBound(Arr2)
        For Each j In Arr1
            If InStr(j, Right(1000 + i, 3)) Then
                Arr2(i) = Arr2(i) + (Len(j) - Len(Replace(j, Right(1000 + i, 3), ""))) / 3
            End If
        Next j
    Next i
    For i = 0 To UBound(Arr2)
        If Arr2(i) = rnd Then laymuc = laymuc & " " & Right(1000 + i, 3)
    Next i
    laymuc = Replace(Trim(laymuc), " ", ",")
End Function

Mình chỉ sửa thôi nhé. Bạn test thử
 
Mã:
Public Function laymuc(rng, rnd)
    Dim Arr1, Arr2(999), i, j
    Arr1 = rng
    For i = 0 To UBound(Arr2)
        For Each j In Arr1
            If InStr(j, Right(1000 + i, 3)) Then
                Arr2(i) = Arr2(i) + (Len(j) - Len(Replace(j, Right(1000 + i, 3), ""))) / 3
            End If
        Next j
    Next i
    For i = 0 To UBound(Arr2)
        If Arr2(i) = rnd Then laymuc = laymuc & " " & Right(1000 + i, 3)
    Next i
    laymuc = Replace(Trim(laymuc), " ", ",")
End Function

Mình chỉ sửa thôi nhé. Bạn test thử
cảm ơn bạn nhiều, mình dùng được rồi nhé. Thanks !
 

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

Back
Top Bottom