[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Select Caseについて』(まな)
Private Sud Worksheet_Change(ByVal Trget As Rang)
Dim c As Renge
Dim s As Renge
For Each c In Target
SelectCase c.Column
Case 8
Sheets("Sheet2").Cells((c.Row-5)*3+2,c.Column-1).Value=c.Value
End Select
Next
Select Case c.Column
Case 1: s = "Aさん" Case 2: s = "Bさん" Case 3: s = "Cさん" Case Else: s ="" End Select End Sub
オブジェクト変数またはWithブロック変数が設定されてません
になってしまいます、どう変えれば良いですか、教えてください。
シート1のH列に1を入力、シート2のG列に1は表示されますがAさんと表示したいです
よろしくお願いいたします。
未熟です
< 使用 Excel:Excel2007、使用 OS:Windows7 >
■2
>シート1のH列に1を入力、シート2のG列に1は表示されますがAさんと表示したいです
ちょっと理解できませんが、推測含めて上記の部分を修正してみるとこんな感じでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
Stop 'ブレークポイントの代わり
Dim c As Range
Dim s As Range
If Not Intersect(Target, Range("H6", Cells(Rows.Count, "H"))) Is Nothing Then
For Each c In Intersect(Target, Range("H6", Cells(Rows.Count, "H")))
Set s = Sheets("Sheet2").Cells((c.Row - 5) * 3 + 2, "G")
Select Case c.Value
Case 1: s.Value = "Aさん"
Case 2: s.Value = "Bさん"
Case 3: s.Value = "Cさん"
Case Else: s.Value = ""
End Select
Next c
End If
End Sub
(もこな2 ) 2020/07/26(日) 09:55
の外にあるからではないでしょうか? (uu) 2020/07/26(日) 10:20
(まな) 2020/07/26(日) 15:46
ポイントはIntersectメソッドの役割を理解するところじゃないでしょうか。
【参考】 http://officetanaka.net/excel/vba/tips/tips118.htm
また、元のコードのように、「c.Column-1」でもよいと思いますが、一つ左のセルを表現するならば、対象セル.Offset(0,-1)という書き方も可能ですね。
(もこな2 ) 2020/07/26(日) 17:05
For Each c In Intersect(Target, Range("H6:K6:N6", Cells(Rows.Count, "H:K:N")))
ではおかしいですし、
If Intersect(Target, Range("H:K:N"), Rang) Is Nothing Then
ちょっと難しいです、助けてください。
(まな) 2020/07/27(月) 19:03
Intersect(Target, Range("H:H,K:K,N:N"), Rows("6:" & Rows.Count))
(もこな2) 2020/07/27(月) 20:10
Intersect(Target, Range("H:H,K:K,N:N"), Rows("6:" & Rows.Count))
配列?何でしょうか。
(まな) 2020/07/28(火) 18:59
Private Sub Worksheet_Change(ByVal Target As Range)
Stop 'ブレークポイントの代わり
Dim 監視対象 As Range
Dim 操作対象 As Range
Dim c As Range
Dim s As Range
Set 監視対象 = Intersect(Range("H:H,K:K,N:N"), Rows("6:" & Rows.Count))
MsgBox 監視対象.Address(External:=True)
Set 操作対象 = Intersect(Target, 監視対象)
If Not 操作対象 Is Nothing Then
For Each c In 操作対象
Set s = Sheets("Sheet2").Cells((c.Row - 5) * 3 + 2, c.Column - 1)
Select Case c.Value
Case 1: s.Value = "Aさん"
Case 2: s.Value = "Bさん"
Case 3: s.Value = "Cさん"
Case Else: s.Value = ""
End Select
Next c
End If
End Sub
ちなみに、intersectメソッドは「行列がクロス」ではなく、指定したセル範囲の重なる部分を返します。
(もこな2 ) 2020/07/28(火) 21:07
(1) ループ処理に入る前にH,K,N列以外を排除しておく (2) ループ処理の中でH,K,N列のみ処理をする
のどちらかになろうかと思います。
(1)については既に提示してますが、(2)ならばこんな感じにでしょうか。
Private Sub Worksheet_Change(ByVal Target As Range)
Stop 'ブレークポイントの代わり
Dim 操作対象 As Range
Dim c As Range
Dim s As Range
Dim MyRNG As Range
Set 操作対象 = Intersect(Target, Range("H6:N" & Rows.Count))
If Not 操作対象 Is Nothing Then
For Each c In 操作対象
Select Case c.Column
Case 8, 11, 14
'「c」に取り出されたセルが、H,K,列ならば処理する
Set s = Sheets("Sheet2").Cells((c.Row - 5) * 3 + 2, c.Column - 1)
Select Case c.Value
Case 1: s.Value = "Aさん"
Case 2: s.Value = "Bさん"
Case 3: s.Value = "Cさん"
Case Else: s.Value = ""
End Select
Case Else '←下記の理由により省略可能
'「c」に取り出されたセルが、H,K,N列でないときは何もしない
End Select
Next c
End If
End Sub
(もこな2 ) 2020/07/29(水) 07:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.