6

VBA を使用して、あるセルの値を別のセルにコピーしています。

Dim s As Range
Dim d As Range
Set s = Range("A1")
Set d = Range("B2")
d.Value = s.Value

これは正常に機能しますが、ソースにリッチ テキスト形式が含まれている場合、その形式は失われます。

セル全体、フォーマット、およびすべてをコピーできます。

s.Copy d

ただし、これはリッチテキストの書式設定だけでなく、セルのグローバルな書式設定 (背景色、境界線など)ももたらします。太字です)。

また、各文字の形式をコピーしてみました。

For ci = 1 to Len(sourcevalue)
   d.Characters(ci, 1).Font.Bold = s.Characters(ci, 1).Font.Bold
Next

上記の実際のコードには斜体や下線などが含まれており、速度を上げるために Characters() をオブジェクトとしてキャッシュしていますが、それでも本番環境で使用するにはパフォーマンスがすぎます。

私が考えることができる最後のオプションは、セルを書式設定してコピーし、背景色またはパターン、境界線、フォント名/サイズなどの変更を元に戻すことです。

bg = d.Interior.ColorIndex
s.Copy d
d.Interior.ColorIndex = bg

これはまだぎこちないように思えます。すべてのフォーマットを保存して再適用するのは難しいです。太字やイタリック体など、セルまたは文字レベルで適用できるフォーマットを消去せずに「元に戻す」ことはできません。キャラクターレベルの設定。

そこに他のオプションはありますか?Excel OpenOfficeXML ファイルの書式設定は文字の範囲で保存されますが、少なくとも私が見つける限り、これらの書式設定された範囲は API 経由で利用できるようには見えません。

編集:以下の KazJaw のアプローチを使用して、次のコードで必要なものを取得できました。

Dim TmpFormat As Range
Set TmpFormat = Range("$XFD$1")
Dest.Copy
TmpFormat.PasteSpecial xlPasteFormats
Source.Copy
Dest.PasteSpecial xlPasteAll
TmpFormat.Copy
Dest.PasteSpecial xlPasteFormats
Dest.Font.Name = TmpFormat.Font.Name
Dest.Font.Size = TmpFormat.Font.Size
TmpFormat.ClearFormats

これにより、宛先セルのセル書式が最初の行の最後のセルに一時的に保持され、ソースがすべての書式でコピーされ、書式が一時セルに貼り付けられ、最後に、保持されている全体的なフォントとサイズもコピーされます (これは私のソースからコピーしたくない場合)。最後に、一時セルがクリアされるため、ワークシートの寸法には影響しません。

特にクリップボードに依存しているため、これは不完全なソリューションですが、パフォーマンスは良好で、必要なことを実行します。

4

2 に答える 2

4

Range.ValueオプションのRangeValueDataTypeパラメーターがあります (11 はxlRangeValueXMLSpreadsheet):

 Range("B2").Value(11) = Range("A1").Value(11) 
于 2016-09-14T20:18:48.927 に答える