2017-04-11 36 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