Ghép những số bên CELL 1 sang những CELL bên cạnh (1 người xem)

Liên hệ QC

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

tunhantam

Thành viên chính thức
Tham gia
16/1/12
Bài viết
68
Được thích
1
Cho mình hỏi: Từ giá trị CELL C2 chúng ta có thể lấy sang các Cell như trong file của mình không vậy? Và nếu trong ô B3 có giá trùng giá trị của những cell khác bên trên ta tìm được thì sẽ hiện mầu nền mầu đỏ như trong file.
Cho mình xin cách ngắn nhất các bạn nhé
cảm ơn
 

File đính kèm

Lần chỉnh sửa cuối:
Híc có tận 27 lần đọc mà không bác nào giúp mình?
 
Có hiểu gì đâu mà giúp
- Cell C2 dùng để làm gì?
- Cell B3 dùng để làm gì?
Dẫy số bên C2 có 716-207-133
thì nhữn giá trị /2 ta phải ra kết quả 71 76 77 72 70 71 73 11 16 12 10 17 13 66 67 61 62 60 67 61 63 22 20 27 21 23 v.v
D3: Nếu có số 02 trùng với kết quả ở những chuỗi số ta lấy được ở trên thì sẽ có mầu nền mầu đỏ.
Như vậy đó bro.
 
Lần chỉnh sửa cuối:
Cho mình hỏi: Từ giá trị CELL C2 chúng ta có thể lấy sang các Cell như trong file của mình không vậy? Và nếu trong ô B3 có giá trùng giá trị của những cell khác bên trên ta tìm được thì sẽ hiện mầu nền mầu đỏ như trong file.
Cho mình xin cách ngắn nhất các bạn nhé
cảm ơn
Mình thấy chu kỳ giống nhau như khuôn đâu theo 1 điều kiện gì của C2 đâu. Cứ nhập tay và copy thôi cho gọn. Hiểu chết liền
 
Mình thấy chu kỳ giống nhau như khuôn đâu theo 1 điều kiện gì của C2 đâu. Cứ nhập tay và copy thôi cho gọn. Hiểu chết liền
Hoàn toàn lấy từ điều kiện bên C2 chứ. Dẫy số bên C2 có 716-207-133
thì nhữn giá trị /2 ta phải ra kết quả 71 76 77 72 70 71 73 11 16 12 10 17 13 66 67 61 62 60 67 61 63 22 20 27 21 23 v.v
 
C2 là ô dữ liệu mà ta nhập vào.
B3 là ô dữ liệu để ta nhập vào nhưng xem có trùng với kết quả mà ta làm được ở DEFGH/2 lấy từ dữ liệu C2 hay không ý.
.

Tóm lại cũng hổng hiểu
Nói chung: Nếu bạn mô tả mà người khác không hiểu được ý bạn thì đó là trách nhiệm thuộc về bạn
Vậy bạn cứ mô tả sao cho dễ hiểu rồi ta tính tiếp! Thế nhé!
 
Các bác xem lại giúp em file em mới gửi lên.
 

File đính kèm

Các bác xem lại giúp em file em mới gửi lên.

Vậy tóm lại điều bạn cần là gì:
1> Là liệt kê các số ra vùng D2:AM2
hay:
2> Tô màu cho cell trong D2:AM2 khi nó trùng với B3
--------------
Với câu 1: Đó là bài toán tổ hợp ---> Phải dùng VBA
Với câu 2: Chỉ cần dùng conditional formating là được
 
Liệt kê các số ra vùng D2:AM2 bác ạ

 
Sặc em tưởng bác giúp em cái liệt kê ra vùng D2:AM2 chứ ạ. Bác nói phải dùng VBA em cũng chịu mất híc.
 
Sặc em tưởng bác giúp em cái liệt kê ra vùng D2:AM2 chứ ạ. Bác nói phải dùng VBA em cũng chịu mất híc.

Công thức cũng có thể làm được, nhưng lại thêm phần lọc duy nhất vào thì chắc.. đuối luôn
Duy nhất ở đây nghĩa là: số 3 lập lại 2 lần nhưng chỉ tính có 1 (chỉ ghép 1 lần)
Nếu dùng VBA thì hoàn toàn không có vấn đề ---> Bạn đồng ý, kêu Quang Hải giúp cho (dạo này đại ca vô địch về Dictionary còn gì)
Ẹc... Ẹc...
 
Vâng, vậy ta có thể ghép số dạng như trong file này em gửi được không vậy?
Ta tách thành 3 CELL để ghép.
Ta lấy giá trị của từng chuỗi số ghép với nhau của CELL D2:F2
Ví dụ: Giá trị ta cho vào
D2 E2 F2
227 816 805
Lọc chuỗi số cho H2 đến BD2
22 27 28 21 26 20 25 Tiếp đến(Vì số 2 có rồi nên bỏ qua) ta lại ghép 77 78 71 76 (Vì 78 có rồi nên ta bỏ qua) 70 75 lại tới 88 82 87 81 86 80 85 cứ như thế tới BD2
Như vạy có được không đại ca.
 

File đính kèm

Công thức cũng có thể làm được, nhưng lại thêm phần lọc duy nhất vào thì chắc.. đuối luôn
Duy nhất ở đây nghĩa là: số 3 lập lại 2 lần nhưng chỉ tính có 1 (chỉ ghép 1 lần)
Nếu dùng VBA thì hoàn toàn không có vấn đề ---> Bạn đồng ý, kêu Quang Hải giúp cho (dạo này đại ca vô địch về Dictionary còn gì)
Ẹc... Ẹc...
Hic bài này em nuốt không trôi đâu đại ca ơi. Nội suy em chịu không nổi.
 
Tôi làm cho bạn bằng công thức với kiểu File đầu tiên 716-207-133, nhưng chuyển sang cột nhé
Trong File có sử dụng công thức:
Name dl
=IF(MID(Sheet1!$C$2,ROW(INDIRECT("1:"&LEN(Sheet1!$C$2))),1)<>"-",MID(Sheet1!$C$2,ROW(INDIRECT("1:"&LEN(Sheet1!$C$2))),1)*1,"")
Công thức tổ hợp
=SMALL(dl,ROUNDUP(ROW(1:1)/COUNT(dl),0))&SMALL(dl,ROUNDUP(ROW(1:1)/COUNT(dl),0)*COUNT(dl)-ROW(1:1)+1)
Công thức trính lọc (dạng chuỗi)
=INDEX($C$3:$C$83,SMALL(IF(FREQUENCY($C$3:$C$83*1,$C$3:$C$83*1),ROW(INDIRECT("1:"&ROWS($C$3:$C$83))),""),ROW(1:1)))
Bạn tham khảo File đính kèm
 

File đính kèm

Hic bài này em nuốt không trôi đâu đại ca ơi. Nội suy em chịu không nổi.

Chỉ là bài toán tổ hợp thôi mà Quang Hải (đâu phải nội suy gì chứ)
Ví dụ:
- Đầu vào là ABC
- Kết quả ghép là: AA, AB, AC, BA, BB, BC, CA, CB, CC
- Trong dảy kết quả trên, nếu có trùng thì loại bỏ (unique)
Vậy thôi
 
Tôi làm cho bạn bằng công thức với kiểu File đầu tiên 716-207-133, nhưng chuyển sang cột nhé
Trong File có sử dụng công thức:
Name dl

Công thức tổ hợp

Công thức trính lọc (dạng chuỗi)

Bạn tham khảo File đính kèm

Cảm ơn bác nhiều, nhưng em đọc file của bác hình như không hiểu ạ. Em cũng không biết cách chuyển sao cho (Đáp án từ cột dọc sang cột ngang) Híc.
Tại em mù tịt về nó nên mới vào hỏi ạ.
Thanks bác nhiều.
 
Chỉ là bài toán tổ hợp thôi mà Quang Hải (đâu phải nội suy gì chứ)
Ví dụ:
- Đầu vào là ABC
- Kết quả ghép là: AA, AB, AC, BA, BB, BC, CA, CB, CC
- Trong dảy kết quả trên, nếu có trùng thì loại bỏ (unique)
Vậy thôi
Dạ đúng rồi đó ạ, đó là đáp án mà em muốn nhờ mọi người giúp đỡ đó ạ.
 
Vì mình muốn mỗi lập cập nhật dữ liệu vào B & C sẽ có đáp án bên E:AN
 
Chỉ là bài toán tổ hợp thôi mà Quang Hải (đâu phải nội suy gì chứ)
Ví dụ:
- Đầu vào là ABC
- Kết quả ghép là: AA, AB, AC, BA, BB, BC, CA, CB, CC
- Trong dảy kết quả trên, nếu có trùng thì loại bỏ (unique)
Vậy thôi

Em biết thuật toán của mình chưa đủ để xơi bài này mà anh gọi em lên trả bài. Cũng ác thiêt đó. Nếu trúng thì tốt, nếu tác giả la lên chưa trúng thì anh hỗ trợ sửa giúp em nha.

PHP:
Sub test()
Dim chuoi As String, kq(1 To 10000), i As Long, j As Long, tam As Variant, kqtam As Variant
chuoi = [D2] & [E2] & [F2]
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "\B"
   tam = .Replace(chuoi, ",")
End With
kqtam = Split(tam, ",")
With CreateObject("scripting.dictionary")
   For i = 0 To UBound(kqtam)
      For j = 0 To UBound(kqtam)
         If Not .exists(kqtam(i) & kqtam(j)) Then .Add kqtam(i) & kqtam(j), ""
      Next
   Next
   [H3].Resize(, .Count).NumberFormat = "@"
   [H3].Resize(, .Count) = .keys
End With
End Sub
 

File đính kèm

Em biết thuật toán của mình chưa đủ để xơi bài này mà anh gọi em lên trả bài. Cũng ác thiêt đó. Nếu trúng thì tốt, nếu tác giả la lên chưa trúng thì anh hỗ trợ sửa giúp em nha.

PHP:
Sub test()
Dim chuoi As String, kq(1 To 10000), i As Long, j As Long, tam As Variant, kqtam As Variant
chuoi = [D2] & [E2] & [F2]
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "\B"
   tam = .Replace(chuoi, ",")
End With
kqtam = Split(tam, ",")
With CreateObject("scripting.dictionary")
   For i = 0 To UBound(kqtam)
      For j = 0 To UBound(kqtam)
         If Not .exists(kqtam(i) & kqtam(j)) Then .Add kqtam(i) & kqtam(j), ""
      Next
   Next
   [H3].Resize(, .Count).NumberFormat = "@"
   [H3].Resize(, .Count) = .keys
End With
End Sub

Dạ cảm ơn bác đã quan tâm. Em đã load file bác về nhưng em không thấy có Hàm nào cả :(
 
Dạ cảm ơn bác đã quan tâm. Em đã load file bác về nhưng em không thấy có Hàm nào cả :(
Thì bài 17 là xài hàm đó, bài mình viêt bằng code mà hàm gì chứ. Nghiên cưu cách chay code trong file nhé. Nếu kết quả chưa trúng thì thế nào cũng có người hỗ trợ vì mình đã khởi động phương án cho bài toán của bạn rồi.
 
Cảm ơn bác nhiều, nhưng em đọc file của bác hình như không hiểu ạ. Em cũng không biết cách chuyển sao cho (Đáp án từ cột dọc sang cột ngang) Híc.
Tại em mù tịt về nó nên mới vào hỏi ạ.
Thanks bác nhiều.
Mục đích của bạn là làm sao tách được ra các tổ hợp, vậy tôi để dang cột bạn chỉ cần thay các giá trị vào dữ liệu là có kết quả, công thức thì kéo sang bên, nếu muốn sang mảng ngang thì bạn copy > Paste special > chọn Value + Transpose là được.
Thân!
 
Chỉ là bài toán tổ hợp thôi mà Quang Hải (đâu phải nội suy gì chứ)
Ví dụ:
- Đầu vào là ABC
- Kết quả ghép là: AA, AB, AC, BA, BB, BC, CA, CB, CC
- Trong dảy kết quả trên, nếu có trùng thì loại bỏ (unique)
Vậy thôi
Theo như sư phụ mô tả thì đây là bài toán chỉnh hợp chứ nhỉ? Cụ thể là chỉnh hợp lặp chập 2 của 3 phần tử, số phần tử tạo ra chính là 3^2 = 9 phần tử. Nếu là ABCD thì kết quả sẽ là 4^2 = 16 phần tử.

Thuật toán có phải thế này ạ:
- Dùng MID để tách ABC thành 3 phần tử A,B,C nạp vào 2 mảng Arr1(A,B,C) và Arr2(A,B,C)
- Dùng 2 vòng FOR lồng nhau để quét qua các ký tự này và ghép lần lượt chúng lại.

Em cũng chỉ dám nghĩ chứ cũng chưa hình dung ghép được thì nạp vào DIC thế nào, hic hic
 
Các bác xem lại giúp em file em mới gửi lên.
Chọn ô C2 hoặc C3 (hoặc ô nào muốn tách) rồi bấm nút. Cái vụ tô màu chưa tính.
PHP:
Public Sub GPE()
Dim Rng As Range, Arr(), I As Long, J As Long, L As Long, K As Long, Dic As Object, Tem As Variant
Set Dic = CreateObject("Scripting.Dictionary")
Set Rng = Selection
ReDim Arr(1 To 1, 1 To Len(Rng) ^ 2)
L = Len(Rng)
For I = 1 To L
    If Mid(Rng, I, 1) <> "-" Then
    For J = 1 To L
        If Mid(Rng, J, 1) <> "-" Then
            Tem = Mid(Rng, I, 1) & Mid(Rng, J, 1)
            If Not Dic.exists(Tem) Then
                K = K + 1
                Dic.Add Tem, ""
                Arr(1, K) = Tem
            End If
        End If
    Next J
    End If
Next I
Selection.Offset(, 1).Resize(, L ^ 2).ClearContents
Selection.Offset(, 1).Resize(, K).Value = Arr
Set Dic = Nothing
End Sub
 

File đính kèm

Vâng, vậy ta có thể ghép số dạng như trong file này em gửi được không vậy?
Ta tách thành 3 CELL để ghép.
Ta lấy giá trị của từng chuỗi số ghép với nhau của CELL D2:F2
Ví dụ: Giá trị ta cho vào
D2 E2 F2
227 816 805
Lọc chuỗi số cho H2 đến BD2
22 27 28 21 26 20 25 Tiếp đến(Vì số 2 có rồi nên bỏ qua) ta lại ghép 77 78 71 76 (Vì 78 có rồi nên ta bỏ qua) 70 75 lại tới 88 82 87 81 86 80 85 cứ như thế tới BD2
Như vạy có được không đại ca.

thay cac bac thay viet code kinh qua, ko biet bai minh don gian vay co dat yeu cau ko
 

File đính kèm

Lần chỉnh sửa cuối:
Thôi thì hứng lên làm thử bằng công thức cái coi
1> Đặt name
Mã:
tmp =IF(COUNTIF($D$2,"*"&ROW($1:$10)-1&"*"),ROW($1:$10)-1,"")
Mã:
UniqueNum =SMALL(tmp,ROW(INDIRECT("1:"&COUNT(tmp))))
2> Công thức liệt kê
Mã:
=IF(INT((COLUMNS($A:A)-1)/COUNT(tmp))+1>COUNT(tmp),"",INDEX(UniqueNum,INT((COLUMNS($A:A)-1)/COUNT(tmp))+1)&INDEX(UniqueNum,MOD((COLUMNS($A:A)-1),COUNT(tmp))+1))
Kéo fill sang phải
Đề xuất dữ liệu đầu vào nhập vào 1 cell chứ không nên cho riêng 3 cell (ví dụ thế này 227-816-805)
---------------
Nói thêm: Với thuật toán tôi vừa nêu ở trên, nếu triển khai bằng VBA code thì thậm chỉ không cần Dictionary và RegExp vẫn chơi được tuốt ---> Các bạn làm thử xem
 

File đính kèm

Lần chỉnh sửa cuối:
Em thử làm cách này thì không cần tới các Object.
Mã:
Sub Tohop()
Dim i, j As Integer, Arr, Kq As String, Chuoi As String, TmpChuoi as String

TmpChuoi = [D3] & [E3] & [F3]
For i = 1 To Len(TmpChuoi)
    If IsNumeric(Mid(TmpChuoi, i, 1)) Then Chuoi = Chuoi & Mid(TmpChuoi, i, 1)
Next
For i = 1 To Len(Chuoi)
    For j = 1 To Len(Chuoi)
        If i <> j And InStr(1, Kq, Mid(Chuoi, i, 1) & Mid(Chuoi, j, 1)) = 0 Then
            Kq = Kq & Mid(Chuoi, i, 1) & Mid(Chuoi, j, 1) & ","        
       End If    
   Next
Next

Arr = Split(Kq, ",")
Range("h3", Range("h3").End(xlToRight)).ClearContents
[H3].Resize(, UBound(Arr)) = Arr

End Sub
 
Lần chỉnh sửa cuối:
Cảm ơn các bác nhiều ạ..
Chắc tại em không biết hỏi nên thế.. Dù sao cũng thật cảm ơn mọi người đã nhiệt tình..
 
Dạ đúng rồi bác ạ.. Cảm ơn mọi người đã giúp đỡ ạ
 
Chọn ô C2 hoặc C3 (hoặc ô nào muốn tách) rồi bấm nút. Cái vụ tô màu chưa tính.
PHP:
Public Sub GPE()
Dim Rng As Range, Arr(), I As Long, J As Long, L As Long, K As Long, Dic As Object, Tem As Variant
Set Dic = CreateObject("Scripting.Dictionary")
Set Rng = Selection
ReDim Arr(1 To 1, 1 To Len(Rng) ^ 2)
L = Len(Rng)
For I = 1 To L
    If Mid(Rng, I, 1) <> "-" Then
    For J = 1 To L
        If Mid(Rng, J, 1) <> "-" Then
            Tem = Mid(Rng, I, 1) & Mid(Rng, J, 1)
            If Not Dic.exists(Tem) Then
                K = K + 1
                Dic.Add Tem, ""
                Arr(1, K) = Tem
            End If
        End If
    Next J
    End If
Next I
Selection.Offset(, 1).Resize(, L ^ 2).ClearContents
Selection.Offset(, 1).Resize(, K).Value = Arr
Set Dic = Nothing
End Sub

Như Code của bác có thể cho Marco chạy nhiều Cell 1 lúc không vậy? Ví dụ mình có nhiều dữ liệu trong C:C và muốn chạy 1 lượt..
 

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

Back
Top Bottom