プロが教えるわが家の防犯対策術!

複数セルにまたがって書かれたテキストを結合して、
別のシートにコピーしようとしています。

単に結合&コピーならいいのですが、
セルごとに設定された書式を保持したままコピーする術が分かりません。
例)セル内に abcd"EFG" という文字があった場合、
  "EFG"の部分だけ太字&下線

複数セルの書式付きテキストを結合する場合、
記憶させる変数は何かしらのオブジェクト変数になるでしょうか。

そもそもこんなこと可能なんでしょうか。

A 回答 (2件)

>そもそもこんなこと可能なんでしょうか。



可能だと言えば可能ですが、質問者さんはどんなイメージを持っているのでしょうか。たぶん結合する範囲を選択して、それで、ボタンを押して、連結した時に、色などの書式が反映されているということになるのでしょうか。しょせん、マクロ自体は、人のやることをコード化したものだと考えると、無理なことは無理なのです。

しかし、例えば、書式のみで成立する日付などは、テキスト化しないといけません。そういう所までを、是非とも、ご自身でも考えていただきたいと、個人的には思うのです。

もうここらへんまで来ると、Excelの仕様に関わってくるので、それはもう、私個人としては、Q&Aという意義がなくなってしまうと思っています。


以下は、一例として考えてみました。(フォントのプロパティをすべて入れてはいません)

これは、また、その後に、QATのボタンにするのが一般的かとは思います。出来上がったものをコピーにまでは入れられますが、手動でペーストにすることになります。結合した所を元に戻すには、元に戻すマクロが必要になります。


'//
Private Type FontForm
'色・書体・フォント・フォントサイズ・下線・取り消し線
iColor As Long
bBold As Boolean
sFontName As String
iFontSize As Single
bUnderline As Boolean
bStrike As Boolean
End Type
Sub formatMerge()
 Dim Rng As Range
 Dim mFormat() As FontForm
 Dim c As Range
 Dim i As Long, j As Long
 Dim mTxt
 If TypeName(Selection) <> "Range" Then Exit Sub
 Set Rng = Selection
 If Rng.Cells.Count = 1 Then Exit Sub
 If Rng.MergeCells Then
  Rng.MergeCells = False
  Exit Sub
 End If
 ReDim mFormat(Rng.Cells.Count - 1)
 ReDim mTxt(Rng.Cells.Count - 1)
 For Each c In Rng.Cells
  mTxt(i) = Trim(c.Text)
  With mFormat(i)
   .bBold = c.Font.Bold
   .iColor = c.Font.Color
   .iFontSize = c.Font.Size
  End With
  i = i + 1
 Next c
 Rng.ClearContents
 Rng.ClearFormats
 Rng.Merge
 With Rng
  .Cells(1).Value = Join(mTxt, "")
  .HorizontalAlignment = xlCenter
  .VerticalAlignment = xlVAlignTop
  .WrapText = False
  .Orientation = 0
  .AddIndent = False
  j = 1
  For i = 0 To UBound(mTxt)
   With .Characters(j, Len(mTxt(i))).Font
    .Color = mFormat(i).iColor
    .Size = mFormat(i).iFontSize
    .Bold = mFormat(i).bBold
   End With
   j = j + Len(mTxt(i))
  Next i
   Rng(1).MergeArea.Copy
 End With
End Sub
    • good
    • 0
この回答へのお礼

ご提示いただいたサンプルコードを参考に、なんとか実現する事が出来そうです。
> 結合する範囲を選択して、それで、ボタンを押して、連結した時に、色などの書式が反映されているということになるのでしょうか。
そのとおりです。

難しかったですが、実現のめどは立ちました。
※Charactersを使うと処理速度が異常に遅くなるようですが、致し方ないですね・・

出来る限り高速化を考えますが、望みは薄そうですね。

ありがとうございます。

お礼日時:2016/11/11 15:48

一応確認ですが、下図のようなにB2セルは標準、Cセルは太字&下線これをコピーして、B4セルとC4セルと結合したところに、それぞれの書式を持ったまま貼り付けたいということですか?


それならば可能ですけど、セル数が増えると面倒かもしれません。
「Excel VBA セル内に設定されたテ」の回答画像1
    • good
    • 0
この回答へのお礼

おっしゃったようなケースもありますが、はじめからB4セルのようなものもあります。
イメージとしてはB2、C2、B4を結合したいという感じです。

お礼日時:2016/11/10 13:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています