
質問58753
このコードでうまく動作しません。どうしたら良いですか
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim mapping As Object
Dim targetCell As Range
Dim currentValue As String, prefix As String
Dim cell As Range
' シートを指定(適宜変更)
Set ws = ThisWorkbook.Sheets("Sheet1")
' DセルとBセルの対応関係
Set mapping = CreateObject("Scripting.Dictionary")
mapping.Add "D3", "B80"
mapping.Add "D4", "B82"
mapping.Add "D6", "B85"
mapping.Add "D8", "B87"
mapping.Add "D12", "B90"
mapping.Add "D21", "B92"
mapping.Add "D25", "B94"
mapping.Add "D29", "B96"
mapping.Add "D31", "B98"
mapping.Add "D1", "B100"
mapping.Add "D2", "B102"
mapping.Add "D9", "B104"
mapping.Add "D11", "B106"
mapping.Add "D33", "B108"
' 変更されたセルが D1:D33 以外の場合は処理しない
If Intersect(Target, ws.Range("D1:D33")) Is Nothing Then Exit Sub
' 変更されたセルが複数ある場合は処理しない(Ctrl + V でも動作するが安全策)
If Target.Cells.Count > 1 Then Exit Sub
On Error GoTo ErrorHandler ' エラーハンドリング開始
Application.EnableEvents = False
' ① 指定セルが空白なら色を付ける
Dim rngYellow As Variant, rngBlue As Variant, rngGreen As Variant
rngYellow = Array("D3", "D4", "D6", "D8", "D12")
rngBlue = Array("D1", "D2", "D9", "D11", "D33")
rngGreen = Array("D21", "D25", "D29", "D31")
' 黄色のセル(D3, D4, D6, D8, D12)
For Each cell In rngYellow
If ws.Range(cell).Value = "" Then
ws.Range(cell).Interior.Color = RGB(255, 255, 0) ' 黄色
Else
ws.Range(cell).Interior.ColorIndex = xlNone ' 色リセット
End If
Next cell
' 青色のセル(D1, D2, D9, D11, D33)
For Each cell In rngBlue
If ws.Range(cell).Value = "" Then
ws.Range(cell).Interior.Color = RGB(0, 0, 255) ' 青色
Else
ws.Range(cell).Interior.ColorIndex = xlNone ' 色リセット
End If
Next cell
' 緑色のセル(D21, D25, D29, D31)
For Each cell In rngGreen
If ws.Range(cell).Value = "" Then
ws.Range(cell).Interior.Color = RGB(0, 255, 0) ' 緑色
Else
ws.Range(cell).Interior.ColorIndex = xlNone ' 色リセット
End If
Next cell
' ② Bセルの「:」の後ろにDセルの値をセット
If mapping.exists(Target.Address(False, False)) Then
Set targetCell = ws.Range(mapping(Target.Address(False, False)))
currentValue = targetCell.Value
' 「:」の位置を探す
If InStr(currentValue, ":") > 0 Then
prefix = Left(currentValue, InStr(currentValue, ":")) ' 「:」までの部分を取得
If Target.Value = "" Then
' Dセルが空なら「:」の後ろを消去
targetCell.Value = prefix
Else
' Dセルに値がある場合は「:」の後ろに値をセット
targetCell.Value = prefix & " " & Target.Value
End If
Else
' 万が一「:」がない場合の処理
If Target.Value = "" Then
targetCell.Value = ""
Else
targetCell.Value = Target.Value
End If
End If
End If
' ③ 貼り付け時の書式設定
For Each cell In Target
' フォント設定(UDPゴシックが存在する場合のみ適用)
On Error Resume Next
cell.Font.Name = "UDPゴシック"
On Error GoTo 0 ' フォントが存在しない場合のエラーを無視して続行
' セルの格子線をつける
With cell.Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
' 中央揃え(水平 & 垂直)
cell.HorizontalAlignment = xlCenter
cell.VerticalAlignment = xlCenter
Next cell
ExitHandler:
Application.EnableEvents = True
Exit Sub
ErrorHandler:
' エラーが発生した場合、イベントを有効に戻して終了
MsgBox "エラーが発生しました:" & Err.Description, vbExclamation, "エラー"
Resume ExitHandler
End Sub
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
されたい事は分からないけれど・・・
コードを読んで明らかに違うと思う事です
rngYellow = Array("D3", "D4", "D6", "D8", "D12")
rngBlue = Array("D1", "D2", "D9", "D11", "D33")
rngGreen = Array("D21", "D25", "D29", "D31")
For Each cell In
Dim cell As Range
変数 cellは RangeObjectではないです
Stringになりますが・・・For EachなのでVariantとしなくてはなりません
Dim cell As Variant
に変更してみてください
さらなる問題があるかも知れませんがとりあえず
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA Private Sub Worksheet_Changeで 1 2024/05/01 16:59
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAの間違い教えて下さい 5 2024/08/03 21:35
- Excel(エクセル) エクセルで連勤チェックをしたいです。 7 2023/12/25 09:14
- Visual Basic(VBA) Excelのマクロについて教えてください。 2 2024/11/21 10:13
- Visual Basic(VBA) 重複確認 2 2024/06/30 12:17
- Visual Basic(VBA) 以下のコードを実行しても、オブジェクト変数または、withブロック変数が設定されていませんとエラーが 1 2024/03/07 16:21
- Visual Basic(VBA) select case について 1 2023/09/24 23:14
- Visual Basic(VBA) chatGPTで質問してみた エクセルのVBAについて 2 2023/10/24 07:37
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAの「To」という語句について
Visual Basic(VBA)
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
算術演算子「¥」の意味について
Visual Basic(VBA)
-
-
4
役所でもらった書類をエクセル化するには? 役所に申請する用紙があります。A4で表になっていて枠内に文
その他(Microsoft Office)
-
5
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
6
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
7
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
8
VBAでFOR NEXT分を Application.OnTimeを使って
Visual Basic(VBA)
-
9
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
10
VBAのループ処理について教えてください
Visual Basic(VBA)
-
11
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
12
不要項目の行削除方法について
Visual Basic(VBA)
-
13
vbaマクロについて
Visual Basic(VBA)
-
14
プログラマー達は何故、プログラムを入れるフォルダーに容量制限があるのを知らない?
C言語・C++・C#
-
15
VBAの質問(Msgboxについて)です
Visual Basic(VBA)
-
16
エクセルの改行について
Visual Basic(VBA)
-
17
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
18
【マクロ】コードを少しでも、減らする為には
Excel(エクセル)
-
19
VBA 入力箇所指定方法
Visual Basic(VBA)
-
20
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
エクセルのVBAコードと数式につ...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【VBA】 結合セルに複数画像と...
-
vbsでのwebフォームへの入力制限?
-
算術演算子「¥」の意味について
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
ダブルクリックで貼り付けた画...
-
VBAの「To」という語句について
-
VBAでユーザーフォームを指定回...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報