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
これにより、宛先セルのセル書式が最初の行の最後のセルに一時的に保持され、ソースがすべての書式でコピーされ、書式が一時セルに貼り付けられ、最後に、保持されている全体的なフォントとサイズもコピーされます (これは私のソースからコピーしたくない場合)。最後に、一時セルがクリアされるため、ワークシートの寸法には影響しません。
特にクリップボードに依存しているため、これは不完全なソリューションですが、パフォーマンスは良好で、必要なことを実行します。