2012-07-23 2 views
0

스프레드 시트로 작업하고 있으며 본질적으로 이전에 저장 한 주어진 범위의 끝 부분에 약간의 텍스트를 추가하려고합니다. 나는 포럼을 수색하여 모든 종류의 결과를 얻는 것처럼 보이는 다양한 기술을 접하게되었습니다. 이 잠시 소요 내 스프레드 시트에서 좋은 11K 기록이 있기 때문에지정된 열 범위 내의 모든 셀에 문자열을 어떻게 추가합니까?

foreach (Excel.Range row in MyGivenRange.Rows) 
{ 
    Excel.Range cell = (Excel.Range)row.Cells[1, 1]; 
    cell.Value += "Add this text"; 
}   

이 그러나 하나의 범위 한에서 각 셀의 끝에 텍스트를 추가합니다 :

나는 다음과 같은 코드를 사용했다. 걸릴 수있는 단축키가 있습니까? 복사 및 붙여 넣기 값으로 allsorts 시도했다. 빨리 그 옆에있는 열에 약간의 텍스트를 붙여 넣은 다음 병합하여 시간을 절약 할 수 있습니까?

혹시 내가 할 수있는 아이디어가 있다면 궁금합니다. 각 행을 검색하면서 나에게 비효율적 일 수 있습니다. 이전과 같이 범위를 사용하여 연속 복사 붙여 넣기를 사용하면 시간이 절약되었습니다. 어쩌면 모든 인스턴스를 즉시 조정하는 특정 열이나 범위에서 삽입을 사용하는 특별한 방법이 있을까요?

답변

0

이것은 vba이지만 C#으로 변환하는 것이 매우 쉽습니다.

귀하의 질문에 대한 답변으로 작성했습니다. testit을 사용하면 약 16000 개의 셀이 업데이트되고 약 6 초가 걸립니다. 기본 개념은 Excel 수식을 배열로 복사하고 배열을 업데이트 한 다음 배열을 수식으로 다시 Excel에 붙여 넣는 것입니다.

Sub testit() 
appendTextToRange "A1:D4000", "hey there" 
End Sub 

Sub appendTextToRange(rngAddress As String, append As String) 
Dim arr() As Variant, c As Variant 
arr = Range(rngAddress).Formula 
For x = LBound(arr, 1) To UBound(arr, 1) 
    For y = LBound(arr, 2) To UBound(arr, 2) 
     Debug.Print arr(x, y) 
     If arr(x, y) = "" Then 
      arr(x, y) = append 
     ElseIf Left(arr(x, y), 1) = "=" Then 
      arr(x, y) = arr(x, y) & " & "" " & append & """" 
     Else 
      arr(x, y) = arr(x, y) & " " & append 
     End If 
    Next 
Next 
Range(rngAddress).Formula = arr 
End Sub 

경고 : 계산에 사용 된 필드를 업데이트하면 계산이 중단됩니다.

+0

나는이 접근 방식에 대해 생각해 보지 못했다. 나는 당신이 성관계를 통해 어떻게 돌아가는지 계속 업데이트 할 것입니다. 나는 일종의 빠른 덤프를 주로 찾고 있었고, 덤프 메소드를 변경했다. 아마도 이것으로 충분할 것이다. 다행히도 vba와 C# 사이의 Excel 기능은 매우 유사합니다. – SamAPOC

관련 문제