• ベストアンサー

EXCEL VBA の シートマクロ? について

C-Builderでは中級程度のプログラムを作成し、通常のEXCEL VBAは使いこなしている者です。 数種のエクセルマクロの本を読んだり、ネットで検索しても(名称を知らないのでヒットしないのかも知れませんが)出ていない様なので宜しくお願い致します。 質問内容: 1. EXCELのシートの下方のシート選択タブでコードの選択を選んだ時に出てくるVBA部分の正式名称は何でしょうか?ツールから選択するVBAマクロと区別する名称はあるのでしょうか。 2. ある時、たまたまヒットしたサイトの内容を参考に作成したプログラムです。セルに数値を入力すると文字を表示する様にしています。しかし、これでは総てのセルに対応してしまいます。参考にしたプログラムでは with tergetの前に何か範囲指定コマンドの様なものが書かれていた気がしますが、そのプログラムを消してしまった様で分かりません。A列とかB列のセルに対してのみ変換を行いたいのです。 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErrorLine With Target If .Value = "" Then Exit Sub If .Value = "0" Then .Value = "A" If .Value = "1" Then .Value = "B" If .Value = "2" Then .Value = "C" If .Value = "3" Then .Value = "D" If .Value > "4" Then Exit Sub End With ErrorLine: End Sub 3. 何かこのシートマクロ(私が勝手に呼んでいる名称)の参考サイト、書物がありましたらご紹介下さい。 宜しくお願い致します。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>1. EXCELのシートの下方のシート選択タブでコードの選択を選んだ時に出てくるVBA部分の正式名称は何でしょうか? 該当ワークシート専用のマクロになります。 Worksheet_Change などは、ワークシートイベントマクロと呼ばれるものです。 感の良い方なら解ると思いますが、この場合「ワークシートの値が変更された時」に自動的に動作するマクロになります。 >with tergetの前に何か範囲指定コマンドの様なものが書かれていた気がしますが ご自身でプログラムの引数の調査をしないのですか? 「Worksheet_Change」を検索するだけでもそれなりのサンプルが多数見つかるはすですが? Target は Range オブジェクトになるので、引数には変更されたセルの情報(そのもの)が入ります。 >A列とかB列のセルに Range("A1").Column と書くと列情報が得られますから、 if Target.Column > 2 then Exit Sub の一行を加えるとA/B列のみで動作するようにあります。 また、このイベントの場合、マクロでセルの値が変更すると、再度このイベントを呼び出す事になるので、 Application.EnableEvents = False / True で、全てのイベントの発生の停止をしてから書き換えを行い、コードを抜ける際にイベントを再開するようにしてください。 3.下記がイベント一覧です。 記述する場所によって、ワークシートイベント、ワークブックイベントと分かれます。 http://www.geocities.jp/vbaxl/event/000.html

TinyPine
質問者

お礼

ご回答有難う御座いました。私が何か特別なものと勘違いしていた様です。総てVBAの組み合わせで出来る訳ですね。今まで通常のマクロしか使用していませんでしたが、これからもっと発展させられそうです。

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

1) 正式名称は知りません。イベントプロシージャ? コードを書く場所はシートモジュールと標準モジュールって、私は呼んでます。 2) Target は Range ですので、Rowで行がColumnで列がわかりますし、Address も使えます。 Private Sub Worksheet_Change(ByVal Target As Range)   MsgBox Target.Row & "行目"   MsgBox Target.Column & "列目"   MsgBox Target.Address End Sub 但し、Range ですから複数のセル範囲を含んでいる事があります(Ctrl+Enterの場合とか)ので、下記の例では For Each でループさせてます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range  Application.EnableEvents = False  For Each r In Target   If r.Column = 1 Then    Select Case r.Value      Case 1 To 4: r.Value = Chr(r.Value + 64)    End Select   End If  Next r  Application.EnableEvents = True End Sub 3)全般的に MOUG はためになります。 http://www.moug.net/

TinyPine
質問者

お礼

私が何か特別の部分と勘違いしていました。通常のVBAの組み合わせで良いのですね。これからはここの部分を活用したプログラムを発展させていけます。 有難う御座いました。

関連するQ&A

  • エクセルVBAについて

    エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub    '●複数セル選択は無視  If Target.Row <> 1 Then Exit Sub    '●1行目以外の選択は無視  If Target.Column > 6 Then Exit Sub   '●F列目以降の選択は無視  If Target.Value = "" Then Exit Sub   '●選択セルが未入力なら無視    Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。

  • EXCEL VBAについて教えてください

    はじめまして。 過去ログに私のやりたいような内容を探していたらこのような下記のエクセルVBAがあったので、教えて頂きたいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With With Cells(ActiveSheet.Rows.Count, "C").End(xlUp) .Offset(1, 0).Value = x .Offset(1, 1).Value = Time() End With End Sub A1に入力するたびに同一セルに加算。 A1をクリアできる。 C列に入力履歴、D列に入力時間を記録。 If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。 と、いう内容なのですが、これをたとえば同一シートのA1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したいのですが、どのようにすればいいのでしょうか?ちなみにA11~E11とA23~E23は合計を表示するセルにしたいです。 Excelのバージョンは2003です。 よろしくお願い致します

  • Excel 2000です。VBAを改造していただきたいのですが

    入荷品のチェックシートです。B列に受領数を入力するとA列に年月日が記録されるVBAを作っていただき必要なブックのシートごとにコピーして使っていました。全品入荷完了後 別のロットにシートタブの名目を書き換えて再利用します。  ('複数セルが選択された場合、動作をキャンセル  がなぜ必要かも理解できないVBAの勉強を挫折の高齢者です) B列のセル一個づつ選択削除でないとB列が空白になるだけでA列には日付が残ります。複数のセル選択で一気に日付を削除したいのです。 お助けください。 Private Sub Worksheet_Change(ByVal Target As Range) '複数セルが選択された場合、動作をキャンセル If Target.Count <> 1 Then Exit Sub If Intersect(Target, Range("B5:B1000")) Is Nothing Then Exit Sub 'B5:B1000"の範囲外は除外 Application.EnableEvents = False If Target.Value <> "" Then If IsDate(Target.Offset(, -1).Value) Then GoTo EXIT_LABEL '日付が記入済の場合は実行しない Target.Offset(, -1).Value = Format$(Now, "mm/dd hh:mm") Else 'セルを空白にした場合、日付を削除 Target.Offset(, -1).Value = "" End If EXIT_LABEL: Application.EnableEvents = True End Sub

  • マクロが動きません

    以下のようなプログラムでC3の値が変わるたびにA10の値に1を加えていきG3,H3が両方0になったらA10の値も0にする。C5の値が変わるたびにA15の値に1を加えJ3,K3が共に0になったらC5も0にするようにしました。 しかし、動作しません。 このシートの3行目は=シート名!セル番号 という形でほかのシートのセルの値が表示されるようになっています。G3、H3、J3、K3に手動で数値を入力した場合 は動作します。 ほかのシートのセルの値を表示させたセルの値が変化しても動作させる方法はないでしょうか> Private Sub worksheet_change(ByVal target As Range) With target If .Count > 1 Then Exit Sub If IsNumeric(.Value) = False Then Exit Sub If IsEmpty(.Value) = True Then Exit Sub If Not .Row = 3 Then Exit Sub Select Case .Column Case 3 Range("A10").Value = Range("A10").Value + 1 Case 5 Range("A15").Value = Range("A15").Value + 1 End Select End With If Range("g3").Value = 0 And Rang("h3").Value = 0 Then Range("A10").Value = 0 If Range("j3").Value = 0 And Rang("k3").Value = 0 Then Range("A15").Value = 0 End Sub

  • Excel VBA Worksheet_Change イベントについて

    Excel VBA Worksheet_Change イベントについて質問です。 セルH8とI8を結合し、入力規則よりリストボックスを配置しました。 本シートにWorksheet_ChangeをVBAで作成しましたが、 セルH8:I8をDeleteすると実行時エラー13が発生します。 If Target = "" then exit sub end if や If Target.value = "" then exit sub end if や If Target <> "" then 処理 end if としても対処できませんでした。 よい対処方法のアドバイスよろしくお願いします。

  • エクセルのマクロコードについて

    お世話になります。 下記コードで、セルごとにクリアをすると、エラーなくうごくのですが、セルをまとめてセルを消すと実行時エラー13型が一致しません。とでてIf Target.Value = "" Thenがだめだよとでてしまいます。 どなたか、回避の方法をご教授ください。 宜しくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B2:E2,G2:J2")) Is Nothing Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo 'Range("B2").Value = x + Z Z = Target.Offset(1, 0).Value y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With Target.Offset(1, 0).Value = x + Z End Sub

  • エクセルVBAについて

    エクセルVBAについて 下ような、最初に選択したセルに、次に選択したセルをコピーするマクロを使用しています。 Dim Frstcell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 1 Then Exit Sub On Error Resume Next 'エラーを無視 If Target.Column >= 5 And Target.Column <= 35 Then 'E:AIコピー先 Set Frstcell = Target.Cells(1) ElseIf Target.Column >= 45 And Target.Column <= 46 Then 'AS:ATコピー元 If Target.Cells(1).Value = "" Then Exit Sub Target.Copy Frstcell.MergeArea End If On Error GoTo 0 'エラートラップ終了 End Sub この場合、コピー元の枠線の書式も、コピー先にコピーされてしまうのですが、 書式なしでコピーするにはどうしたらよいでしょうか? よい方法がありましたら、よろしくお願いいたします。

  • エクセル マクロ

    If Target.Value = "" Then Exit Sub End If シートが空白のとき 選択されないようにするように教えていただいたのですが この分に B1:C11までの範囲 という条件をさらにつけたい場合は (B1:C11)をどのようにいれたらいいのでしょうか?

  • エクセルのマクロコードに付いて教えて下さい。

    下記のマクロコードがありますが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With End Sub セル位置の指定を変更する場合は、どの様に 書けば良いのですか? このコードですと、セルA1の入力指定でなっていますが A1~A5までとか。A1、B1,C1とかにする場合はどの様に 書けば良いか教えて下さい。 マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

  • エクセル マクロ 追加

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub End If If Not Intersect(Target, Range("B1:C15")) Is Nothing And Target.Value = "" Then Exit Sub End If Dim c As Worksheet Dim flag As Boolean flag = False For Each c In Worksheets If c.Name = Target.Value Then flag = True Next If flag = False Then Exit Sub If Target.Address = "$C$2" Or Target.Address = "$C$3" Or Target.Address = "$C$4" _ Or Target.Address = "$C$5" Or Target.Address = "$C$6" Or Target.Address = "$C$7" _ Or Target.Address = "$C$8" Or Target.Address = "$C$9" Or Target.Address = "$C$10" _ Or Target.Address = "$C$11" Or Target.Address = "$C$12" Or Target.Address = "$C$13" _ Or Target.Address = "$C$14" Or Target.Address = "$C$15" Then Worksheets(Target.Value).Visible = True Worksheets(Target.Value).Select Else End If End Sub セルに文字が打っています シート名とセルが一緒の文字のとき移動するマクロです データがあるセルをクリックするとそのデータ先に飛ぶように 設定したマクロなのですが、 選択するページの文字は全部最初から設定されている黒文字がつかわれているのですが データがあるときは文字の色を変化させたいのですが どうすればいいでしょうか?

専門家に質問してみよう