1

文字列の多次元配列を使用してExcelシートを埋めようとしていますが、数式を挿入するときに問題が発生しました。次の小さなケースは、問題を示しています。

Dim tA(3, 3) As String
tA(1, 1) = "=HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "=HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "=2+5"
tA(2, 2) = "Normal Text"
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).Value = tA

このコードが評価されるとき、Excelシートはハイパーリンクを自動的に変換したり数式を評価したりしません。つまり、Excelを見ると、(2,1)のセルには、必要に応じて「7」ではなく「= 2+5」と表示されます。コマンドが存在するかどうかを確認するためにすべてのセルを評価するようにExcelに強制する方法はありますか?

個々のセルにコマンドを挿入すると、適切に評価されることに注意してください。ただし、数千のセルがあり、一度に1つずつ入力するのは数桁遅いため、これはオプションではありません。

4

2 に答える 2

4

数式が値として転送されるため、コードに次の行を追加すると、次のようになります。

worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1= worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1

完全なコードは

Dim tA(3, 3) As String
tA(1, 1) = "=HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "=HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "=2+5"
tA(2, 2) = "Normal Text"
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).Value = tA
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1= worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1
于 2012-11-02T16:54:47.933 に答える
1

...これはちょっとしたハックですが、過去にうまく使用しました...

数式の「=」を使用しない別の文字(通常は「#」を使用しますが、何でも使用できます)に置き換えてから、replaceを使用します。

コードは次のようになります。

Dim tA(3, 3) As String
tA(1, 1) = "#HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "#HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "#2+5"
tA(2, 2) = "Normal Text"
Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(4, 4)).Value= tA
Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(4, 4)).Replace "#", "="

お役に立てれば

于 2012-11-02T16:55:00.817 に答える