Excelで以下チェック機能をマクロ化しました。
・元々ある列名(品番・収容数・税率)に対し、新たな列名が追加された場合、
その列全てをエラーとして赤く反転させたい。
・VBAは「品番・収容数・税率」の3つの列名以外が出てきたら、
その列を丸ごと赤くエラーで反転させるというロジック
上記実現にあたり、教えてgooの皆様から頂いた回答をもとに
以下の通りVBAをチェックマクロの中に組み込みました。
しかしながら、処理を回すとエラーの出るべき列以外でも赤く反転してしまうことが判明しました。
「品番・収容数・税率」の3つの列名以外が出てきたら、その列のみを赤く反転させるためには、マクロのどこを修正すればよいのでしょうか。御教示願います。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sin As Long
With ActiveSheet.UsedRange
sin = .Columns(.Columns.Count).Column
End With
MsgBox (sin)
Application.EnableEvents = False
Cells.Interior.ColorIndex = xlNone
If Cells(1, 1).Value <> "品番" Then Columns(1).Interior.ColorIndex = 3
If Cells(1, 2).Value <> "収容数" Then Columns(2).Interior.ColorIndex = 3
If Cells(1, 3).Value <> "税率" Then Columns(3).Interior.ColorIndex = 3
If sin >= 4 Then
Range(Cells(1, 4), Cells(Rows.Count, sin)).Interior.ColorIndex = 3
End If
Application.EnableEvents = True
End Sub
No.1
- 回答日時:
こんばんは!
一例です。
1行目に他の項目名を入力 → Enter でその列が赤くなるようにしてみました。
(逆に言えば列挿入しても項目名が入るまでマクロは実行されません)
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Rows(1)) Is Nothing Then Exit Sub
Dim j As Long, myStr As String
myStr = "品番、収容数、税率"
For j = 1 To UsedRange.Columns.Count
If Cells(1, j) <> "" Then
If InStr(myStr, Cells(1, j)) = 0 Then
Cells(1, j).EntireColumn.Interior.ColorIndex = 3
End If
Else
Cells(1, j).EntireColumn.Interior.ColorIndex = xlNone
End If
Next j
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.2ベストアンサー
- 回答日時:
9/19のご質問にも、同様のものがありましたね。
この質問は、最初、挿入メニューを禁じたら良いと思ったのですが、挿入したら、範囲に色を付けることが目的ですから、インターネットで日英を探しても、他に類のない質問です。文字をつけるのは関係がありません。
次に、自作 イベントを設ければよいと考えましたが、負担が大きすぎる可能性があるので辞めました。
本来は、メニューを操作して、一部は使えないようにし、OnAction としてつければよいのですが、今の私のレベルでは、中途半端になってしまいます。やむをえず以下のようなスタイルにしました。ただ、一般的にシートの列挿入や、右クリックメニュー等は、操作できます。いずれは、ちゃんとしたものができるだろうとは思っています。
'ThisWorkbook にしました。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim mTbl As Range
Dim myCol As Range
Dim Lo As Variant
If Target.CurrentRegion.Cells.Count < 3 Then Exit Sub
If Target.CurrentRegion.Columns.Count < 3 Then Exit Sub
Set myRng = Target
If Target.Count < 3 Then Exit Sub
Set mTbl = Target.CurrentRegion
On Error Resume Next
Set Lo = Intersect(Sh.ListObjects(1).Range, Target)
On Error GoTo 0
If IsObject(Lo) Then
MsgBox "テーブルを対象としてはできません。", vbExclamation: Exit Sub
End If
Set myCol = Intersect(myRng.Columns, mTbl)
If Application.CountBlank(myCol) = myCol.Count Then
mTbl.Interior.ColorIndex = xlColorIndexNone
Intersect(myRng, mTbl).Columns.Interior.ColorIndex = 3
Else
mTbl.Interior.ColorIndex = xlColorIndexNone
End If
ErrHandler:
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELにて複数列を同条件(色)...
-
行数が不規則な一週間ごとの合...
-
エクセルで表示された値だけ行...
-
商品の単価と個数を入力するだ...
-
エクセル マクロ 貼り付け先が...
-
[Excel VBA]空白セル以外に連番...
-
《エクセル2000》A列・B列の和...
-
最終行から上10行をコピーする...
-
シート保護の状態で行の追加を...
-
Excel VBAで日にちを入力して線...
-
Excelの非表示列も含めてコピー
-
一行おきにコピーするマクロが...
-
エクセルでマクロを使った特定...
-
A列の一つがH列の枠組みの中に...
-
【エクセル】無作為抽出
-
【Excelマクロ】フォルダ名の一...
-
excelに入力したURLに、一括し...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
A1セルに入力したら、入力時間...
-
参照先セルに値が入っていない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELにて複数列を同条件(色)...
-
一行おきにコピーするマクロが...
-
エクセルで行挿入した際、自動...
-
行数が不規則な一週間ごとの合...
-
Excelの非表示列も含めてコピー
-
エクセル マクロ 貼り付け先が...
-
シート保護の状態で行の追加を...
-
エクセルで表示された値だけ行...
-
エクセルで空白以外のセルの値...
-
エクセル VBA 指定の範囲内をコ...
-
エクセルの関数について(日付で...
-
[Excel VBA]空白セル以外に連番...
-
エクセルで反転コピー
-
【初歩】エクセルでのマクロ(...
-
エクセルで縦に長い表を印刷
-
エクセルVBA 複数列をコピーす...
-
マクロで値がある列までコピー
-
Excel VBAで日にちを入力して線...
-
《エクセル2000》A列・B列の和...
-
マクロ ScrollColumn について
おすすめ情報