Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6810 / 13644 ツリー ←次へ | 前へ→

【42775】比較と表示について シンゴ 06/9/21(木) 14:53 質問[未読]
【42777】Re:比較と表示について パン 06/9/21(木) 16:21 発言[未読]
【42782】Re:比較と表示について シンゴ 06/9/21(木) 18:23 発言[未読]
【42779】Re:比較と表示について Kein 06/9/21(木) 17:04 回答[未読]
【42783】Re:比較と表示について ichinose 06/9/21(木) 19:06 発言[未読]
【42790】Re:比較と表示について シンゴ 06/9/21(木) 22:35 お礼[未読]
【42799】Re:比較と表示について ichinose 06/9/22(金) 7:59 発言[未読]
【42794】Re:比較と表示について りん 06/9/21(木) 23:21 回答[未読]
【42853】Re:比較と表示について(訂正) りん 06/9/23(土) 12:33 回答[未読]
【43018】Re:比較と表示について(訂正) シンゴ 06/9/29(金) 10:11 お礼[未読]
【42816】Re:比較と表示について シンゴ 06/9/22(金) 19:13 お礼[未読]

【42775】比較と表示について
質問  シンゴ  - 06/9/21(木) 14:53 -

引用なし
パスワード
   お世話になります。

ワークシート間のデータを比較して、変更があればその箇所のデータ表示を
赤色のフォント色で表示させる、なんて事はVBAで可能でしょうか?
条件付書式設定では対応出来ないようです。

ワークシート1,A1セル→ワークシート2,A1セル
           ↓
       データに変更あり
           ↓
          赤色文字

宜しくお願い致します。

【42777】Re:比較と表示について
発言  パン E-MAIL  - 06/9/21(木) 16:21 -

引用なし
パスワード
   ▼シンゴ さん:
これにより何がしたいのかで違いますが(データー量等もろもろ)
単純に説明のことを再現すれば、下のようになりますが???
もう少し使用している内容を詳しい方がよりよい回答が得られると思います。


Dim 判定 As String
判定 = (Sheets("Sheet1").Range("A1").Value = Sheets("Sheet2").Range("A1").Value)
If 判定 = "False" Then

Range("A1").Select
     With Selection.Font
    
      .ColorIndex = 3
      End With
      End If


>お世話になります。
>
>ワークシート間のデータを比較して、変更があればその箇所のデータ表示を
>赤色のフォント色で表示させる、なんて事はVBAで可能でしょうか?
>条件付書式設定では対応出来ないようです。
>
>ワークシート1,A1セル→ワークシート2,A1セル
>           ↓
>       データに変更あり
>           ↓
>          赤色文字
>
>宜しくお願い致します。

【42779】Re:比較と表示について
回答  Kein  - 06/9/21(木) 17:04 -

引用なし
パスワード
   イマイチよく理解できていませんが、セル入力イベントを使って・・

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim C As Range
  Dim Ad As String

  For Each C In Target
   Ad = C.Address
   With Sheets("Sheet2").Range(Ad)
     If .Value <> C.Value Then .Font.ColorIndex = 3
   End With
  Next
End Sub

を、Sheet1 のシートモジュールに入れてみて下さい。
      
 

【42782】Re:比較と表示について
発言  シンゴ  - 06/9/21(木) 18:23 -

引用なし
パスワード
   ▼パン さん
▼Kein さん
回答ありがとうございます。

>これにより何がしたいのかで違いますが(データー量等もろもろ)
>単純に説明のことを再現すれば、下のようになりますが???
>もう少し使用している内容を詳しい方がよりよい回答が得られると思います。
      ↓
すみません、説明不足でして....
データ量(セル数)としては、1行あたり30個のセル数のデータが、340
行分、30×340=10,200数あります。(の表です)
比較するワークシート1とワークシート2の表はセル位置、数量ともまったく
同じです。
これを,ボタンクリックで行いたい、と言うのが希望です。

【42783】Re:比較と表示について
発言  ichinose  - 06/9/21(木) 19:06 -

引用なし
パスワード
   こんばんは。

>
>ワークシート間のデータを比較して、変更があればその箇所のデータ表示を
>赤色のフォント色で表示させる、なんて事はVBAで可能でしょうか?
>条件付書式設定では対応出来ないようです。
条件付書式設定でも可能だと思いますが・・・。



シート名「ワークシート1」のセル範囲A1〜AD340



シート名「ワークシート2」のセル範囲A1〜AD340

のそれぞれ対応するセル
(例えば、ワークシート1のセルA1とワークシート2のセルA1を比較)の値を比較し

等しくなければ、ワークシート1の対応するセル範囲の文字の色を赤くする


を条件付書式で行うとすると・・・。

新規ブックに「ワークシート1」と「ワークシート2」というシート名を持つ
ワークシートを作成してください。

標準モジュールに

'===============================
Sub test()
  Const s1 = "ワークシート1"
  Const s2 = "ワークシート2"
  Worksheets(s1).Activate
  Names.Add Name:="sht2", RefersTo:="=" & s2 & "!rc"
  With Worksheets(s1)
    With .Range("a1:ad340")
      With .FormatConditions
       .Delete
       .Add xlCellValue, Operator:=xlNotEqual, _
          Formula1:="=sht2"
       End With
      .FormatConditions(1).Font.ColorIndex = 3
      End With
    End With
End Sub


このtestを一度だけ実行してください
(このコードで条件付書式を設定しています)

ワークシート1のセル範囲A1〜AD340に値を入力してみてください

ワークシート2の対応するセル範囲の値と等しくなければ文字が赤くなるはずです。

ためしてみてください。


>
>ワークシート1,A1セル→ワークシート2,A1セル
>           ↓
>       データに変更あり
>           ↓
>          赤色文字
>
>宜しくお願い致します。

【42790】Re:比較と表示について
お礼  シンゴ  - 06/9/21(木) 22:35 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは。ご教示ありがとうございました。
1度実行すると、その後はいつでも変更箇所が表示されるのですねぇ。
ですが,本番環境で実行するとうまくいきません。
自分なりにコードを読み取るのですが一部判りません。

>Sub test()
>Const s1 = "ワークシート1"            →シート名を定義
>Const s2 = "ワークシート2"            →シート名を定義

>Worksheets(s1).Activate              →シートs1が表示される時
>Names.Add Name:="sht2", RefersTo:="=" & s2 & "!rc"→ここが良く...
>With Worksheets(s1)
>With .Range("a1:ad340")
>With .FormatConditions
>.Delete
>.Add xlCellValue, Operator:=xlNotEqual, _     →ここもいまいち...
>Formula1:="=sht2"
>End With
>.FormatConditions(1).Font.ColorIndex = 3
>End With
>End With
>End Sub

【42794】Re:比較と表示について
回答  りん E-MAIL  - 06/9/21(木) 23:21 -

引用なし
パスワード
   シンゴ さん、こんばんわ。
>赤色のフォント色で表示させる、なんて事はVBAで可能でしょうか?
>条件付書式設定では対応出来ないようです。
ichinoseさんが回答しているとおりできます。
詳細は目安箱で。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=100;id=FAQ
ichinoseさんの回答は、名前を定義する方でしたので、もう一方の方で。
A1:A500に条件付書式を指定します。実行は1度でいいです。

Sub TEST()
  Dim II As Integer
  '
  Range("A1:A500").FormatConditions.Delete
  For II = 1 To 500
   With Cells(II, 1).FormatConditions
     .Add Type:=xlCellValue, Operator:=xlNotEqual, _
      Formula1:="=INDIRECT(""Sheet2!A" & II & """)"
     .Item(1).Interior.ColorIndex = 3 '赤
   End With
  Next
End Sub

マクロを使わずに手動で設定する場合は、範囲をドラッグ後(アクティブセルがA1として)
書式→条件付書式
『セルの値が』『次の値に等しくない』『=INDIRECT("Sheet2!A1")』←これを手入力
好みの書式を適用すると全体に書式が適用されます。
# Thanks!Jakaさん

【42799】Re:比較と表示について
発言  ichinose  - 06/9/22(金) 7:59 -

引用なし
パスワード
   ▼シンゴ さん:
おはようございます。

>こんばんは。ご教示ありがとうございました。
>1度実行すると、その後はいつでも変更箇所が表示されるのですねぇ。
>ですが,本番環境で実行するとうまくいきません。
動作しない場合は、「うまくいきません」という一言で
終わらせないようにして下さい。

この「うまくいきません」という現象の詳細を記述してください。
例えば、本番環境にtestというプロシジャーのコード修正したと思いますが、
どこを修正したのか? つまり、コードの提示

作動させたtestというプログラムの動作に異常があったのか?
(エラーが発生したら、その詳細情報)
あるいは、testは正常に作動したが仕様どおりに値を変更しても文字が赤くならないのか?

この場合は、testというコードは条件付書式を設定しているコードです。
手動操作でも可能な事を説明を省略するためにコードで記述しています。

条件付書式が作動した例と失敗している例ではどうのように違うのか調べてみる事です。

・名前の定義が正しく設定されているか?

・条件付書式が正しく設定されているか?

といってもこの2点ですけどね!!


コードは難しいロジックを使っているわけではありません。
HELPを使って一行一行調べてみてください。
>
>>Sub test()
>>Const s1 = "ワークシート1"            →シート名を定義
>>Const s2 = "ワークシート2"            →シート名を定義
>
>>Worksheets(s1).Activate              →シートs1をアクティブにする
>>Names.Add Name:="sht2", RefersTo:="=" & s2 & "!rc"→ここが良く...
'  sht2 という名前で 
' ワークシート1のアクティブなセルのアドレスをワークシート2のセルとして
'相対番地を登録しています。
' 例 ワークシート1のA1がアクティブであれば、sht2にはワークシート2!A1が登録
'   ワークシート1のc1がアクティブであれば、sht2にはワークシート2!c1が登録
'つまり、ワークシート1の基準になるセルが変われば
'  sht2で定義されたセルも随時変わっていきます。
'Excelの特徴を利用した名前の定義です。

>>With Worksheets(s1)
>>With .Range("a1:ad340")
>>With .FormatConditions
>>.Delete
>>.Add xlCellValue, Operator:=xlNotEqual, _     →ここもいまいち...
>>Formula1:="=sht2"
'ここで条件付書式の設定を行っています。
'セル範囲A1:AD340がワークシート2の対応するセルの値と同じでなかったら、
'文字を赤くする という設定を行っています


>>End With
>>.FormatConditions(1).Font.ColorIndex = 3
>>End With
>>End With
>>End Sub


本番環境での設定された名前の定義、条件付書式をよく調べてみてください。


それと私の例題で、作動して本番環境では作動しない原因として 

これは、まだ記述されていないシートの違いがあるのかもしれません

新規ブックのシートと本番環境でのシート 何がどこが違うのか
違いをすべて洗い出すことです。

【42816】Re:比較と表示について
お礼  シンゴ  - 06/9/22(金) 19:13 -

引用なし
パスワード
   ▼りんさん
▼Keinさん
▼ichinoseさん

ありがとうございました。
結局一番簡単なVBAを利用しない,条件付書式設定を利用しました。

【42853】Re:比較と表示について(訂正)
回答  りん E-MAIL  - 06/9/23(土) 12:33 -

引用なし
パスワード
   シンゴ さん、こんにちわ。
解決後ですが、手動設定の方に間違いがありましたので訂正します。

>マクロを使わずに手動で設定する場合は、範囲をドラッグ後(アクティブセルがA1として)
>書式→条件付書式

>『セルの値が』『次の値に等しくない』『=INDIRECT("Sheet2!A1")』←これを手入力

これだと全部のセルがシート2のA1を参照するので、
『数式が』『=A1<>INDIRECT("Sheet2!A"&ROW())』←これが正解のようです。

【43018】Re:比較と表示について(訂正)
お礼  シンゴ  - 06/9/29(金) 10:11 -

引用なし
パスワード
   ▼りん さん:
こんにちわ。訂正ありがとうございます。

>『数式が』『=A1<>INDIRECT("Sheet2!A"&ROW())』←これが正解のようです。

6810 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free