質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

Q&A

解決済

2回答

11027閲覧

Excel_VBAのフォントの色コピーを教えて下さい。

mrrclb48z

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

0グッド

0クリップ

投稿2016/09/03 12:23

編集2016/09/12 13:48

Excel_VBAのフォントの色コピーを教えて下さい。
'(参考)クリップボードを使わないセルのCopy|ExcelマクロVBA技術解説
'http://excel-ubara.com/excelvba4/EXCEL254.html
'----------------------------------------------------------------------------------------
'セルの文字(一部だけ色)をコピーする。
'入力
'A列1行 '123
'2だけ赤色,1と3は黒色
'出力実行結果
'B列1行 '123全部黒色になります。
'Charactersの使い方を教えて下さい。よろしくお願いします。
'
Sub sample()
Call sample_sub(Range("A1:A7"), Range("B1"))
End Sub
Sub sample_sub(fromRange As Range, toRange As Range)
Dim s As String
Dim i As Long
Dim j As Long
For i = 1 To fromRange.Rows.Count
For j = 1 To fromRange.Columns.Count
toRange.Cells(i, j).Value = fromRange.Cells(i, j).Value
For k = 1 To Len(fromRange.Cells(i, j).Value)
toRange.Cells(i, j).Characters(k, k).Font.ColorIndex = fromRange.Cells(i, j).Characters(k, k).Font.ColorIndex
Next
Next
Next
End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

使い方

Charactersの使い方は以下に記載されています。
⇒Range.Characters プロパティ (Excel)

原因

上記ページを見ていただければわかると思いますが、引数の1つ目が文字列の取得位置、2つ目が取得する長さとなっています。

今回の処理では、文字列から文字を1文字ずつ取得して文字色を写していきたいのだと思いますが、提示いただいたコードでは、
fromRange.Cells(i, j).Characters(k, k).Font.ColorIndex
のように2つ目の引数まで変数kの値としてしまっています。

これだと、仮にセルの値が"ABCDEFG"という文字列だった場合に
kループ1回目:Characters(1, 1)⇒"A"
kループ2回目:Characters(2, 2)⇒"BC"
kループ3回目:Characters(3, 3)⇒"CDE"
・・

といった具合に、取得する文字列の長さも増えていってしまいます。

例えばループ2週目で取得した文字列"BC"がともに赤ならFont.ColorIndexは赤(3)を取得できますが、BとCで色が異なる場合はFont.ColorIndexはNullとなり、結果的に黒文字として反映されてしまいます。

改修コード

期待する動作とするためには、問題の部分を以下のように修正すればよいと思います。

toRange.Cells(i, j).Characters(k, 1).Font.ColorIndex = fromRange.Cells(i, j).Characters(k, 1).Font.ColorIndex ``` ご確認ください。

投稿2016/09/05 02:56

編集2016/09/05 04:09
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mrrclb48z

2016/09/12 13:06

式.Characters(Start, Length) ありがとうございました。
guest

0

ベストアンサー

一文字ずつ処理していくコードに見えますので期待する動作は以下ではないでしょうか。

誤:
toRange.Cells(i, j).Characters(k, k).Font.ColorIndex = fromRange.Cells(i, j).Characters(k, k).Font.ColorIndex

正:
toRange.Cells(i, j).Characters(k, 1).Font.ColorIndex = fromRange.Cells(i, j).Characters(k, 1).Font.ColorIndex

投稿2016/09/03 14:00

nakit

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問