ここから本文です

エクセルの記述です

gol********さん

2012/1/116:22:34

エクセルの記述です

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range, myIndex As Long, i As Long, cnt As Long
Dim fr As Variant, flg As Boolean

Set r = Target.Cells(1, 1)
If Target.Cells(1, 1).Address <> "$D$2" And _
(r.Row >= 3 Or r.Column <= 5 Or r.Column >= 12) Then Exit Sub

On Error Resume Next
Application.EnableEvents = False

If r.Row = 1 Then
myIndex = r.Offset(1, 0).Row * r.Column - 11
Else
myIndex = r.Row * r.Column - 10
End If
If myIndex = -2 Then myIndex = 0

fr = Me.Range("D3", Me.Range("D" & Me.Rows.Count).End(xlUp))

cnt = 0: flg = False

For i = 1 To UBound(fr)
If InStr(1, fr(i, 1), Me.Range("D1").Value, vbTextCompare) > 0 Then
If myIndex = cnt Then
Me.Range("D" & i + 2).EntireRow.Cells(1, 1).Select
flg = True
Exit For
End If
cnt = cnt + 1
End If
Next i

If Not flg Then Me.Range("D1").Select
Application.EnableEvents = True

End Sub






Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.EnableEvents = False

n = 0
If Target.Address = "$A$2" Then n = 1
If Target.Address = "$A$4" Then n = 2
If Target.Address = "$A$5" Then n = 3
If Target.Address = "$A$6" Then n = 4
If Target.Address = "$A$7" Then n = 5
If Target.Address = "$A$8" Then n = 6
If Target.Address = "$A$9" Then n = 7
If Target.Address = "$A$10" Then n = 8
If Target.Address = "$A$11" Then n = 9

If n <> 0 Then
With Range("A1:IV61")
Set c = .Find(.Range("A1"))
For i = 1 To n - 1
Set c = .FindNext(c)
If c Is Nothing Then Exit For
Next i
End With
Range(c.Address).Select
ActiveCell.Offset(0, 2).Range("A1").Select

End If
Application.EnableEvents = True


End Sub


が入ったそれぞれのシート状況で


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
End Sub
を使って条件付き書式から =CELL("ROW")=ROW()
を用い、選択したセルの行に色をつけるにはどのように構文を書きなおす必要があるでしょうか?

補足vcx000xcvさん が神がかっているのが分かったのですが、別別のシートなので

'セルが A2,A4:A11 の時の処理
を消すと「Elseに対応するIFがありません」と表示になり、
また別シートで片方の'セルが D2,F1:K2 の時の処理
を消すと「IFブロックに対応するENDIFがありません」
となります、、、、、、、でもサンプルは感激しました。

閲覧数:
459
回答数:
1
お礼:
100枚

違反報告

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

vcx********さん

編集あり2012/1/222:02:57

【補足】
IF構文を覚えたほうが良いですね。

IF ○○ Then △△ End IF '※1
もし ○○ が 正(True) なら △△ しなさい



IF ○○ Then △△ Else ◇◇ End IF
もし ○○ が 正(True) なら △△ しなさい、そうじゃない場合は ◇◇ しなさい

が基本形です。

もしもが2つ以上あった場合に Elseif をはさむ場合もあります。

IF ○○ Then △△ Elseif ◇◇ Then □□ End IF '※2
もし ○○ が 正(True) なら △△ しなさい、○○じゃなくて ◇◇ の場合は □□ しなさい

今回のサンプルは※2です。

「セルが A2,A4:A11 の時の処理」だけなら ElseIf から End IF の手前までを消します。(End IF は残す)
「セルが D2,F1:K2 の時の処理」だけなら、「セルが A2,A4:A11 の時の処理」のIFから Elseif の手前までを消して、ElseIf を IF に書き直します。

つまり ※1 の形の文にします。
IF で始まり Then を含んで End IF で閉じてないと構文エラーになります。



【元の回答】
我が道を行くですね。

書いてもらったコードをペタペタ貼っていっただけでは、上手く動かなくなるのは当然の帰結です。レスを入れても、そのレスは無視して「元の質問と関係ない補足を入れて放置」では、こんどは回答者の皆さんに放置されますよ。(前半のコードは見覚えがあるけど、、、)

提示のコードで Application.ScreenUpdating = True を入れたいなら、それぞれ End Sub の前にでも入れれば良いだけです。ただし、同じイベントプロシージャを同一モジュールで何回も使うことは出来ません。

何回も使えないので内部(Sub ~ End Subの中)で処理を分岐させます。このセルだったらこの処理、あのセルだったらあの処理、というようにセルによって違う処理をさせるため、IF 文 や Select Case 文などの条件式を使ってやりたい処理を分けます。どのセルでも一緒の処理で良いケースは、条件式の外に置くことで対応します。

サンプルマクロ.xls
http://firestorage.jp/download/31ac95c767519597883e5c8015c39a8abf4e...

質問した人からのコメント

2012/1/2 22:51:03

降参 不可能が可能になりました。事務作業が楽しくなりました。ありがとうございます。

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

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

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

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

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

閉じる

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

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

閉じる