No.1
- 回答日時:
例えばこんな感じでどうでしょうか?
Sub test()
For r = 2 To 100
If LenB(Cells(r, 1)) > 38 Then
Cells(r, 1).Interior.Color = RGB(255, 0, 255)
Else
Cells(r, 1).Interior.Color = xlNone
End If
Next
End Sub
以下注意
For r = 2 To 100 の100の訳
ご質問の式から1048576はマクロの実行時間がかかりすぎると思いますので
とりあえず100までにしてあります。適宜見合う数字にして下さいね。
Cells(r, 1).Interior.Color = RGB(255, 0, 255)
色はRGBで指定すれば自由ですので適当に数字を変えて下さい。
この回答への補足
ご丁寧な回答ありがとうございます。
早速試してみましたが、セルに色は付きませんでした。
試した手順は
(1)シート名(sheet1)を右クリックしてコードの表示
(2)左上の Microsoft excel objects 内のsheet1をクリック
(3)教えていただいたVBAをコピペ
すでに入力中のセルにも、新規入力したセルにも色が付きません。
試した手順はあっていますか?
すみません。
マクロを実行すると色は付きました。
ありがとうございます。
入力後に文字確定し、再度エンターキーで
次にセルにアクティブセルが移動したときに
色を付けることはできますか?
No.2
- 回答日時:
手順
Excel画面、対象シートがアクティブな状況から、
対象シート下部のシートタブを右クリック
→ [コードの表示]をクリック
表示された[SheetX モジュール]に以下をコピペ。
' ' シートモジュール
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
With Intersect(Target, Range("A:A"))
.Interior.ColorIndex = xlColorIndexNone
For Each r In .Cells
If LenB(StrConv(r.Value, vbFromUnicode)) > 38 Then
r.Interior.Color = &H6699FF ' 色の指定はご自由に
End If
Next
End With
End Sub
因みに、セル値のバイト長をVBAから採るには、
StrConv()関数を使います。
実際にシート上で=LENB(A1)のような数式で確認用の列を作るなどして、
ちゃんと検証した方がいいですよ。
この回答への補足
丁寧な説明と回答ありがとうございます。
上記の手順で思っている通りに色が付きました。
ありがとうございます。
最初の質問後に追加がありまして、
A列に入力した文字数のバイト数が38よりも多い場合にセルに色を付けて、
さらに、I列に入力した文字のバイト数が24より多い場合もセルに色を付けたいのです。
色々試してみましたが、上手く出来ません。
よろしければ、ご教授お願い致します。
No.3
- 回答日時:
こんばんは!
横からお邪魔します。
>シート内のデータをクリアすると条件付き書式までクリアされてしまい困っています
とありますが、
条件付き書式を設定している列そのものを削除してしまうというコトでしょうか?
普通クリアとはDeleteキーでデータのみを消去すると思うのですが・・・
データのみ消去の場合は条件付き書式ではダメでしょうか?
A2セルを選択 → Shift+Ctrlキーを押しながら下矢印キーを押下
これでA2セル~A列最終行までが選択されますので
この状態で条件付き書式を設定すれば大丈夫だと思います。
範囲指定されたまま → 条件付き書式 → 新しいルール → 数式を使用して・・・ → 数式欄に
=LENB(A2)>38
という数式を入れ → 書式 → 塗りつぶしから好みの色を選択しOK
※ 余計なお世話だったらごめんなさいね。m(_ _)m
アドバイスありがとうございます。
>条件付き書式を設定している列そのものを削除してしまうというコトでしょうか?
>普通クリアとはDeleteキーでデータのみを消去すると思うのですが・・・
VBAでクリア処理していますので、条件付き書式もクリアされてしまうのです。
No.4
- 回答日時:
No.3です。
>VBAでクリア処理していますので、条件付き書式もクリアされてしまうのです。
とありますが、
>セル範囲.Clear にしていませんか?
>セル範囲..ClearContents
にすれば書式は消えないと思います。
そして余計なお世話かもしれませんが、No.2さんの補足を読ませていただいて・・・
VBAでA列・I列に色を付ける方法です。
(黄色にしています)
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A,I:I")) Is Nothing Or Target.Count <> 1 Then Exit Sub
With Target
If .Column = 1 Then
.Interior.ColorIndex = xlNone
If LenB(StrConv(.Value, vbFromUnicode)) > 38 Then
.Interior.ColorIndex = 6 '←黄色
End If
Else
.Interior.ColorIndex = xlNone
If LenB(StrConv(.Value, vbFromUnicode)) > 24 Then
.Interior.ColorIndex = 6
End If
End If
End With
End Sub
※ シートモジュールです。m(_ _)m
tom04さんのおっしゃるように
>セル範囲..ClearContents
で、書式はクリアされてないようになりました。
親切に教えていただきありがとうございました。
No.5ベストアンサー
- 回答日時:
#2、cjです。
補足欄へのレスです。> 最初の質問後に追加がありまして、
> A列に入力した文字数のバイト数が38よりも多い場合にセルに色を付けて、
> さらに、I列に入力した文字のバイト数が24より多い場合もセルに色を付けたいのです。
> 色々試してみましたが、上手く出来ません。
結構難しいことをしようとしていますから、うまく出来なくても無理ないです。
#2から考えると、基本設計から変えないと対応出来ませんね。
ということで、書き直しました。
今後も列を増やすことがあるかも知れませんから、
各ブロック(列)ごとに構文を揃えてあります。
' ' A列ーーーーーーーー
から
' ' ーーーーーーーーーー
まで
をコピーしたものを貼り付けて
▼列の指定、■バイト数の指定、★色の指定、
の3カ所(見出しの列名も含めれば4カ所)書き換えてみてください。
' ' =============シートモジュール============
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rPrSum As Range
Dim r As Range
' ' A列ーーーーーーーー
Set rPrSum = Intersect(Target, Range("A:A")) ' ▼列の指定
If Not rPrSum Is Nothing Then
For Each r In rPrSum
If LenB(StrConv(r.Value, vbFromUnicode)) > 38 Then ' ■バイト数の指定
r.Interior.Color = &H6699FF ' ★色の指定
Else
r.Interior.ColorIndex = xlColorIndexNone
End If
Next
End If
' ' ーーーーーーーーーー
' ' I列ーーーーーーーー
Set rPrSum = Intersect(Target, Range("I:I")) ' ▼列の指定
If Not rPrSum Is Nothing Then
For Each r In rPrSum
If LenB(StrConv(r.Value, vbFromUnicode)) > 24 Then ' ■バイト数の指定
r.Interior.Color = &H6699FF ' ★色の指定
Else
r.Interior.ColorIndex = xlColorIndexNone
End If
Next
End If
' ' ーーーーーーーーーー
Set rPrSum = Nothing
End Sub
' ' =================================
理解に自信持てなさそうな関数、メソッド、プロパティなどがもしあれば、
VBE画面上で、各キーワードにカーソルを当てて、F1 キーを押すなどして、
VBAのヘルプの内容程度は、浚っておいてください。
今回課題の色付け対象セルを.Clearメソッドで
値消去する場合は、そちらのマクロの記述に関して
Application.EnableEvents = False
範囲.Clear
Application.EnableEvents = True
のように、前後に書き加えた方が、無駄な処理をせずに済みますし、
思わぬ結果になってしまうことを避ける意味もありますし、何かとトラブルを減らせます。
イベントの発行を抑止して、
クリアして、
イベントの発行を再開
という意味なのですが、範囲.Clearを実行時には、
上記Private Sub Worksheet_Changeを実行させなくていい(させない方がいい)
ということです。
以下、蛇足になりますが、、、。
システムのデザインの面で妥協点を見つけられるのであれば、
VBAで色付けする代りに条件付き書式で対応する方が簡単で管理しやすい、
(なるべくシートイベントに頼らないほうがいい)
というのは、私も賛同できる考え方です。
でも例えば、他のアプリケーションからコピペしたものなどは、
背景色以外の様々な書式設定を踏襲することを避ける意味で、
.ClearContentsメソッドではなく、.Clearメソッドを用いる方が、
却って効率的なケースはあると思います。
# 仮にですけれど、.Clearに代るメソッドに、引数を指定して、
条件付き書式以外のすべてをクリアできる、
なんて、新しい機能を誰か作ってくれたなら、もっと簡単なのでしょうけれども。
一応、そういう想定(事情は色々あるでしょう、という意味)で、
私はオーダー通りにお応えしていますので。
まぁでも、上に挙げた「イベントの発行を抑止」の件などもそうですが、
> VBAでクリア処理しています
そちらのマクロの記述がどんな感じか、気にはなります。
とは言え実物を見ずにはアドバイスするのも難しいですから、
こちらからは手出し出来ないことが多いんですよね。
詰まる所、その人に合ったスタイルで、
自分で管理できる内容で、仕様が満たされていて、問題なく動くなら、
それが正解でいいと私は思いますので。
cj_moverさん、ありがとうございます。
思っている通りに色を付けることが出来ました。
知識不足、勉強不足を実感致しました。
>理解に自信持てなさそうな関数、メソッド、プロパティなどがもしあれば、
>VBE画面上で、各キーワードにカーソルを当てて、F1 キーを押すなどして、
>VBAのヘルプの内容程度は、浚っておいてください。
はい。しっかり確認して勉強致します。
.Clearメソッドでクリアしていたので条件付き書式がクリアされていました。
.ClearContentsに変更するとクリアされませんでした。
>一応、そういう想定(事情は色々あるでしょう、という意味)で、
>私はオーダー通りにお応えしていますので。
はい。条件付き書式は使用しない方向で進めたいと考えていました。
>詰まる所、その人に合ったスタイルで、
>自分で管理できる内容で、仕様が満たされていて、問題なく動くなら、
>それが正解でいいと私は思いますので。
あたたかいお言葉と丁寧な解説に感謝しています。
もっと勉強しようと思いました。
本当に本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Excel(エクセル) Excelについて▶あるセルに文字を入力すると、別のセルに色がつく(条件付き書式) 1 2022/03/27 16:43
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- Visual Basic(VBA) エクセル365のVBAで困っています。どう修正したらよいか添削をお願いします 2 2023/05/03 17:35
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) エクセル VBA 条件によるセル点滅 お詳しい方 ご教授をお願いします。 Excelファイルにて 現 1 2022/11/03 15:53
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セルを結合したA4とA5の条件付...
-
色のリンクは出来ますか?【エク...
-
Excelで表を作り、自動で今月の...
-
excel:条件付き書式の適用範囲...
-
左列の文字の色と同じ文字の色...
-
エクセル 条件付書式で時刻の...
-
Excel2010 日付列を結合した予...
-
EXCELで2つの条件設定で別のセ...
-
ある倍数だけを塗りつぶす方法 ...
-
Excelの塗りつぶしの反映
-
【Excel】ガントチャートの作成...
-
Excelで社歴管理をしており4年...
-
Excelで隣のセルを参照し...
-
条件付き書式のやり方。隣のセ...
-
エクセルの折られたセルを戻したい
-
エクセル 条件付き書式が反映さ...
-
条件付書式の一括コピーは可能...
-
エクセルの条件付き書式による...
-
(エクセル)該当の場合、自動で...
-
条件付書式で特定のセルに数値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セルを結合したA4とA5の条件付...
-
excel:条件付き書式の適用範囲...
-
色のリンクは出来ますか?【エク...
-
Excelで表を作り、自動で今月の...
-
Excelで社歴管理をしており4年...
-
ある倍数だけを塗りつぶす方法 ...
-
左列の文字の色と同じ文字の色...
-
エクセル 条件付書式で時刻の...
-
条件付き書式のやり方。隣のセ...
-
【Excel】ガントチャートの作成...
-
数字を入力するとセルに色が付...
-
エクセルの折られたセルを戻したい
-
Excelの塗りつぶしの反映
-
Excel2010 日付列を結合した予...
-
Excelで隣のセルを参照し...
-
エクセルの条件付き書式による...
-
EXCELで2つの条件設定で別のセ...
-
Excelで、期限切れのリストが一...
-
エクセルで
-
エクセル 文字列に数字を含む場...
おすすめ情報