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

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

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

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

マクロ

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

Q&A

解決済

2回答

1096閲覧

2種類のシート比較(空白の比較に関して)

tkt1964

総合スコア5

VBA

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

マクロ

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

0グッド

0クリップ

投稿2020/11/19 08:27

編集2020/11/19 08:29

同じエクセル内で、新旧2種類のシート(項目順番は全く同じ)を
それぞれのシートのセルを一つずつ比較し変更箇所に黄色をつけるマクロを組みました。
ただ、旧シートのセル情報が空白、新シートのセル情報が入っている場合に色付けが出来ません。
「If Len(OldStr) > 0 Then」この部分で旧シートセルの空白が0とされるのでスルーされるのかなと思っているのですが、どの様に変更すればいいのか色々調べてもよくわからなくなりました。
わかる方教えていただけますでしょうか。

Sub 変更箇所チェック() ' 作業ワークシート Dim wksOld As Worksheet Dim wksNew As Worksheet ' 古いシートA、新しいシートBとする。 Set wksOld = Sheets("A") Set wksNew = Sheets("b") ' セル参照用のレンジ変数 Dim r As Range Dim rngOld As Range Set rngOld = wksOld.UsedRange ' 古いワークシートのセルを一個ずつループ For Each r In rngOld DoEvents Dim OldStr As String Debug.Print (r.Value) OldStr = r.Value ' 古いシートの比較対象セルの中身 **If Len(OldStr) > 0 Then** 'Newシートで比較するセルの行列番号を取得し、 'Oldシートにある同じ位置のセルを参照する Dim row As Long, col As Long row = r.row col = r.Column Dim rngNew As Range Set rngNew = wksNew.Cells(row, col) Dim NewStr As String NewStr = rngNew.Value '新しいワークシートの比較対象セルの中身 'StrComp関数で2つのセルの内容が等しいかをチェック If StrComp(OldStr, NewStr, vbTextCompare) <> 0 Then rngNew.Interior.Color = 65535 '黄色の定数 End If End If Next r Set wksNew = Nothing Set wksOld = Nothing Set rngOld = Nothing Set rngNew = Nothing End Sub  

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

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

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

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

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

meg_

2020/11/19 08:47

> 「If Len(OldStr) > 0 Then」この部分で旧シートセルの空白が0とされるのでスルーされるのかなと思っているのですが そうであれば、その部分を削除して実行してみれば良いのではないでしょうか? それで上手くいかない場合は他の原因を探しましょう。
tkt1964

2020/11/19 09:05

meg_さん その発想全然ありませんでした。誠にありがとうございます。
guest

回答2

0

ベストアンサー

「If Len(OldStr) > 0 Then」この部分で旧シートセルの空白が0とされるのでスルーされるのかなと思っているのですが、どの様に変更すればいいのか色々調べてもよくわからなくなりました。

そこまで分かっていて、そのIf文を削除してみようという発想になぜならないのか、不思議です。

その、If文を削除してみてください。

StrComp("", "xxxx", vbTextCompare)<>0 の結果はTrueです。


以下、蛇足です。
一つずつ細かく変数に代入するというのも一つのやり方だと思いますが、
やっていることはシンプルなことですので、使用する変数は最低限にしたほうがコードが読みやすいと思います。
自分がコーディングするなら下記のような感じになります。

vba

1Sub 変更箇所チェック() 2 Dim wksOld As Worksheet 3 Dim wksNew As Worksheet 4 5 ' 古いシートA、新しいシートBとする。 6 Set wksOld = Worksheets("A") 7 Set wksNew = Sheets("b") 8 9 ' 古いワークシートのセルを一個ずつループ 10 Dim r As Range 11 For Each r In wksOld.UsedRange 12 With wksNew.Range(r.Address) 13 If StrComp(r.Text, .Text, vbTextCompare) <> 0 Then 14 .Interior.Color = vbYellow '黄色の定数 15 End If 16 End With 17 Next r 18End Sub

投稿2020/11/19 11:50

編集2020/11/20 01:41
hatena19

総合スコア33699

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

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

tkt1964

2020/11/20 01:10

hatena19さん 誠にありがとうございます。コードも誠にありがとうございます。
guest

0

以下のような形になるかと。

VBA

1 If Len(OldStr) > 0 Then 2・・・・・省略・・・・ 3 Else 4 If wksNew.Cells(r.row, r.Column).Value <> "" Then 5 wksNew.Cells(r.row, r.Column).Interior.Color = 65535 '黄色の定数 6 End If 7 End If 8

投稿2020/11/19 09:44

編集2020/11/19 09:46
tatsu99

総合スコア5438

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

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

tkt1964

2020/11/20 01:10

tatsu99さん 誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問