• ベストアンサー

エクセルマクロ 特定の文字入力の際の処理

お世話になります。 エクセルマクロで、sheet1のE列の6~30行に指定する文字が入力された際、 B列のその同じ行にある文字を取得し、その取得した文字をsheet3のC6から K6まで書き出していきたいのですが、どのようにしたらよいでしょうか? if関数も考えましたが、条件の設定に困ってしまいます。 マクロで良い方法があれば教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんばんは 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

na714
質問者

お礼

いつも完成度の高いご回答ありがとうございます。 求めていたマクロでした。 参考書で自己流で勉強していますが、応用となると 限界が出てきてしまいます。 ご回答者様のような経験豊かな方のコードを読んで 内容を理解していく感じです。 またお世話になると思います。 その際はまたご教授お願い致します。

その他の回答 (2)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

追伸 大文字小文字を区別する場合としない場合で 「i」を求めるコードを使い分けて下さい。

na714
質問者

お礼

ushi2015さん。 すみません、解答を締め切ったのですが、もう一つご回答お願い 致します。 取得した文字をsheet3のC6からK6までに4列毎に書き出して いく場合にはコードをどのようにしていけば良いのでしょうか。 C6→H6→M6→・・・ すみません。ご迷惑ですが、お願い致します。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 入力セルは25個有るのに、書き出しセルが9個しかないのは何故ですか? 行位置に関係なく入力した順に書き出すのですか?

na714
質問者

補足

ご回答ありがとうございます。 補足します。 書き出しセルが少ないのは、入力セル中に該当の物がおそらく 多くてもその程度とみているためです。 該当するものは不特定で発生しない時もあり得ます。 行位置には関係なく順に書き出していくでOKです。 再度よろしくお願い致します。

関連するQ&A