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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

4251閲覧

VBAで色文字を検索して指定列に表示させたい

bonbaye

総合スコア9

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/09/12 08:34

編集2018/09/12 08:44

VBA初心者です。

EXCEL(2016)で添付のようにC列に文字が入っており、抽出ボタンを押すとC列の色文字部分だけE~G列に表示させたいのですが、手法がわかりません。

イメージ説明

要件としては
1つの行に複数の色文字があった場合は別の列に表示させます。
ただし、「きく」のように色文字がつながっている場合は1つの単語として表示させたいです。

知見をお持ちの方、記述方法のサンプル等をいただけると助かります。

お手数ですがご教示のほどお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/09/12 09:29 編集

コードの書き方が全く分からないということでしょうか。このままでは丸投げです。文字の着色操作はマクロの記録で取得できるので、まずはそこから頑張って書いてみましょう。
退会済みユーザー

退会済みユーザー

2018/09/12 09:28 編集

あとは、どういう手順でプログラムを書いたらできそうか、日本語で良いので書き出して見ると良いと思います。
bonbaye

2018/09/12 09:59

すみません。私エンジニアでもなく全くの初心者でして、いくつかググってみましたが、コードの書き方自体もわかっていない状況のためこのような質問をさせていただきました。。
guest

回答2

0

A1セルの中身を一文字ずつ調べるコードを書いておきます。
あとは応用したコードを作って試してみて下さい。

Sub test1() Dim targSheet As Worksheet: Set targSheet = ThisWorkbook.Worksheets("Sheet1") Dim A1Range As Range: Set A1Range = targSheet.Range("A1") Dim icount Dim char For icount = 1 To Len(A1Range.Value) Set char = A1Range.Characters(icount, 1) Next End Sub

投稿2018/09/12 09:33

n_takapyon

総合スコア443

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

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

TanakaHiroaki

2018/09/12 13:39

一文字ずつ調べる方法があるのですね。すごいです。 下記を追加してステップ実行することで理解が深まりました。 Debug.Print char.Font.Color
guest

0

ベストアンサー

一応1日経ったので、そろそろ頭が沸騰してきたことに期待して完成形の例など。

VBA

1Option Explicit 2 3Sub カラー抽出() 4 Const rgb As Long = 255 '赤色(255,0,0) 5 6 Dim SH As Worksheet 7 Dim R As Range 8 Dim C As Characters 9 Dim i As Long, j As Long, k As Long 10 11 '直前の検査結果がrgbと一致したかを保持するフラグ 12 Dim isRgb As Boolean 13 14 'とりあえず10行、5列(最大文字数分メモリを確保する) 15 Dim Data(1 To 10, 1 To 5) As Variant 16 17 Set SH = ActiveSheet 18 19 'メインループ 20 For i = 1 To 10 21 'Rangeオブジェクト:C2からとりあえず10行 22 Set R = SH.Range("C2").Offset(i - 1, 0) 23 j = 0 24 isRgb = False 25 If Len(R.Value) > 0 Then 26 For k = 1 To R.Characters.Count 27 'キャラクタオブジェクト:先頭から1字づつ 28 Set C = R.Characters(k, 1) 29 'Debug.Print C.Font.Color 30 31 If (k = 1) Or (isRgb <> (C.Font.Color = rgb)) Then 32 '初回 or 直前とisRgbが逆 33 isRgb = (C.Font.Color = rgb) 34 '色が一致している時のみインデックス移動して代入 35 If isRgb Then j = j + 1: Data(i, j) = C.Text 36 Else 37 '直前とisRgbが同じ 38 isRgb = (C.Font.Color = rgb) 39 '色が一致している時のみ追記 40 If isRgb Then Data(i, j) = Data(i, j) & C.Text 41 End If 42 Next 43 End If 44 Next 45 46 '書き出し 47 SH.Range("E2").Resize(UBound(Data, 1), UBound(Data, 2)).Value = Data 48End Sub

一応teratailはエンジニア向けのサービスらしいので、コードに手が付けられないレベルなら次回からは他を当たったほうが良いかも知れませんよー。幸いExcel/VBAなら優しい掲示板が多いので。

投稿2018/09/13 09:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

bonbaye

2018/09/13 11:33

大変ありがとうございます。想定通りの挙動になりました。 正直諦めて、手入力で1つづつ色文字を抜き出して進めていたところだったので、まさか回答例をいただけるとは思わず、驚いています。 >一応teratailはエンジニア向けのサービスらしいので、コードに手が付けられないレベルなら次回からは他を当たったほうが良いかも知れませんよー。 こちらはその通りかと思いますので、teratailでの質問は今後止めておこうと思います。 この度はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問