- ベストアンサー
Excel VBA : 文字列の属性も含めて結合する方法
例えば、A1に「ABC」、A2に「DEF」と書いてあって、A3にこれらを結合して「ABCDEF」という文字列を作る場合は以下のマクロでできます。しかし、A1, A2の文字の色はコピーされません。A1が赤色であってもA3には全て黒色でコピーされてしまいます。 Sub con() Range("A3").Value = Range("A1").Text + Range("A2").Text End Sub これを文字の色やボールド、斜体、アンダーラインなども含めてコピーする方法を教えてください。よろしくお願いします。
- zuntac
- お礼率81% (307/377)
- オフィス系ソフト
- 回答数5
- ありがとう数7
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 これは、コピーされる側個々のセルは、全体単位で、ペーストされる側は、個別の書式でプロパティが写されます。 Sub CopyFont1() Dim a As Range, b As Range Dim c As Variant, k As Integer Set a = Range("A1") Set b = Range("A2") With Range("A3") .Value = a.Value & b.Value For Each c In Array(a, b) With .Characters(k + 1, Len(c.Value) + k + 1).Font .Bold = c.Font.Bold .Color = c.Font.Color .Italic = c.Font.Italic .Name = c.Font.Name .Size = c.Font.Size .Underline = c.Font.Underline End With k = k + Len(c.Value) Next End With End Sub
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17068)
(1)+や&は文字列の「値」としての面だけを注目するものです。 Textプロパティも同じです。わかっておられると思いますが、原理的なことなので、まずしっかり認識すべきです。 (2)書式を含めて、移してくれるのは、Copyですが、A1セルとA2セルのどちらを優先するのかが決まっていません、決められません。 ですから質問には答えようがない。 (3)さらに、色は黒以外を優先、斜体はイタリック優先、アンダーラインはありを優先という条件を考えているとしたら、Copyにはその条件はつけられません。A1優先なら、A1の書式をA3にコピーすればよいように思います。これはマクロの記録でも見てまねて、1、2行ですむでしょう。 (4)人間には常識的な(3)で触れた、優先の条件を、VBAの中に書きこめばできることですが、シコシコの世界で、面倒くさくて、今までそういう必要性を経験したことがないせいもあって、書く気がしない(略)。 黒色以外の優先関係、フォントの優先関係など細かい点はどうするのという問題もあります。
- 50100
- ベストアンサー率28% (99/351)
試しに実行したところ以下のようなコードが得られましたが参考になりませんか? A1の書式がA3にコピーされます。 Range("A1").Select Selection.Copy Range("A3").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False
お礼
回答ありがとうございました。参考にさせていただきます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>ちょっと考えるとコピーする文字の属性を一文字づつ新しい文字列に設定するVBAを書く必要があるかに思えます。これよりもっと簡単な方法はないのでしょうか? 私も、まとめてうまくやる方法が無いように思います。 fontStyleで標準・ボールド・斜体がまとめてできるのが救い。 --------------------------------------------------- Public Sub cat() Dim s1 As Range, s2 As Range Dim d As Range Dim i, j Set s1 = Range("A1") Set s2 = Range("A2") Set d = Range("A3") d.Value = s1.Text & s2.Text For i = 1 To Len(s1.Text) d.Characters(i, 1).Font.Color = s1.Characters(i, 1).Font.Color d.Characters(i, 1).Font.FontStyle = s1.Characters(i, 1).Font.FontStyle d.Characters(i, 1).Font.Underline = s1.Characters(i, 1).Font.Underline Next i = Len(s1.Text) For j = 1 To Len(s2.Text) d.Characters(i + j, 1).Font.Color = s2.Characters(j, 1).Font.Color d.Characters(i + j, 1).Font.FontStyle = s2.Characters(j, 1).Font.FontStyle d.Characters(i + j, 1).Font.Underline = s2.Characters(j, 1).Font.Underline Next j End Sub
お礼
回答および具体的なコードをありがとうございます。参考にさせていただきます。
- 50100
- ベストアンサー率28% (99/351)
マクロの記録を開始したあと、書式を含めたセルのコピー操作を再現し、マクロの記録を停止すれば、そのときの処理が全てVBAで記録されます。 私はコードがわからない場合はいつもこの方法を使っています。
お礼
さっそくの回答ありがとうございます。しかし、この操作は手動ではどうもできないようです。ちょっと考えるとコピーする文字の属性を一文字づつ新しい文字列に設定するVBAを書く必要があるかに思えます。これよりもっと簡単な方法はないのでしょうか?
関連するQ&A
- Excelでの文字列の結合
Excelで文字列を結合したいのですが、可能でしょうか? 例えば、セルA1に「abc」、セルB1に「def」と入力し、 それをセルC1に「abcdef」と表示させたいのです。 方法がわからなかったので、 一度txtファイルに変換して保存し、 表示する時にスペースで区切らないようにし表示させたのですが、 うまくいきません。 表示は「abcdef」とキレイに表示されるのですが、 検索コマンドで「abcdef」と入力しても検索されません。 ですので、VLOOKUPなどの関数が使用出来なくて困っています。 どのようにすればいいのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excelのセル名称の結合
エクセルでセルA1,A2に例えばABC,DEFという文字が入っているとき, A3にABCDEFと結合したものを入れる操作をするにはどのような式を書けばよいのでしょうか。
- ベストアンサー
- オフィス系ソフト
- Excelで文字列の抽出をしたいので教えてください
Excelで下記の文字列を抽出したいのですがどなたか教えてください 例) - abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出 -- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出したいのですが宜しくお願いします
- ベストアンサー
- オフィス系ソフト
- エクセル関数:右側の文字列を抜き出す方法
エクセル初心者です。 文字列の抜き出す方法で悩んでいます。 たとえば、A1~A5までに下のような 文字列が順に入っているとします。 C:\abc\TEST1.DOC C:\abc\def\TEST2.DOC C:\abc\def\ghi\jkl\TEST3.DOC C:\abc\def\ghi\TEST4.DOC C:\abc\def\TEST5.DOC これらの文字列の一番右側の'\'以降の文字列 (TEST1~5.DOC)を、B1~B5のセルに 出したいと思っているんですが できるのでしょうか? RIGHT関数や、LEN関数、FIND関数を使って できそうな気がするのですが どうも良い方法が思いつきません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBAのことで
A1にabcと入力されているとします。 また文字が入力されてない1文字分のテキストボックスが3つあるとします。 イメージとしては以下の感じです。 A1 □ abc □ □ A1の3文字を1文字ずつテキストボックスにコピーするスクリプトを知りたいのですが。 abc → a b c (3つのテキストボックスの番号は"Text Box 501~Text Box 503"です) 以上、宜しくお願いします。
- ベストアンサー
- Visual Basic
- Excel VBA - 空白の結合
以下のようなExcelのシートがあります。 A2からC7を選択した後、マクロを走らせて空白セルを結合したいです。 A B C 1 (空白) DDD (空白) 2 ABC 123 (空白) 3 (空白)(空白)(空白) 4 DEF GHI DEF 5 (空白)(空白)(空白) 6 (空白) 789 123 7 (空白)(空白)(空白) 8 GHI JKL MNO A3はA2と結合、A5,6,7はA4と結合、B列、C列も同様です。 要は、空白セルを上にある値の入ったセルと結合したいのです。 ただ、C2が選択範囲外のC1と結合すると困るので、先頭行の空白は、上の選択範囲外セルと結合しないようにしたいです。C2とC3は、結合しませんが、結合する仕様でも問題ありません。 (A2と同じ値をA3に入れた方がいいという意見があると思いますが、会社の表なので結合しないといけません。) ※以前、似たような質問をしましたが、少し違います。(これは未解決です。)
- ベストアンサー
- オフィス系ソフト
- Excel - 空白の結合
以下のようなExcelのシートがあります。 A B C 1 ABC 123 DEF 2 3 456 4 DEF GHI 5 6 GHI 789 123 空白セルを結合したいです。 A1は、A2, A3と結合、A4はA5と結合、B列、C列も同じです。 要は、空白セルを上にある値の入ったセルと結合したいのです。 実際は、かなり大きな表なので、単純に結合していくのはNGです。 (A1と同じ値をA2, A3に入れた方がいいという意見があると思いますが、会社の表なので結合しないといけません。)
- ベストアンサー
- オフィス系ソフト
- VBAでセルの結合と分割(解除)をお願いします
宜しくお願いいたします。 H5とH6のどちらかに数字か記号が入っています以下30個のセルも同様です、H6にデータを入れH5とH6を結合するとセルの認識はH5を認識するのでH6のデータは他へコピー出来ないので結合したセルを再度分割して一行に並び変えているのに下記の構文で実行しているのですが結合にかなりの時間がかかっています。分割は瞬時にできています。 お願いしたい件は即時もしくはなるべく早い方法がありましたらお願いいたします。 こんな感じで作りました Sub 結合() For a = 8 To 38 Range(Cells(5, a), Cells(6, a)).Select Selection.Merge Range(Cells(7, a), Cells(8, a)).Select Selection.MergeSub 以降29個 ・ ・ ・ Next a End Sub 分割() Dim range1 As Range Set range1 = Range("H5:AL5") range1.MergeCells = False Set range1 = Range("H7:AL7") range1.MergeCells = False 以降29個 ・ ・ ・ End Sub 良い方法をご伝授宜しくお願いいたします
- 締切済み
- その他(生活・暮らし)
- Excel2007のVBAで文字列を結合
Excel2007のマクロで文字列を結合したいのですがうまくいきません。 下記がお題になります 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。
- ベストアンサー
- Excel(エクセル)
- Excel VBA
Excel VBAのテキストを片手に色々(仕事で必要で・・・)試しています。そこで、セルをダブルクリックしたときに実行するマクロを作成してみました。(テキストにしたがって)コピー元シートのA2番地に入力されている文字と同じ文字を、Shieet1の任意のセルをダブルクリックすると自動的に入力されるマクロです。ですが、コピー元の文字だけではなく書式も一緒に反映されるので、任意のセルに書式が設定されている場合、書式が崩れてしまいます。なので、どなたか 文字だけ もしくは 書式だけ を自動実行する方法を教えてください。 なかなか伝わりにくい文章で申し訳ありませんが・・・。宜しくお願いいたします。ちなみに↓↓VBの記述を貼り付けます。 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Cancel = True Worksheets("コピー元").Range("A2").Copy Destination:=Target End Sub
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございます。求めていた結果が得られると同時に、マクロの書き方としてもたいへん参考になりました。セルに書き込んだ文章の重要部分を赤にしたりボールドにしているのですが、それらを集めてまとめる処理を行うために、この質問をさせていただきました。