
質問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)
-
役所でもらった書類をエクセル化するには? 役所に申請する用紙があります。A4で表になっていて枠内に文
その他(Microsoft Office)
-
-
4
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
5
算術演算子「¥」の意味について
Visual Basic(VBA)
-
6
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
7
VBAでFOR NEXT分を Application.OnTimeを使って
Visual Basic(VBA)
-
8
VBAコードのインデント表示
Visual Basic(VBA)
-
9
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
10
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
11
VBAについてです。 どなたかご教示いただけないでしょうか。 データのチェックシートを作成しています
Visual Basic(VBA)
-
12
プログラマー達は何故、プログラムを入れるフォルダーに容量制限があるのを知らない?
C言語・C++・C#
-
13
VBAのループ処理について教えてください
Visual Basic(VBA)
-
14
不要項目の行削除方法について
Visual Basic(VBA)
-
15
vbaマクロについて
Visual Basic(VBA)
-
16
VBA 入力箇所指定方法
Visual Basic(VBA)
-
17
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
18
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
19
VBA の単語の意味を教えて下さい。
Excel(エクセル)
-
20
【マクロ】Call関数で呼び出した場合、共通の変数宣言は、省略できますか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
-
【ExcelVBA】5万行以上のデー...
-
Excelのマクロについて教えてく...
-
マクロVBAについて、コードを教...
-
【マクロ】値を渡されたプロシ...
-
【マクロ】切取りの場合、形式...
-
改行文字「vbCrLf」とは
-
(EXCEL超初心者)EXCELの関数(ま...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
Excelマクロで使うVBAコードを...
-
Vba FileSystemObject オブジェ...
-
VBAの質問(Msgboxについて)です
-
ExcelのVBAコードについて教え...
-
VBAでエクセルのテキストデータ...
-
ExcelVBAでパワポを操作したい
-
エクセルVBA 検索結果を隣のシ...
-
Excelのマクロについて教えてく...
-
ダブルクリックで貼り付けた画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのマクロについて教えてく...
-
現在のブックを閉じないで、マ...
-
算術演算子「¥」の意味について
-
VBAの「To」という語句について
-
以下のプログラムの実行結果は...
-
マクロVBAです。 どなたかコー...
-
VBAでFOR NEXT分を Application...
-
VBAについてです。 どなたかご...
-
質問58753 このコードでうまく...
-
ダブルクリックで貼り付けた画...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
エクセルVBA 段落番号自動取得方法
-
えくせるのVBAコードについて教...
-
ExcelのVBAコードについて教え...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】モジュール変数の記...
-
Vba FileSystemObject オブジェ...
-
Vba WorkBooks.Openについて教...
おすすめ情報