![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
質問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も見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
【お題】斜め上を行くスキー場にありがちなこと
運営も客も一流を通り越して斜め上を行くスキー場にありがちなことを教えて下さい。
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
-
4
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
5
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
6
VBAコードのインデント表示
Visual Basic(VBA)
-
7
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
8
VBAのループ処理について教えてください
Visual Basic(VBA)
-
9
VBA 入力箇所指定方法
Visual Basic(VBA)
-
10
VBA Application.Matchについての質問です
Visual Basic(VBA)
-
11
不要項目の行削除方法について
Visual Basic(VBA)
-
12
vbaマクロについて
Visual Basic(VBA)
-
13
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
14
エクセルVBA
Visual Basic(VBA)
-
15
プログラミング
Visual Basic(VBA)
-
16
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
17
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
18
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
19
vbe でのソースコード参照(msgbox)について
Excel(エクセル)
-
20
Excelの計算が合いません。 諸事情で会計の簡素な購入・販売諸元表を作っているのですが、一つの項目
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのマクロについて教えてく...
-
マクロVBAです。 どなたかコー...
-
VBAについてです。 どなたかご...
-
以下のプログラムの実行結果は...
-
[Excel VBA]特定の条件で文字を...
-
Excel VBA 定義されたプロージ...
-
VBAでエクセルのテキストデータ...
-
現在のブックを閉じないで、マ...
-
VBA 最終行の取得がうまくいか...
-
【ExcelVBA】値を変更しながら...
-
Excel 範囲指定スクショについ...
-
エクセルのマクロについて教え...
-
Excelマクロで、ピボットテーブ...
-
エクセルのVBAについて教えてく...
-
【VBA】 結合セルに複数画像と...
-
VBAでCOPYを繰り返すと、処理が...
-
2つのマクロでチェックボックス...
-
Vba WorkBooks.Openについて教...
-
質問58753 このコードでうまく...
-
エクセルのVBAコードについて教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.net 文字列から日付型へ変更...
-
VBA 最終行の取得がうまくいか...
-
VBAでエクセルのテキストデータ...
-
【ExcelVBA】5万行以上のデー...
-
VBAについてです。 データのチ...
-
エクセルVBAで在庫の組み換え処...
-
VBAから書き込んだ条件付き初期...
-
エクセルのVBAコードについて教...
-
VBAでユーザーフォームを指定回...
-
エクセルのVBAについて教えてく...
-
vbaマクロについて
-
ExcelのVBAコードについて教え...
-
【VBA】 結合セルに複数画像と...
-
WindowsのOutlook を VBA から...
-
質問58753 このコードでうまく...
-
ExcelのVBAコードについて教え...
-
Excel VBAについて。こんな動作...
-
[Excel VBA]特定の条件で文字を...
-
[VB.net] ボタン(Flat)のEnable...
-
ExcelからVisual Basicを開くと...
おすすめ情報