Bagaimana cara menemukan dan mengganti secara acak dengan laju dua nilai ganda dalam baris yang sama dengan excel?

0

Misalkan nilai 18 dan nilai 4 berada di baris yang sama tetapi nilai 4 harus hanya 70% dengan nilai 18 di semua baris data saya. Bagaimana saya bisa memperbaikinya dan mengubah hanya 30% dari nilai 4 Secara acak dengan nilai apa pun untuk semua baris yang memiliki nilai 18? Lihat gambar di bawah ini:

Sample of My Question

Andray Jamil Almakhadmeh
sumber
Apakah Anda melihat 30% per baris atau jumlah keseluruhan 30% dari 4 di mana kolom pertama adalah 18?
patkim
Ya, jumlah keseluruhan 30% dari 4 di mana kolom pertama adalah 18.
Andray Jamil Almakhadmeh
Maksud saya anggap bahwa Data saya memiliki 120 baris terdiri dari 18 dengan 4, saya ingin mengganti secara acak hanya 30% dari 4 dari baris ini dengan nilai apa pun setelah penggantian Haruskah data saya memiliki 84 baris terdiri dari 18 dengan 4.
Andray Jamil Almakhadmeh
Jadi 30% dari Row Count (di mana mungkin ada setidaknya satu 4 melawan 18) bukan hitungan 4?
patkim
Ya tentu saja .
Andray Jamil Almakhadmeh

Jawaban:

0

Berdasarkan bagaimana saya memahami pertanyaan Anda, coba kode ini dan konfirmasikan apakah ini cocok untuk Anda.

Dalam contoh ini data sampel ada di B1: F23. Angka 4 hanya diperiksa di kolom ke-3.

tekan Alt + F11 untuk mengakses VBA Editor. Dari Sisipkan Menu, masukkan Modul. Klik dua kali pada nama modul di Panel Kiri untuk mengakses Editor Kode itu. Sekarang masukkan kode makro berikut di dalamnya.

Sub Replace430()

Dim MyRange As Range
Dim RowCount As Long
Dim ColCount As Integer
Dim MyArray() As Variant

Dim i, j, k, percent30 As Long
Dim Count4 As Long
Const Replaced = 0   'Set Replaced Value
Const found = 18     'Set Find Value
Const Mycol = 3      'Correctly set the Column Number of Column in Range where 4 is to be checked
Set MyRange = Range("B2:F23")

RowCount = MyRange.Rows.Count
ColCount = MyRange.Columns.Count
'Get number of 4's againts 18
For i = 1 To RowCount
    If MyRange.Columns(1).Cells(i) = found Then
        For j = Mycol To Mycol
            If MyRange.Columns(j).Cells(i) = 4 Then
               Count4 = Count4 + 1
            End If
        Next j
    End If

Next i

ReDim MyArray(Count4 - 1, 2)
k = 0
For i = 1 To RowCount
    If MyRange.Columns(1).Cells(i) = found Then
        For j = Mycol To Mycol
            If MyRange.Columns(j).Cells(i) = 4 Then
               MyArray(k, 1) = i
               MyArray(k, 2) = j
               k = k + 1
            End If
        Next j
    End If

Next i

percent30 = 0.3 * Count4

Dim shufflearray()
ReDim shufflearray(Count4 - 1)
For i = 0 To Count4 - 1
    shufflearray(i) = i
Next i

'Shuffle the shufflearray() below


    Dim N As Long
    Dim Temp As Variant


    Randomize
    For N = LBound(shufflearray) To UBound(shufflearray)
        j = CLng(((UBound(shufflearray) - N) * Rnd) + N)

        If N <> j Then
            Temp = shufflearray(N)
            shufflearray(N) = shufflearray(j)
            shufflearray(j) = Temp
        End If
    Next N

'Use randomised values from shufflearray as array subscript to replace only 30% of 4's
For i = 0 To percent30 - 1
    MyRange.Columns(MyArray(shufflearray(i), 2)).Cells(MyArray(shufflearray(i), 1)).Value = Replaced
Next i


End Sub

Atur rentang Anda dengan benar pada pernyataan Set MyRange = Range("B2:F23") Setel nomor kolom dengan benar di Const Mycol = 3

Simpan file sebagai Buku Kerja yang Diaktifkan Makro dan dari lembar kerja tekan ALT + F8 untuk mengakses kotak dialog Macro Run. Jalankan Macro Replace430 ini ().

Uji lebih lanjut dan konfirmasi. Sesuai komentar Anda, ini mengasumsikan bahwa 4 hanya terjadi di kolom ke-3 dari rentang yang dipilih. 4's di tempat lain diabaikan untuk saat ini.

enter image description here

patkim
sumber