Làm xáo trộn vị trí

  • Thread starter Thread starter Hamvui
  • Ngày gửi Ngày gửi
Liên hệ QC

Hamvui

Thành viên hoạt động
Tham gia
26/9/06
Bài viết
165
Được thích
214
Nghề nghiệp
Worker
Các anh chị cho hỏi có 1 cột dữ liệu. Làm cách nào ta copy cột dữ liệu đó sang cột khác nhưng làm xáo trộn dữ liệu đi (làm thay đổi vị trí nhưng dữ liệu vẫn như cũ) ???
 
Để làm cái này thì phải dùng VBA thôi chứ excel máy móc lắm, A1 -> B1,An-> Bn
không xáo trộn được.
 
Vấn đề này hay đấy, mời các cao thủ cho ý kiến nhé.
 
Vấn đề xáo trộn ở đây là hoán đổi ngẫu nhiên hay hoán đổi theo 1 lôgic
 
??? đưa DL ngẫu nhiên

Theo đề tài này, các bạn nghiên cứu giúp thêm như sau:
ta có các số từ 1-50 và ta đưa các số liệu này vào 4 dòng và 4 cột = 16 cell
đưa ngẫu nhiên và các cell không có dl trùng nhau, có 50 dl mà chỉ đưa vào 16 cell, còn 34 dl thì bỏ (không cần có quy luật nào)
 
Sorry! tôi đã tìm ra Sub này trên GPE, do bạn Skyonline đưa lên trong trang tổng hợp từ PC World. Lần sau tôi sẽ tìm trước và hỏi sau. Cám ơn Skyonline và nhờ bạn làm thêm phần Index
 
Vận dụng Sub CreateRandom()
Sub này trên GPE, do bạn Skyonline đưa lên trong trang tổng hợp từ PC World

 
Lần chỉnh sửa cuối:
Chào bạn ThuNghi, mình cũng đang tìm cách để làm việc hoán đổi dữ liệu 1 cách ngẫu nhiên trong 1 cột này. Bạn có thể cho mình đường dẫn đến bài viết này không? Mình không tìm ra trong GPE. Thanks bạn nhiều nha!. Ban có thể gởi mail cho mình la anh79_ct@yahoo.com
 
Mình vừa nghĩ ra 1 cách như sau:

(*) Trên trang tính tại cột kề với dữ liều nguồn ta lập hàm RAND() ;
Sau đó biến nó thành dữ liệu bằng cách Copy & paste special - Value
Xếp 2 cột này theo cột số ngẫu
Copy đến cột đích là được.

(*) Nếu anh79_ct cần code thì báo mình biết nha!

Chờ tin bạn!
 
Lần chỉnh sửa cuối:
(*) Trên trang tính tại cột kề với dữ liều nguồn ta lập hàm RAND() ;
Sau đó biến nó thành dữ liệu bằng cách Copy & paste special - Value
Xếp 2 cột này theo cột số ngẫu
Copy đến cột đích là được.

(*) Nếu anh79_ct cần code thì báo mình biết nha!

Chờ tin bạn!
Có thể bỏ qua công đoạn em tô đỏ cũng chẳng có vấn đề gì sư phụ à!
 
Đúng là không sai, nhưng dễ bị théc méc lắm mà!

Có thể bỏ qua công đoạn em tô đỏ cũng chẳng có vấn đề gì sư phụ à!
|Nguon|RAND()||Dich
|97|0.049993||
|73|0.552762||
|85|0.986271||
|49|0.986325||
|13|0.33388||
|1|0.751099||
|25|0.409047||
|61|0.820274||
|37|0.5422158||

Ta thì bảo xếp rồi, được rứa; Nhưng dễ bị bẽ là xếp đâu, cột mô hè?
 
Cám ơn các bạn nhiều nha, nhưng mình thật sự không hiểu cách làm này nên không thực hiện được. Ý mình là chẳng hạn mình có 1 số con số nằm trong cell theo cột: 5, 16, 21, 95. Mình muốn đảo vị trí các cell này 1 cách ngẫu nhiên cũng vẫn giữ theo cột chẳng hạn như: 21, 95, 16, 5, .... Nếu có code tạo VB thì bạn gởi cho mình càng tốt, và hướng dẫn mình tạo add-in trong đó. Thanks các bạn nhiều nha!
 
Bạn thử nghiệm với file này

PHP:
Option Explicit
Sub XaoCot()
 Dim Color_ As Byte
 
 With [B1].Interior
   If .ColorIndex < 34 Or .ColorIndex > 41 Then Color_ = 34 Else Color_ = .ColorIndex
 End With
 If Color_ < 34 Or Color_ > 41 Then Color_ = 35
 Columns("A:A").Insert Shift:=xlToRight
 [B1].Value = "RAND":            [B2].FormulaR1C1 = "=RAND()"
 [B2].AutoFill Destination:=Range("B2:B" & [C65500].End(xlUp).Row), Type:=xlFillDefault
 Columns("B:C").Sort Key1:=[B2], Order1:=xlDescending, Header:=xlGuess, _
   OrderCustom:=1
 Columns("B:B").Delete
 [B1].Interior.ColorIndex = 1 + Color_
End Sub
 

File đính kèm

sao không đưa vào thành add-in được bác?
 
Bạn thử nghiệm với file này

PHP:
Option Explicit
Sub XaoCot()
Dim Color_ As Byte

With [B1].Interior
   If .ColorIndex < 34 Or .ColorIndex > 41 Then Color_ = 34 Else Color_ = .ColorIndex
End With
If Color_ < 34 Or Color_ > 41 Then Color_ = 35
Columns("A:A").Insert Shift:=xlToRight
[B1].Value = "RAND":            [B2].FormulaR1C1 = "=RAND()"
[B2].AutoFill Destination:=Range("B2:B" & [C65500].End(xlUp).Row), Type:=xlFillDefault
Columns("B:C").Sort Key1:=[B2], Order1:=xlDescending, Header:=xlGuess, _
   OrderCustom:=1
Columns("B:B").Delete
[B1].Interior.ColorIndex = 1 + Color_
End Sub
bác ơi code này dùng cho 1 cột, bác có thể thay đổi để dùng trong 1 vùng không, em cảm ơn ạ
 
Thì cách dễ mà ai cũng nghĩ ra là: Bạn thêm bước ghi hết dữ liệu vùng đó lên 1 cột trống nào đó & tiếp tục thôi.

:D
 
dạ, do mới học em chưa hiểu ý bác ntn ạ. dữ liệu của em có 90 hàng và 250 cột gồm cả chữ và số bác ạ
Ông bà xưa có câu "Trăm nghe không bằng một thấy".
Nghe bạn nêu vấn đề chứ có thấy cái gì đâu?
Ít ra bạn cũng nên đính kèm File với 1 sheet có dữ liệu của 90 hàng và 250 cột (có chữ và số).
Muốn làm thế nào thì có 1 sheet kết quả để người giúp họ nghía xem có hiểu hay không rồi mới tính đến chuyện giúp.
Nếu không hiểu mà giúp bừa thì lại phát sinh thế này:
- Anh không hiểu ý em rồi.
- Anh ơi em muốn thế này.
- Anh ơi em muốn thế kia.
- Anh ơi em phát sinh thêm cái này.
........v....v.............

Rút kinh nghiệm bài viết này (cầm đèn chạy trước ô tô), bị dí chạy thục mạng, đây là link bài viết:

Các bạn cho mình hỏi làm sao xóa được số trùng nhau
 
Ông bà xưa có câu "Trăm nghe không bằng một thấy".
Nghe bạn nêu vấn đề chứ có thấy cái gì đâu?
Ít ra bạn cũng nên đính kèm File với 1 sheet có dữ liệu của 90 hàng và 250 cột (có chữ và số).
Muốn làm thế nào thì có 1 sheet kết quả để người giúp họ nghía xem có hiểu hay không rồi mới tính đến chuyện giúp.
Nếu không hiểu mà giúp bừa thì lại phát sinh thế này:
- Anh không hiểu ý em rồi.
- Anh ơi em muốn thế này.
- Anh ơi em muốn thế kia.
- Anh ơi em phát sinh thêm cái này.
........v....v.............

Rút kinh nghiệm bài viết này (cầm đèn chạy trước ô tô), bị dí chạy thục mạng, đây là link bài viết:

Các bạn cho mình hỏi làm sao xóa được số trùng nhau
Thưa Chú ! vấn đề Cháu nhờ giúp chính là vấn đề được nêu trong topic, có file đi kèm ở đó. Thành viên SA_DQ có chỉ cho cách làm bằng code rồi Chú ah. Trên cơ sở đó cháu muốm bác ấy chỉ cách để làm trên một vùng dữ liệu, bác ấy chỉ "Thì cách dễ mà ai cũng nghĩ ra là: Bạn thêm bước ghi hết dữ liệu vùng đó lên 1 cột trống nào đó & tiếp tục thôi. ". do không hiểu nên cháu hỏi lại bác ấy thôi, còn vấn đề này chắc chắn bác SA_DQ đã rõ vấn đề Cháu nhờ rồi bạn ạ. Cháu sẽ rút kinh nghiệm.
Thân ái!
 
PHP:
Sub TraoDuLieu1Vung()
Dim Rng As Range, Cls As Range
Dim Rws As Long, Col As Integer, J As Long, W As Long
1 With Sheet1    'Gôm Du Liêu Vô Mang   '
    Set Rng = .[B2].CurrentRegion.Offset(1)
    Rws = Rng.Rows.Count:                   Col = Rng.Columns.Count
    ReDim Arr(1 To Rws * Col, 1 To 1)
    For Each Cls In Rng
        If Cls.Value <> "" Then
            W = W + 1:                              Arr(W, 1) = Cls.Value
        End If
    Next Cls
End With
2 With Sheet2
    .[B1].Value = "Rand()":                     .[C1].Value = "GPE.COM "
    .[C2].Resize(W).Value = Arr()
  
    .Range("B2").FormulaR1C1 = "=RAND()"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B" & W), Type:=xlFillDefault
    .Select
    .Columns("B:C").Select
    ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("B2:B" & W + 1) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With .Sort
        .SetRange Range("B1:C" & W + 1):    .Header = xlYes
        .MatchCase = False:                         .Orientation = xlTopToBottom
        .SortMethod = xlPinYin:                     .Apply
    End With
    Arr() = .[C2].Resize(W + 1).Value
End With
    W = 0
3 With Sheet1
    For Each Cls In Rng
        If Cls.Value <> "" Then
            W = W + 1:                  Cls.Offset(, 260).Value = Arr(W, 1)     '!!!        '
        End If
    Next Cls
  End With
End Sub
 
Web KT

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

Back
Top Bottom