在string中交换2个字符

我有一个包含这样的string的列:

ABCDEFG ACDEF ACDEFG ACFG ACDEFG 

我想交换一个string中的2个字符包含这些字符。 行是随机select的。 例如,我需要交换3行中的A和C(行随机select)。 预期产出是:

 CBADEFG CADEF ACDEFG ACFG CADEFG 

VBA的做法是:

  • 随机select行(50/50)
  • 检查存在预交换的“A”和“C”字符
  • 只交换第一次出现

    在这里输入图像描述

 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 

假设你的string在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) 

并把它复制下来。 在这里输入图像说明