ここから本文です

Excel マクロについて [経緯] ①https://detail.chiebukuro.yahoo.co.jp/qa/questi...

アバター

ID非公開さん

2017/12/2800:16:30

Excel マクロについて

[経緯]
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q121835596...

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q131836075...

[希望]③
上記②より以下ア)~エ)を個別に共存して機能させたい.

ア)A1:A25に値を入力した場合
With Target
If .Value = 7 Then .Offset(, 2) = "○"
If .Value = 6 Then .Offset(, 2) = "△"
If .Value = 5 Then .Offset(, 2) = "×"
End With

イ)結合したA26とA27に値(7~5)を入力した場合
※)C26とC27は結合していない
7のときC26に "○",C27に"●",D26に"□"
6のときC26に"△",C27に"▲",D26に"■"
5のときC26に "×",C27に"××",D26に"×××"

ウ)結合したA28とA29に値(7~5)を入力した場合
※)C28とC29は結合していない
7のときC28に "○",C29に"●"
6のときC28に"△",C29に"▲"
5のときC28に "×",C29に"××"

エ)A30:A100に値を入力した場合
With Target
If .Value = 7 Then .Offset(, 2) = "○"
If .Value = 6 Then .Offset(, 2) = "△"
If .Value = 5 Then .Offset(, 2) = "×"
If .Value = 4 Then .Offset(, 2) = "a"
If .Value = 3 Then .Offset(, 2) = "b"
If .Value = 2 Then .Offset(, 2) = "c"
If .Value = 1 Then .Offset(, 2) = "d"
End With

[現状]
・ア),エ):どちらか一方であれば機能している.
・イ),ウ):下記について分かりませんでした
Offsetで異なる複数カ所のセルを指定する方法,
Offsetで起点となるセルが結合していている場合の対応

上記,実現するにはどのようなコードを入力すれば良いでしょうか.
煩雑で恐縮ですがご検討の程,宜しくお願い申し上げます.

閲覧数:
110
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

m3_********さん

2017/12/2816:36:44

> Offsetで起点となるセルが結合していている場合の対応

今回のケース限定ですが

Offset を使わず絶対アドレスを使用する。
Cells を使用する。
Offset を2段重ねで使用する。
例) .Offset(, 2).Offset(1) = "●"
等々。


相対アドレス に .Cells を使用するのは少々気持ちが悪いですが
(.Cells(-1) が2行上になるなど)
やってみました。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Long
If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub

R = Target.Row
With Target
If .Value = 7 Then .Cells(, "C") = "○"
If .Value = 6 Then .Cells(, "C") = "△"
If .Value = 5 Then .Cells(, "C") = "×"

Select Case R
Case 30 To 100
If .Value = 4 Then .Cells(, "C") = "a"
If .Value = 3 Then .Cells(, "C") = "b"
If .Value = 2 Then .Cells(, "C") = "c"
If .Value = 1 Then .Cells(, "C") = "d"
Case 26, 28
Select Case .Value
Case 7
.Cells(2, "C") = "●"
If R = 26 Then .Cells(, "D") = "□"
Case 6
.Cells(2, "C") = "▲"
If R = 26 Then .Cells(, "D") = "■"
Case 5
.Cells(2, "C") = "××"
If R = 26 Then .Cells(, "D") = "×××"
Case Else
End Select
Case Else
End Select
End With
End Sub

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

fro********さん

2017/12/2811:05:41

結合しているとOffsetが使えないので、列を指定しています。
※抜けがあったので回答を取り消して再回答しています。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
With Target
If .MergeCells Then
If .Row = 26 Then
Select Case .Value
Case 7
Range("C" & .Row) = "○"
Range("C" & .Row + 1) = "●"
Range("D" & .Row) = "□"
Case 6
Range("C" & .Row) = "△"
Range("C" & .Row + 1) = "▲"
Range("D" & .Row) = "■"
Case 5
Range("C" & .Row) = "×"
Range("C" & .Row + 1) = "××"
Range("D" & .Row) = "×××"
End Select
ElseIf .Row = 28 Then
Select Case .Value
Case 7
Range("C" & .Row) = "○"
Range("C" & .Row + 1) = "●"
Case 6
Range("C" & .Row) = "△"
Range("C" & .Row + 1) = "▲"
Case 5
Range("C" & .Row) = "×"
Range("C" & .Row + 1) = "××"
End Select
End If
Else
If .Row < 26 Then
Select Case .Value
Case 7
Range("C" & .Row) = "○"
Case 6
Range("C" & .Row) = "△"
Case 5
Range("C" & .Row) = "×"
End Select
ElseIf .Row > 29 And .Row < 101 Then
Select Case .Value
Case 7
Range("C" & .Row) = "○"
Case 6
Range("C" & .Row) = "△"
Case 5
Range("C" & .Row) = "×"
Case 4
Range("C" & .Row) = "a"
Case 3
Range("C" & .Row) = "b"
Case 2
Range("C" & .Row) = "c"
Case 1
Range("C" & .Row) = "d"
End Select
End If
End If
End With
End Sub

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる