アプリ版:「スタンプのみでお礼する」機能のリリースについて

excel vba 見様見真似の初心者?です。

excel vba で 文字データとして取得した変数に関し、色の指定はできるでしょうか?

繰り返し構文の中で、セル範囲の文字データを順番に変数として取得し、他の文字データとして合成して文のデータを作りますが、その変数部分だけ赤色にするというようなことを考えています。

コードとして示していただけると幸いです。

A 回答 (4件)

No2です。


参考までに、No2の図のように赤色をつけるマクロです。

Public Sub 文字を赤に設定()
Dim wrow As Long
Dim str1_len As Long
Dim str1 As String
Dim str2 As String
Dim str3 As String
For wrow = 2 To 4
str1 = Cells(wrow, 1).Value
str2 = Cells(wrow, 2).Value
str3 = str1 & str2
str1_len = Len(str1)
Cells(wrow, 3).Value = str3
Cells(wrow, 3).Characters(Start:=1, Length:=str1_len).Font.Color = -16776961
Next
End Sub
    • good
    • 0

No1です。



>次の色を変えたいbの位置はaの文字数によって変わってくるかなと、、、。
>これを特定することは知識のある方なら可能な気がしますが~
連結する各文字列はわかっているのでしょうから、文字数を数えれば可能と思います。

>色を変えたい文字データはab2つあり、その他の固定文字データABCと3つ。
>最終的にAaBbCというような文字列にしてセル内に入力する
文字列の断片が5つと限定してよいのであれば、固定処理で良いのでさほど難しくはありません。

以下のような、プロシージャを用意しておいて、上記の例で言えば
 Call word2color(Range("A1"), "AA", "a", "BB", "b", "CC")
のような形式で呼び出すと
 ・指定セル(=上記ではA1)に「AAaBBbCC」の文字が入力され
 ・「a」と「b」の部分だけ文字色が赤になります。

※ 引数のチェックはごく簡略化してありますが、引数がおかしい場合、セル値は「#VALUE!」エラーになります。
以下、ご参考までに。

Sub word2color(r As Range, ParamArray st())
Dim i As Long, f As Boolean
Dim L(0 To 5) As Long, v As String

If UBound(st) = 4 Then
f = True
L(0) = 1
For i = 0 To 4
If VarType(st(i)) <> 8 Then f = False: Exit For
If Len(st(i)) = 0 Then f = False: Exit For
L(i + 1) = L(i) + Len(st(i))
v = v & st(i)
Next i
End If

If f Then
r.Value = v
r.Characters(Start:=L(1), Length:=L(2) - L(1)).Font.Color = vbRed
r.Characters(Start:=L(3), Length:=L(4) - L(3)).Font.Color = vbRed
Else
r.Value = CVErr(xlErrValue)
End If
End Sub
    • good
    • 0
この回答へのお礼

fujillin様、ご丁寧にありがとうございます。word2colorのコード、残念ながら私のついて行けるレベルでないようです。今回の最大の収穫は、文字変数に色を指定するなんてできないとはっきりわかったこと。残念ながらその程度のレベルです。
時間のあるときに、いただいたコードを試したりしたいと思います。

お礼日時:2024/01/09 09:29

変数に直接色を指定することは、出来ません。


その変数の文字をセルに格納した後に、そのセル内の文字に対して色を設定することは可能です。
添付図のように
A列の文字とB列の文字を結合し、その結果をC列に格納したとき、
A列の文字のみ赤色に設定することは可能です。
その場合、A列の文字の長さを記憶し、その長さぶんだけ、赤色に設定する
ことになります。
上記のようなマクロで良ければ提供可能です。
「変数として取得した文字データの色の指定」の回答画像2
    • good
    • 0
この回答へのお礼

tatsumaru77樣、回答ありがとうございます。今回は課題を自分のレベルで短時間に解決できそうもなく、特定文字を赤にすることの必要性は低いので、いただいた内容を参考にするなどして今後の勉強材料にしたいと思います。

お礼日時:2024/01/09 09:35

こんにちは



VBAの文字変数は文字列のコードを持っているだけですので、色の情報は持ちません。
(数字の変数が、色やサイズや背景色などの情報を持たないのと同じです)
そのような情報を持てるようにしたければ、独自のオブジェクト(=クラス)を定義すれば可能と思いますけれど・・


ご質問の内容は「セルの文字列の一部の色を変えたい」ということと思いますけれど、それならば「変数の色を指定する」のではなく、「セルの文字の色を変える」ようになさればよいでしょう。
「セル」は値(=文字列等)の他にも、書式や色、セルサイズ、関数、リンクなどなど、様々な情報を持てるオブジェクトになっていますので、セル上であれば当然ながら文字列の一部に色を付けることも可能です。

ご質問のようなことをなさりたければ、「セルの一部の文字を変える」処理を行えばよいでしょう。
コードは「マクロの記録」を利用して、一度実行してみれば要領がわかると思います。
検索してみても、解説サイトは数多く見つけられると思います。
https://www.moug.net/tech/exvba/0110016.html
https://workteria.forward-soft.co.jp/blog/detail …
https://kirinote.com/excelvba-char-color/
    • good
    • 0
この回答へのお礼

早速にありがとうございます。マクロの記録でセル内の文字データの一部の色を変えることやってみました。文字データの先頭を指定し、そこから○文字分あとの文字の色を変えるといった構成になっています。。
 実は、色を変えたい文字データはab2つあり、その他の固定文字データABCと3つ。
 最終的にAaBbCというような文字列にしてセル内に入力するというようなコードの構成です。
 最初のaの位置は特定できますが、次の色を変えたいbの位置はaの文字数によって変わってくるかなと、、、。これを特定することは知識のある方なら可能な気がしますが、今回やろうとしていることは、そこまで手間かけてやるまでのことではないので、断念します。
 初心者ゆえ、変数で取得した文字データであっても色などの指定ができるのではと考えました、、、、。それは無理と教えていただき感謝しています。
ありがとうございました。

お礼日時:2024/01/08 13:16

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

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


このQ&Aを見た人がよく見るQ&A