
質問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で質問しましょう!
この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マクロについて
Visual Basic(VBA)
-
16
VBAの質問(Msgboxについて)です
Visual Basic(VBA)
-
17
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
18
【マクロ】コードを少しでも、減らする為には
Excel(エクセル)
-
19
エクセルの改行について
Visual Basic(VBA)
-
20
VBA コードどこがおかしいですか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA ユーザーフォーム ボタンク...
-
Vba 型が一致しません(エラー1...
-
【ExcelVBA】5万行以上のデー...
-
VBAでCOPYを繰り返すと、処理が...
-
Excel VBA 選択範囲の罫線色の...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
testファイル内にある複数のpng...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
【VBA】 結合セルに複数画像と...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
-
改行文字「vbCrLf」とは
-
エクセルのVBAコードと数式につ...
-
【マクロ】変数を使った、文字...
-
Excelマクロで使うVBAコードを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロVBAについて、コードを教...
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
おすすめ情報