• ベストアンサー

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

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

  • na714
  • お礼率52% (43/82)

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

  • ベストアンサー
  • 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

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

    お世話になります。 以前、下記質問をし、締め切ったのですが、もう一点、教えていただきたい点がありました。 質問 エクセルマクロで、sheet1のE列の6~30行に指定する文字が入力された際、 B列のその同じ行にある文字を取得し、その取得した文字をsheet3のC6から K6まで書き出していきたいのですが、どのようにしたらよいでしょうか? ご回答 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 このご回答を、 取得した文字をsheet3のC6からK6までに4列毎に書き出して いく場合にはコードをどのようにしていけば良いのでしょうか。 C6→H6→M6→・・・ すみません、再度お願い致します。

  • エクセルのマクロで入力文字を一文字ずつ並んだセルに入れる

    エクセルマクロ超初心者です。 エクセルVBAでユーザーフォームを作成しました。 テキストボックスに入力した文字列を「登録」ボタン押下後、エクセルシートのセルに一文字づつ入るようにするにはどうすれば良いでしょうか? 例えばテキストボックスに「kohiro」と入力するとエクセルのsheet1のA1「k」、B1「o」、C1「h」、D1「i」、E1「r」、F1「o」となるようにしたいのです。入力する文字数は0~30文字までで、その都度長さは変わります。どうやって、文字をばらせばいいのか、またどうやって可変長の文字列を指定したセルに入力すればいいのかわかりません。どうかよろしくお願いいたします。

  • エクセルでマクロを作りたいのですが上手くいきません

    エクセルで会社で使うファイルを作成していますが、ファイルサイズが大きくなりすぎたので、こういうマクロが作れないかと調べていたのですが、やり方がわからないので困っています。 わからないのは、入力シートのA列にデータを入力して、シート2のB列に自動的に表示する ことを自動的にやってくれるマクロです。 今はIF関数をシート2に入力している状態ですが、セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 (IF関数をあらかじめ入力しておくセル数がとてもたくさんある為) なお、入力シートA列がブランクの場合は、シート2のB列には何も表示されないようにしたいです。 大変困っております。よろしくお願いします。 

  • エクセルのマクロ(指定列の空白にひとつ上の文字を入力し続ける)

    エクセルのマクロを教えてください。 指定列の空白にひとつ上の文字を入力し続けるマクロです。 A列指定 A2からスタートし、1000行くらいあるデータ 空白があった場合ひとつ上の文字を入力 空白は、2行連続・3行連続となることもあるが大抵は1行空白 この場合、空白セルの上で一番近いデータをコピーする A列のデータは、文字・数字・日付と様々 1000行ある場合もあるが、それ以下の場合もあるので、10行空白が続いたらマクロが自動的に終了 エクセル2003使用 よろしくお願いいたします。

  • エクセルの関数で最終行の文字を取得したい

    エクセルの関数で、シート2のA1に、シート1のA列の最終行に入力されてる文字を取得したいのですが、どのような関数になるでしょうか?

  • EXCELの入力

    Excelの入力のことですが、行番号と列番号をそれぞれ別々 に入力したら、 その入力した行-列のところに指定の文字列or数値を 自動で入力されるような関数はないでしょうか。 教えてください。

  • エクセルマクロ、教えてください。

    エクセルマクロ、教えてください。 とても困っています 泣 だれかご教授をおねがいいたします。 画像のような表があり、マクロボタンを押すと、画像下のように文字列にして別シートに出力したいのですが、 賢い形で作ることが出来ません。 if文がとても多くなってしまいます。 繰り返し処理などあるようなのですが、難しくてついていけません。 だれかきれいなロジックを教えていただけないでしょうか。 お願いいたします! 条件として、 表は、いくつかあり、画像は果物4種類ですが、野菜8種類の表などにも流用できるマクロをくみたいです。 A商店を左から順番に文字列に格納して、""になるまで繰り返す・・・ ""がきたら、B商店へ・・・といった形でしょうか。 また、商店の数も不特定なので、こちらも""になるまで繰り返すという条件でお願いいたします! エクセル関数で出来るじゃんとおもうでしょうが、例として簡単なものに書き換えただけなので、 回答はぜひマクロでお願いいたします!

  • エクセルのマクロのことです。

    いつも、お世話になっております。 エクセルでシート1にデータがあります。 シート2のA1に入力した文字を含む行をオートフィルタで抽出する。 これをマクロを使ってできるでしょうか? 宜しくお願いいたします。

  • 自動入力マクロ教えてください

    sheet1のB列に数値を入力していますデータは10行目以降に入力されています。 データが1,10.20ならsheet2のB列、2.15.35ならsheet2のC列5.40ならsheet2のD列それ以外はsheet2のE列に自動的に入力したいのですがそのマクロを教えていただけないでしょか。行はsheet1と同じ行に入力します

  • EXCELのマクロにて

    EXCELのにて連続したデータを入力したデータベースがあります。(行が5000、列がAAまで) このデータベースのデータの最終行だけを指定して違うシートにコピー・貼り付けがしたいのです。 マクロにてこのような作業をするときにはどういった文をかけばよいですか。

専門家に質問してみよう