- ベストアンサー
エクセルマクロ 特定の文字入力の際の処理
お世話になります。 エクセルマクロで、sheet1のE列の6~30行に指定する文字が入力された際、 B列のその同じ行にある文字を取得し、その取得した文字をsheet3のC6から K6まで書き出していきたいのですが、どのようにしたらよいでしょうか? if関数も考えましたが、条件の設定に困ってしまいます。 マクロで良い方法があれば教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは Sheet1のシートタブを右クリックしてコードの表示でVBEペインを 表示して下記コードを貼り付けて下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long Dim r As Range Const 指定文字 As String = "X" Set r = Range("E6:E30") If Target.Count > 1 Then Exit Sub If Intersect(r, Target) Is Nothing Then Exit Sub End If If Target.Value <> 指定文字 Then Exit Sub Else '大文字小文字を区別する場合 i = ActiveSheet.Evaluate( _ "SumProduct(EXACT(" & r.Address & ",""" & 指定文字 & """)*1)") '大文字小文字を区別しない場合 i = WorksheetFunction.CountIf(r, 指定文字) Application.EnableEvents = False Worksheets("Sheet3").Cells(6, i + 2) = _ Target.Offset(, -3) Application.EnableEvents = True End If End Sub
その他の回答 (2)
- ushi2015
- ベストアンサー率51% (241/468)
追伸 大文字小文字を区別する場合としない場合で 「i」を求めるコードを使い分けて下さい。
お礼
ushi2015さん。 すみません、解答を締め切ったのですが、もう一つご回答お願い 致します。 取得した文字をsheet3のC6からK6までに4列毎に書き出して いく場合にはコードをどのようにしていけば良いのでしょうか。 C6→H6→M6→・・・ すみません。ご迷惑ですが、お願い致します。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 入力セルは25個有るのに、書き出しセルが9個しかないのは何故ですか? 行位置に関係なく入力した順に書き出すのですか?
補足
ご回答ありがとうございます。 補足します。 書き出しセルが少ないのは、入力セル中に該当の物がおそらく 多くてもその程度とみているためです。 該当するものは不特定で発生しない時もあり得ます。 行位置には関係なく順に書き出していくでOKです。 再度よろしくお願い致します。
お礼
いつも完成度の高いご回答ありがとうございます。 求めていたマクロでした。 参考書で自己流で勉強していますが、応用となると 限界が出てきてしまいます。 ご回答者様のような経験豊かな方のコードを読んで 内容を理解していく感じです。 またお世話になると思います。 その際はまたご教授お願い致します。