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

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

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

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

マクロ

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

Q&A

解決済

2回答

14268閲覧

【Excel】文字列の差分のみフォントの色を変更したい。

yoknao

総合スコア7

VBA

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

マクロ

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

1グッド

2クリップ

投稿2017/12/01 05:41

編集2017/12/01 06:40

###前提・実現したいこと
Excelで隣り合った列に入っている文字列の差分のみ、フォントの色を変更したいと考えています。

例えば以下のような表の場合はC3とD3を比較し、C3になかった文字列の色を変えるという処理がしたいです。
※[追記]文字列は一致しない想定でお願いします。

イメージ説明
イメージ説明

これはそもそもExcelの関数で実現できるものなのでしょうか?
マクロでしか実現できないのでしたら、その方法を教えて頂きたいです。

###試したこと

Googleなどで検索をし、以下のマクロを試したのですが想定と全く違う結果になってしまいました。

イメージ説明

VBA

1Sub sample1() 2 Dim i As Long 3 Dim n As Integer, t As Integer, j As Integer, f As Integer 4 Dim adrs As String 5 Dim clr() 6 Dim tbl As Range 7 adrs = ActiveCell.Address(0, 0) 8 Set tbl = Application.InputBox("範囲を指定して下さい", Type:=8) 9 With tbl 10 For i = 1 To .Rows.Count 11 Range(adrs).Cells(i, 1).Font.ColorIndex = xlAutomatic 12 If .Cells(i, 1) = .Cells(i, 2) Then 13 Range(adrs) = .Cells(i, 1) 14 Else 15 f = 1 16 t = 1 17 For n = 1 To Len(.Cells(i, 2)) 18 If Mid(.Cells(i, 1), n, 1) = Mid(.Cells(i, 2), t, 1) Then 19 Range(adrs).Cells(i, 1) = Range(adrs).Cells(i, 1) & Mid(.Cells(i, 2), t, 1) 20 Else 21 ReDim Preserve clr(f) 22 clr(f) = t 23 Range(adrs).Cells(i, 1) = Range(adrs).Cells(i, 1) & Mid(.Cells(i, 2), t, 1) 24 f = f + 1 25 If Len(.Cells(i, 1)) < Len(.Cells(i, 2)) Then 26 n = n - 1 27 End If 28 End If 29 t = t + 1 30 If t > Len(.Cells(i, 2)) Then Exit For 31 Next n 32 For j = 1 To UBound(clr) 33 Range(adrs).Cells(i, 1).Characters(Start:=clr(j), Length:=1).Font.ColorIndex = 3 34 Next j 35 End If 36 Next i 37 End With 38 End Sub

###補足情報(言語/FW/ツール等のバージョンなど)
ExcelはMicro Office Professional Plus 2016です。
必要な補足情報などありましたら追加でお伝えします。
よろしくお願いします。

dotnetuseryamag👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

ワークシート関数ではできません。
マクロを作成してください。
基本的な実装はこんな感じでしょうか。
前と後で文字数は同じである前提です。
A列とB列を1行目から比較しているので、適宜修正してください。

VBA

1Dim r As Long 2Dim p As Long 3r = 1 4Do 5 If Cells(r, 1).Text = "" Then Exit Do 6 For p = 1 To Len(Cells(r, 1).Text) 7 If Mid(Cells(r, 1).Text, p, 1) <> Mid(Cells(r, 2).Text, p, 1) Then 8 Cells(r, 2).Characters(Start:=p, Length:=1).Font.ColorIndex = 3 9 End If 10 Next 11 r = r + 1 12Loop

改良版

VBA

1Dim r As Long 2Dim p As Long 3Dim len1 As Long 4Dim len2 As Long 5Dim lenmin As Long 6r = 1 7Do 8 If Cells(r, 1).Text = "" Then Exit Do 9 len1 = Len(Cells(r, 1).Text) 10 len2 = Len(Cells(r, 2).Text) 11 If len1 < len2 Then lenmin = len1 Else lenmin = len2 12 For p = 1 To lenmin 13 If Mid(Cells(r, 1).Text, p, 1) <> Mid(Cells(r, 2).Text, p, 1) Then 14 Cells(r, 2).Characters(Start:=p, Length:=1).Font.ColorIndex = 3 15 End If 16 Next 17 If len1 < len2 Then 18 Cells(r, 2).Characters(Start:=len1 + 1).Font.ColorIndex = 3 19 End If 20 r = r + 1 21Loop 22

投稿2017/12/01 06:27

編集2017/12/01 06:45
ttyp03

総合スコア16998

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

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

yoknao

2017/12/01 06:38

回答ありがとうございます。 試してみたところ確かに差分のみフォントの色が変わりました! ただ後出しで申し訳ないのですが、文字列は一致しないものがほとんどです…。 その場合はどのように行えばよろしいでしょうか?
ttyp03

2017/12/01 06:41

文字数は、ってことでしょうか。 それくらいはご自身のスキルアップのためにもがんばってもらいたいですが、個人的にも興味はあるので少々お待ちください。
ttyp03

2017/12/01 06:46

改良したものを追記しました。 後の方が文字数が少ないときは表現のしようがないので何もしてません。
ttyp03

2017/12/01 06:51

すみません。編集後の画像を見落としていました。 No.1のような差分には対応できていません。 このような差分の検知は簡単にはできません。
yoknao

2017/12/01 07:08

文字数が一致しないという認識で合っています。 ありがとうございます!解決しました。 マクロに関してスキルアップのために自分なりにもう少し勉強してみます。
guest

0

関数では無理があります。

Diffのアルゴリズムで勉強してみてください。

参考になったサイトです
http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm
http://constellation.hatenablog.com/entry/20091021/1256112978

外部ツールであれば、
DF.exe か、 Winmerge が有名です。

投稿2017/12/01 06:02

編集2017/12/01 06:03
ExcelVBAer

総合スコア1175

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

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

yoknao

2017/12/01 06:35

回答ありがとうございます。 教えて下さったサイトを見てみたのですが、なかなか難しく理解に時間がかかりそうです…。 会社支給のPCのため外部ツールのインストールが制限されていまして、そちらも上と相談したいと思います。
ExcelVBAer

2017/12/01 06:44

どちらのツールも、インストールしなくても、 ファイルを置くだけで使えますよ。 Winmergeは、ファイルは重いですが、 システム開発の現場でセキュリティが高い所でも使われてたりします。 DIFFを正確にする為には、正しいアルゴリズムが必須です。 どちらを使うにしても、同じ行で比較してもらう為に、 1列目に桁の多い番号(例:0000000000000000000001)を入れとくと、 意図した結果が得られると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問