条件付き書式以外でセル比較して一致しないものを太字に変えたい(VBA)
sheet1とsheet2のAI9:CD5000にそれぞれ数字が入力されてます。
同じセルで数字が違うsheet2セルを太文字に変えたいです。
条件付き書式を使えば楽なのですが、すでに作ってあるVBA構文に追加したいのです。
最終的にsheet1は削除します。
VBAで条件付き書式設定して書式だけ残して条件付き書式を削除しようとしましたがうまく行きませんでした。
条件付き書式以外で比較して太字に変える構文をご教授頂けないでしょうか?
No.4ベストアンサー
- 回答日時:
No.3です。
細かい検証はしてませんが・・・
ある範囲の最初の行番号・最終行番号・最初の列番号・最後の列番号
はそれぞれ変数ですでに取得済みなのですね。
前回のコードは配列にセル範囲を格納し、その中でループさせていますので
シートのセル上でループさせるより格段に速く検索できます。
そして、ループさせるのは行・列とも配列の1番目~最後(行数・列数)となりますので
その辺の数合わせだけの問題です。
>For j = 1 To lastCol - myRngCol
では最終列が除外されるのでは?
>For j = 1 To lastCol - myRngCol + 1
にする必要があると思います。
次に今回の場合は配列の配置とセルの配置が一緒なので、
>wS2.Cells(i + myRngRow -1, j + wS2.Range(wS2.Cells(1, myRngCol - 1).Column))).Font.Bold = True
のようにセル番地内でシートを指定する必要はないはずです。
必要なのは「行番号」と「列番号」を合わせるだけです。
>wS2.Cells(i + myRngRow - 1, j + myRngCol - 1).Font.Bold = True
にしたらどうなりますか?
※ 最初に記載したように未検証なので
お望みどおりにならなかったらごめんなさい。m(_ _)m
No.3
- 回答日時:
こんにちは!
セル数としては約24万セルの比較になるのですね。
無理やりやってみました。
標準モジュールにしてください。
Sub Sample1()
Dim i As Long, j As Long
Dim wS1 As Worksheet, wS2 As Worksheet
Dim myR1, myR2
Application.ScreenUpdating = False
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
myR1 = wS1.Range("AI9:CD5000")
myR2 = wS2.Range("AI9:CD5000")
For i = 1 To UBound(myR1, 1) '//←9行目~5000行目まで//
For j = 1 To 48 '//←AI列~CD列まで
If myR1(i, j) <> myR2(i, j) Then
wS2.Cells(i + 8, j + Range("AH1").Column).Font.Bold = True
End If
Next j
Next i
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
※ まずないとは思いますが、すべてのセルが異なった場合で
約34秒かかりました。m(_ _)m
ありがとうございました。
動作させることができました。
ご教授いただきました内容で、"AI9:CD5000"を変数にするやり方を合わせてご教授いただけないでしょうか。
自分なりに変更してみたところ、RANGEメソッドエラーになってしまう箇所が2か所ありました。
Sheet1がアクティブになっている状態の時です。
lastRow・・・最終行の数値が入ってます。(5000)
lastCol・・・最終列の数値が入ってます。(82)
myRngRow・・・最初の行の数値が入ってます。(9)
myRngCol・・・最終の列の数値が入ってます。(35)
myR2 = wS2.Range("AI9:CD5000")
↓
myR2 = wS2.Range(Cells(myRngRow , myRngCol ), Cells(lastRow, lastCol))
これだとエラーになったので、
myR2 = wS2.Range(wS2.Cells(myRngRow , myRngCol ), wS2.Cells(lastRow, lastCol))
ここに関してはこれで解決しました。
For j = 1 To 48
↓
For j = 1 To lastCol - myRngCol
特に問題なし
wS2.Cells(i + 8, j + Range("AH1").Column).Font.Bold = True
↓
wS2.Cells(i + myRngRow -1, j + Range(Cells(1, myRngCol - 1).Column))).Font.Bold = True
これだとエラーになったので、
wS2.Cells(i + myRngRow -1, j + wS2.Range(wS2.Cells(1, myRngCol - 1).Column))).Font.Bold = True
これでもエラーでした。ここに関してどうすればいいか苦慮してます。
No.2
- 回答日時:
こんにちは
>VBAで条件付き書式設定して書式だけ残して
>条件付き書式を削除しようとしましたが~
それだけ複雑な処理を試みようとなさっているのですから、ご質問の内容をそのまま処理するのはさほどのものでもないでしょう。
No1様が指摘なさっているように、範囲がそれなりなので、若干時間が掛かるかも知れませんが、単純に全てのセル範囲の値を順に比較すればよいだけです。
ワークシートをそれぞれws1、ws2、行をr、列をcとするなら
ws2.Cells(r, c).Font.Bold = (ws1.Cells(r, c).Value = ws2.Cells(r, c).Value)
といった1行の処理をループさせれば済むと思います。
あるいは、For Eachで処理すれば、記述はもっと簡単になるかもしれません。
ws2の対象範囲内のセルをcとするなら、上記と同じ内容は
c.Font.Bold = (c.Value = ws1.Cells(c.Address).Value)
のように表せることになります。
※ 結合セルの有無や表示書式の違いによる見た目の差異等は考慮していません。
(単純にセルの値の比較だけを行っています)
※ 処理時間の短縮が必要な場合は、もう少し工夫が必要になりますね。
No.1
- 回答日時:
条件付き書式を使わないとなると、条件付き書式で行っている処理の一つ一つを再現するしかないと思うんだ。
さすがに面倒なので、自分なら
・1セルずつ
・条件付き書式(条件が成立したら太字にする)を設定した後
・Font の状態を読み取って太字(Bold)なら、Font の Bold を 有効(True)にする
・条件付き書式を削除
…ような構造にするかな。
このほうがシンプルで間違いが少ないと思います。
ただし、結構な時間がかかるかも知れません。
ブレークポイントを設定しておきましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Excel(エクセル) 条件式書式の設定 3 2023/07/04 05:34
- Excel(エクセル) マクロ、条件付き書式のfont.color 1 2023/03/28 01:10
- Excel(エクセル) エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい 3 2022/08/08 10:32
- Excel(エクセル) エクセルでセルの文字列から年月を抜き出して今日の日付と比較したい 15 2022/07/29 14:39
- Excel(エクセル) エクセルで教えて下さい。 2 2022/05/18 13:00
- その他(Microsoft Office) マクロについて教えて下さい 3 2022/05/28 15:36
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Excel(エクセル) 条件付き書式を使ってユーザー定義。「数字のみ」も「数字+アルファベット」も認識させたい。 2 2022/05/28 07:22
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
E列のセルに数値が入れば(空白...
-
条件付書式で「=#N/A」に色を付...
-
Excel にて条件付き書式の色に...
-
条件付き書式で、結果が1行ずれる
-
エクセルの枠の中の文字が青文...
-
Excelの条件付き書式にて空白セ...
-
エクセル 条件付き書式で色をつ...
-
条件付き書式で太罫線を引く方法
-
エクセルで特定の数字等を表示...
-
セルの値が空白じゃないなら色...
-
エクセルで一定期間が経過した...
-
エクエルで隣のセルの文字が赤...
-
エクセルで1以上は全て1にするには
-
エクセルでカーソルのある行を...
-
Excelのテキストボックスでフォ...
-
エクセル内で複数の文字(50個ぐ...
-
エクセルで「前回より大きい数...
-
エクセルからワードへの差し込...
-
【エクセル】今日の日付に赤枠...
-
エクセルで日付を入力したらカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
E列のセルに数値が入れば(空白...
-
Excel にて条件付き書式の色に...
-
条件付書式で「=#N/A」に色を付...
-
条件付き書式で、結果が1行ずれる
-
エクセルの枠の中の文字が青文...
-
Excelの条件付き書式にて空白セ...
-
エクセル 条件付き書式で色をつ...
-
エクセルで特定の数字等を表示...
-
エクセル内で複数の文字(50個ぐ...
-
セル結合させてるときの 条件...
-
Excelで2つのファイルを比較し...
-
条件付き書式で太罫線を引く方法
-
Excelについて あるセルに文字...
-
エクエルで隣のセルの文字が赤...
-
エクセルでカーソルのある行を...
-
エクセルで一定期間が経過した...
-
エクセルで日付を入力したらカ...
-
セルの値が空白じゃないなら色...
-
エクセルで1以上は全て1にするには
-
エクセルでシート参照する場合...
おすすめ情報