2017-04-11 54 views
2

我有一個包含這樣的字符串列:交換2個字符

ABCDEFG 
ACDEF 
ACDEFG 
ACFG 
ACDEFG 

我想換2個字符的數量的字符串包含這些字符。行是隨機選擇的。例如,我需要在3行中交換A和C(行隨機選擇)。預期的輸出是:

CBADEFG 
CADEF 
ACDEFG 
ACFG 
CADEFG 
+0

你除了1和1c更多 - 即你需要限制更換單掉呢? – brettdj

回答

2

VBA方法是:

  • randomises行選擇(50/50)
  • 檢查兩個 「A」 和 「C」 字符存在預交換
  • 交換第一次出現只有

    enter image description here

代碼

Sub ACDC() 
Randomize 
Dim X 
Dim lngCnt As Long 
Dim strIn As String 
Dim strOut As String 

strIn = "A" 
strOut = "C" 
X = Range([a1], Cells(Rows.Count, "A").End(xlUp)).Value2 

For lngCnt = 1 To UBound(X) 
    If Rnd() > 0.5 Then 
    'check for both conditions 
     If InStr(X(lngCnt, 1), strIn) Then 
      If InStr(X(lngCnt, 1), strOut) Then 
       X(lngCnt, 1) = Replace(X(lngCnt, 1), strIn, "|", , 1) 
       X(lngCnt, 1) = Replace(X(lngCnt, 1), strOut, strIn, , 1) 
       X(lngCnt, 1) = Replace(X(lngCnt, 1), "|", strOut, , 1) 
      End If 
     End If 
    End If 
Next 

[b1].Resize(lngCnt - 1, 1).Value2 = X 

End Sub 
+0

您能否告訴我如何交換記錄的百分比而不是交換2行?假設我們想要隨機交換包含A和C的20%的記錄中的A和C. – kgk

+1

@kgk替換'如果Rnd()> 0.5然後'如果Rnd()> 0.8然後' – brettdj

+1

我注意到我上面的代碼應該替換50%的行(當運行很多次時)。對於單次運行,在5個單元上,很可能會更新2或3(儘管0和5是可能的,但不太可能) – brettdj

2

假設你的字符串是在A2:A6和行號的標準是E1中:G1,那就試試這個...

在B2

=IF(ISNUMBER(MATCH(ROWS(A$2:A2),$E$1:$G$1,0)),SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"C","^"),"A","C"),"^","A"),A2) 

和把它複製下來。 enter image description here