luuquanghung91
Thành viên mới

- Tham gia
- 25/6/21
- Bài viết
- 9
- Được thích
- 2
chân thành cám ơn bNếu bạn yêu thích truyền thống, thì tôi sẽ sử dụng cột phụ:
bác cho e xin làm bằng mã code nữa đc k?Nếu bạn yêu thích truyền thống, thì tôi sẽ sử dụng cột phụ:
Thích thì chiềubác cho e xin làm bằng mã code nữa đc k?
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 ạ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ì thử xem.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í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
sArr = Sheets("Sheet1").Range("A2:G2").Value
Vâng. Bác có viết đc code mức với số cùng 1 hàng như mẫu của em không ạ. Nếu được làm phiền bác hộ em vớisArr = Sheets("Sheet1").Range("A2:G2").Value
"Sheet1" là tên sheet cần xử lý, hình như là "CT7"
Hình bài #9 và bài #13 khác nhau không biết ý là gì? gởi file excel với kết quả mong muốn mình sẽ chỉnh code lần cuốiÝ em là chạy ra mức 1 cột theo hàng dọc này ý ạ. Của a là thành 2 hàng dọc
Bài đã được tự động gộp:
View attachment 261535
Chỉnh lạiDạ ý 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
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..........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ạy sub . . .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.
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?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
Không hiểu chỗ nào?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.
Cám ơn bác nhắc nhở.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
Dùng hàm tự tạoCá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ạ)
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
Cám ơn bác @HieuCD nhiều nhiềuDùng hàm tự tạo
Xem cách dùng hàm trong fileMã: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
Giờ em muốn gộp mức 3,4,5,6 thì dùng lệnh gì được bác @HieuCDDùng hàm tự tạo
Xem cách dùng hàm trong fileMã: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
Lấy 4 mức ghép với nhauGiờ em muốn gộp mức 3,4,5,6 thì dùng lệnh gì được bác @HieuCD
Bác hộ e nốt đc không? Em không biết dùng hàm nào để ghép 4 mức đấy vào 1 ôLấy 4 mức ghép với nhau
Lưu ý theo nội quy của diễn đàn không nên dùng từ viết tắtBác hộ e nốt đc không? Em không biết dùng hàm nào để ghép 4 mức đấy vào 1 ô
Sorry ạ; cám ơn bác @HieuCD. Bác nhắn cho e xin số tk của bác vào số đt 0377163082 để e hậu tạ nhéLưu ý theo nội quy của diễn đàn không nên dùng từ viết tắt
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 đànSorry ạ; cám ơn bác @HieuCD. Bác nhắn cho e xin số tk của bác vào số đt 0377163082 để e hậu tạ nhé
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ácBạ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
Nhập công thứcGiờ em muốn gộp mức 3,4,5,6 thì dùng lệnh gì được bác @HieuCD
=TachMuc($B$2:$B$11,3)&","&TachMuc($B$2:$B$11,4)&","&TachMuc($B$2:$B$11,5)&","&TachMuc($B$2:$B$11,6)
Đúng rồiThông tin như thế này đúng không bác
Ở đây bạn dùng từ sorry có nghĩa là "xin lỗi" hay "xin lỗi, tôi thích viết tắt" ?
cám ơn bác nhắc nhở; thói quen viết tắt mãi chưa sửa được do soạn trên điện thoại. Mong các bác thông cảm.Ở đây bạn dùng từ sorry có nghĩa là "xin lỗi" hay "xin lỗi, tôi thích viết tắt" ?
Cứ cho rằng có hậu tạ thì người ta nhịn mình?
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.Dùng hàm tự tạo
Xem cách dùng hàm trong fileMã: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
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(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
cảm ơn bạn nhiều, mình dùng được rồi nhé. Thanks !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ử