2017-04-11 1 views
2

나는이 같은 문자열을 포함하는 열이. 행은 무작위로 선택됩니다. 예를 들어, A와 C를 3 행으로 바꿔야합니다 (행은 무작위로 선택됩니다). 예상 출력은 다음과 같습니다스왑이 문자는

CBADEFG 
CADEF 
ACDEFG 
ACFG 
CADEFG 
+0

당신이 1 A 1 C 이상이 있습니까 - 즉, 당신이 하나의 스왑 교체를 제한해야합니까? – brettdj

답변

2
것을

VBA 방법 :

  • 이 행 선택 (50/50)
  • 체크 "A"모두와 "C"자 스왑 미리
  • 스왑 최초로 출현 존재 randomises 단지

    enter image description here

012 3,516,

코드

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

관련 문제