0

私はスプレッドシートで作業していますが、基本的に、以前に保存した特定の範囲の末尾にテキストを少し追加したいと考えています。フォーラムを検索したところ、あらゆる種類の結果が得られると思われるさまざまな手法に出くわしました。

次のコードを使用しました。

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

これにより、範囲内の各セルの末尾にテキストが 1 つずつ追加されますが、スプレッドシートには 11k の適切なレコードがあるため、これには時間がかかります。私が取ることができるショートカットはありますか?値のコピーと貼り付けとして allsorts を試しました。隣の列にテキストを少し貼り付けてから、マージして時間を節約できますか?

皆さん、私に何ができるか考えているかどうか疑問に思っています..私にとって、各行を検索することは非常に非効率的である可能性があります. 前と同じように、範囲を使用したスト​​レート コピー ペーストで時間を節約できました。特定の列または範囲で挿入を使用して、すべてのインスタンスをすぐに調整する特別な方法があるのではないでしょうか?

4

1 に答える 1

0

これは vba ですが、C# に変換するのはかなり簡単です。

私はあなたの質問に答えてこれを書きました。約 16000 セルの更新を使用testitし、約 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

警告: これで計算に使用されるフィールドを更新すると、計算が壊れます。

于 2012-07-23T18:24:18.553 に答える