• 締切済み

Excelのマクロ

お世話になります。現在マクロを使って事務処理の簡素化を目論んでいる、しがない事務員です。 具体的に何をしたいかというと、 ・特定の文字を入力する(またはリストから選択する) ↓ ・ターゲットのセル(またはそのセルが含まれているコラム)の色が指定の色に変わり、先ほど選んだ特定の文字も自動的に入力される。 というふうにしたいのですが、極力マクロ操作だけでできるようにするのは可能でしょうか。VBAのコードがもし複雑でなければ、どのように書けばよいのか教えていただけないでしょうか。

みんなの回答

回答No.7

こんにちは。No.1です。 >条件付き書式ってコピーすることは可能でしょうか? 可能ですよ! 条件付書式が設定されたセルをコピー→貼り付けすれば、条件付書式もコピーされます。 また、条件付書式が設定されているセルと設定されていないセル(コピーしたいセル)を同時に選択して[書式]→[条件付書式]を開くと、設定した条件付書式が表示されているはずです。そのままOKを押せば、設定していなかったセルにも同じ条件付書式がコピーされます(^^)v ご参考になれば幸いです。 ■KenKen_SP様、補足ありがとうございました!

  • natsuma
  • ベストアンサー率28% (2/7)
回答No.6

>ところでExcel2003ってマクロ登録用のボタンが 作れないみたいなのですが、これは何故なんでしょうね・・・@_@ 下記マクロを適当なモジュール(標準モジュールがおすすめ)で実行してみられてはいかが? 「ボタンを作成するマクロ」と「ボタンから実行されるマクロ」です。 ButtonAdd_Testを実行してください。 Sub ButtonAdd_Test() Dim X As Range Dim Y As Long Dim Z As String Dim B_Name As String 'ボタンの位置をA5とか適当に決める。 Set X = Range("A5") '引数を適当に決める。 Y = 100 Z = "test" 'ボタン名はセルアドレスを含めておくと後が楽。 B_Name = "ボタン名" & X.Address(0, 0) With ActiveSheet '2回やってもエラーにならないように一応消す。 On Error Resume Next .Buttons(B_Name).Delete On Error GoTo 0 .Buttons.Add(X.Left, X.Top, _ X.Width, X.Height).Name = B_Name With .Buttons(B_Name) .Caption = B_Name .OnAction = "'TestProc " & Y & "," & """" & Z & """'" End With End With End Sub ' 'ボタンが押された時のイベントマクロ。 Sub TestProc(a As Long, b As String) MsgBox Application.Caller MsgBox a MsgBox b End Sub

  • natsuma
  • ベストアンサー率28% (2/7)
回答No.5

>ところでExcel2003ってマクロ登録用のボタンが 作れないみたいなのですが、これは何故なんでしょうね・・・@_@ 通常XPHome&Office2000なので・・・ 2000Pro&Office2003を起動してみました。 なぜ作れないのかな?? [ツール][ユーザ設定]から   [ツールバー]タブ「コントロールツールボックス」を表示して「コマンドボタン」をシート上へ作成できませんか?   [コマンド]タブ、分類:マクロのユーザー設定ボタンをツールバーへ設置できませんか? 97以降同様に作成できるようです。が・・・?

  • natsuma
  • ベストアンサー率28% (2/7)
回答No.4

横レス失礼します。 >VBAのコードがもし複雑でなければ、どのように書けばよいのか教えていただけないでしょうか。 マクロを参考まで Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub 'もしA1以外に入力されたら何もしないで終了 Range("B1:C2") = Range("A1") 'B1からC2へA1の値を入力 Range("B1:C2").Select 'B1からC2を選択して With Selection.Interior '選択したセルの属性を変える .ColorIndex = 7 '(マクロの記録で.ColorIndexをさがすのが簡単かな) End With Range("A1").Activate 'A1をアクティブにして終了 End Sub VBEditorの左上プロジェクト 「標準モジュール」でも実行されますが、すべてのシートで実行されますので、 「Sheet1(シートモジュール)」へ記述された方がよろしですね。

mitzvah_chi
質問者

お礼

ご回答ありがとうございます。 上記のコード、早速参考にさせていただきますね。 ところでExcel2003ってマクロ登録用のボタンが 作れないみたいなのですが、これは何故なんでしょうね・・・@_@

  • rio_d
  • ベストアンサー率47% (71/149)
回答No.3

こんにちは。 入力すると即座に背景色を変える方法です。参考になれば嬉しいです。 リストから選択とかになると、説明が面倒(ぉぃ)なので…とりあえず入力についてのみ説明させていただきます。 【妄想】 「セルの内容が変わった時のマクロの走らせ方」と、「セル範囲に対する色付けなどの修飾方法」が説明できれば良いでしょうか? 【手順】 -----シートに変更があるとすぐにマクロを実行するような仕組み作り---------- ※ 対象はSheet1の全セルとします。 (1) Visual Basic Editorを開きます (2) ブックの「Sheet1」をダブルクリックし、Sheet1のマクロ編集画面(多分真っ白)を開きます。 (3) 上に(General) (Declarations)とありますので、これを(Worksheet) (Change)にします。   「Private Sub Worksheet_Change(ByVal Target As Range) ~ End Sub」が作られます。   このサブルーチンが、該当のシートが編集されるたびに実行されるルーチンです。 (4) たぶん「Private Sub Worksheet_SelectionChange(...)」も作られていると思いますが、こっちは消してOKです。 -----マクロを作る---------- (5) こんな感じでつくります。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim C As Range   For Each C In Target     If C.Row = 7 Then       Select Case C.Value       Case "なんちゃら"         C.Interior.ColorIndex = 6   '6は黄色       Case "かんちゃら"         C.Interior.ColorIndex = 8   '8は水色       Case Else         C.Interior.ColorIndex = xlNone  'xlNoneは透明       End Select     End If   Next C End Sub 【解説】 変更のあったセルの範囲は「Target」に格納されています。 複数セルが同時に変更されたことを考えて、 > For Each C In Target で、「Target」内の各セル1個ずつを「C」に格納し、1個ずつ処理します。 全部のセルで色を付けられても困るので、上の例では > If C.Row = 7 Then としました。C.RowはセルCの縦位置ですので、縦位置=7つまりCが7行目のセルだったら~~、という処理分岐をさせています。 C.Row…セルCの縦位置 C.Column…セルCの横位置 で、どのセルを色付けさせるかを適当に指定してあげてください。 あとはCの値によって、Select-Caseで色付けさせているだけです。 C.Interior.ColorIndex=6 で、セルCが黄色になります。 このへんの分岐やら色付けやら修飾やらは、お好みにあわせ作り変えてください。 その列すべてを色替えしたければ、 Columns(C.Column).Interior.ColorIndex=7 とか。この辺は自由自在に。 がんばってみてください。

mitzvah_chi
質問者

お礼

ご回答ありがとうございます。 上記のコードを参考に、書いてみますね!

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

横レス失礼します。 >その特定のセルだけでなく列もしくは行全部(もしくは選択した範囲)の色も変えてしまいたいのです。 単一セルだけでなく、列全体や行全体、特定の領域を条件付書式でセル書式を操作することが可能です。 例えば、A1 セルに abc と入力すると A列全体のセル背景色を変更するには、、 1. A列全体を選択 2. [書式]-[条件付き書式]をクリック 3. 条件1を次のように変更します [数式が] =$A$1="abc" 4. [書式]ボタンをクリックし、お好みの書式を設定 とします。

mitzvah_chi
質問者

お礼

ご回答ありがとうございます! 早速上記のご指導通りに条件付き書式を設定してみました。 便利!ですね^^ 条件付き書式ってコピーすることは可能でしょうか?

回答No.1

こんにちは。 ご質問の処理ですが、場合によってはマクロを組まずにExcelの機能だけで実現ができるかもしれません。 セルの「条件付き書式」をご存知でしょうか? このセルが、この値(or文字)だったら、この色(orフォント等々)にする。という設定ができます。 ただし1つのセルに付き3パターンまでしか設定できません。 例)文字がAなら赤、Bなら青、Cなら黄色 内容を具体的に書いていただければアドバイスもしやすいかと思います。

mitzvah_chi
質問者

お礼

早速のご回答、ありがとうございます! 条件付書式、便利ですね!! ただ、ちょっと欲を言いますと、 その特定のセルだけでなく列もしくは行全部(もしくは選択した範囲)の色も変えてしまいたいのです。 これにはやはりマクロが必要・・・ですよね? trial and errorで何度か作ってみたのですが なかなかうまくいきません;_; 何か良いアドバイスありませんか?

関連するQ&A

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

    エクセルのマクロコードに付いて教えて下さい。 下記のマクロコードがありますが、 Option Explicit ' Private Sub Worksheet_Change(ByVal Target As Range) '   Static Memo(1 To 3) As Long   Dim Cell As Range '   If Intersect([A1:C1], Target) Is Nothing Then     Exit Sub   End If '   For Each Cell In Target '     If Cell = "" Then       Memo(Cell.Column) = 0     End If   Next Cell   Set Cell = Target(1) '   If Not IsNumeric(Cell) Or Cell = "" Then     Exit Sub   End If '   Application.EnableEvents = False   Memo(Cell.Column) = Memo(Cell.Column) + Target   Target = Memo(Cell.Column)   Application.EnableEvents = True End Sub セル位置の指定を変更する場合は、どの様に書けば良いのですか? このコードですと、セルA1からc1の入力指定でなっていますが A1からAA1までとかにする場合やA1の結果を、A1ではなくA2に表示B1の結果をB2に表示する場合はどのように書くのでしょうか? マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

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

    以前、こちらのマクロで Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("a1")) Is Nothing Then Exit Sub Application.EnableEvents = False Range("a3:ba28").Replace What:="=*!", Replacement:=Target.Value, LookAt:=xlPart Application.EnableEvents = True End Sub 指定した範囲を(A1)セルに入力した値に置換するマクロを教えていただいたんですが、現在,、これを使ってsheet1の指定範囲内にある(=あ!$AR$75)などが入力してある部分のシート名を置換してデータ内容の変更を行っています。 しかし、この方法だと、シート名の文字数を指定しなくてはならなくて、自分以外の人が操作すると、エラーを出してしまうことがあり困っています。そこでchangeイベントをやめて、シート名の確認をしてからマクロの実行を行うには、どういったマクロにすればいいですか?? 説明が分かりづらくすみません・・・・・・。 もし他にシートの文字数などにこだわらなくてもよい方法があれば教えてください。 よろしくお願いします。

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

    下記のマクロコードがありますが、 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とかにする場合はどの様に 書けば良いか教えて下さい。 マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

  • 表示形式を変えるマクロのコードは?エクセル2010

    エクセル2010です。 よろしくお願いします。 特定の範囲のセル範囲(I7:M29)の表示形式が数値、-1234 文字色赤となっています。 それを 特定のセル範囲に数値を入力し終わって セル範囲のあるセルを選択した状態で あるコマンドボタンをクリックしたら、そのセルの表示形式を(1234) 文字色赤 としたいのですが また あるコマンドボタンをクリックしたら  特定の範囲(I7:M29)を最初の状態、 表示形式 -1234 文字色赤にしたいのですが マクロでの使用は どういったコードが 考えられますでしょうか?

  • 条件で色分けするマクロ

    教えてください! お願いします。 本当にマクロを勉強したてで、ほとんどわかりません。 エクセル(XP/ver,2003)でリストを作成し、その中に特定の文字が入力されるとセルに特定の色がつくようにしたいのです。 例:A1に合格と文字を入れるとA1:E1までのセルが赤く塗りつぶされる。(リストはA1:E500の予定) 本当に基本的な質問で恐縮ですが、ご回答お願いいたします。

  • excelでセルクリックした時、マクロ起動

    office2003です。 sheet1のC3,C4,C5セルに、ある文字列をコピーペーストするマクロがあります。…(1) マクロ文は省略 下記は、それぞれC3,C4,C5セルが選択(クリック)された時、実行するマクロ…(2)です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row = 3 Then personC3 If Target.Column = 3 And Target.Row = 4 Then personC4 If Target.Column = 3 And Target.Row = 5 Then personC5 end sub やりたい内容は、C3,C4,C5に文字列を表示させ、その文字列がクリックされたら、 別のマクロを起動(例.C3クリックされたら、personC3マクロ起動)させたいのです。 しかし(1)(2)の順に実行すると、C3,C4,C5セルには文字列のコピーペーストが出来ません。 (2)のマクロは、セルが変化したら実行ですから当然なのは分かっているのですが、 ここが困っている所です。 もともとC3,C4,C5に文字列が入っている場合は、(2)のマクロだけでよいのですが、 (1)を実行した後に(2)のマクロが有効とするには、どの様にしたらよいのでしょうか? 尚、やりたい内容が実現できれば、他のやり方でも可です。 条件: C3~C5までのどれかをクリックする動作は必須です。 C3からC5までに設定される文字は、固定(同一)ではありません。

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

    QNo.3421130で質問させて頂いた件の続きなのですが 入力シート(1)のA1に入力された値を、シート2のB1に表示(つまりB列の同じ行数のセルに表示)するというマクロをお教え頂き、早速実践してみましたが、入力シートA1に入っている値が入力シートA10から算出された値(例:A11に日付の2007/10/18と入っていて、A10にはMONTH関数で10だけを抽出している。そのA10の値10をA1が参照している状態やIF関数で反映された値等)がシート2に表示されません。 また本マクロは入力シート(1)とシート2の同じ行列のセルの表示しか出来ませんが、たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 以下、お教え頂いたマクロです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 1 Then    Sheets("Sheet2").Cells(Target.Row, "B").Value = Target.Value  End If End Sub 続きの質問であることと、説明が分りにくく大変申し訳ありません。 非常に困っております。よろしくお願いします。

  • マクロによる日時の表示

    こちらのページでお世話になり 以下のようなプログラムを使って 特定の行に入力があった場合となりのセルに入力時間が表示されるようにしたのですが、 通常は例としてA1に入力があった場合B1に入力時間が表示されるといった具合だったのですが、わけあってA1~A3を結合しなければならなくなってしまい、入力時間をB1~B3(同じく結合したセル)に表示したいのです。 同じマクロのままやってみたところ一応入力時間は表示されるのですが、A1~A3に入力したデータを消したときにエラーが出てデバックしますか?といった内容の表示が出てしまいます。 どこを変更するとエラーが出なくなるのでしょうか? ご存知のかたがいらっしゃいましたらどうぞご教授願います。よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) ' 1行目のセルならマクロ終了 If Target.Row = 1 Then Exit Sub ' A列かC列かE列なら If Target.Column = 2 Or Target.Column = 4 Or Target.Column = 6 Or Target.Column = 8 Or Target.Column = 10 Or Target.Column = 12 Or Target.Column = 15 Then '  内容がブランクなら隣のセルをブランクにする If Target.Value = "" Then Target.Offset(0, 1).Value = "" Else Target.Offset(0, 1).Value = Format(Date + Time, "yyyy/mm/dd hh:mm:ss") End If End If End Sub

  • エクセルのマクロについて教えてください

    お世話になっております。 エクセルのマクロについて教えていただきたいのですが、 サンプルのファイルをこちらにアップしたのでよろしければご覧になってください。 http://kie.nu/yPV 質問したいことは、列Iに、各行の黄色いセルの数を表示させるマクロを作りたいのですが 途中まで何とかわかったのですがどうもうまくいきません。。 行11から各行にひとつずつ、黄色いセルが含まれていますが、その黄色いセルの中の数字を列Iに表示させたいです。行にデータがある限り、下までずっとです。 以下、途中までわかったマクロです。 Sub 黄セル値Copy() Const TgLeftUp = "A3" '<--対象範囲左上セル指定 Dim Rng As Range Dim Target As Range Set Target = Range(TgLeftUp, Cells(Rows.Count, _ Range(TgLeftUp).Column)) For Each Rng In Target.Resize(, 2) If Rng.Interior.ColorIndex = 6 Then If Rng.Column = Target.Column Then Rng.Offset(, 3).Value = Rng.Value Else Rng.Offset(, 2).Value = Rng.Value End If End If Next MsgBox "値 貼り付け完了。", vbInformation Set Target = Nothing End Sub でもこれを貼り付けてもうまくいきません。 正しいマクロを教えていただけないでしょうか?? 宜しくお願いいたします。 ※いつも、私の質問に対してまるで回答になってないような、ふざけた言葉を書き込んでは消してる方が一名だけいらっしゃいます。確か、鳥の写真をマイページに載せてる方です。 都度違反報告はしていますが、質問の趣旨に反する回答をされてる方一名、絶対にやめてください。

  • エクセル アクティブ中のセルにマクロ実行

    表題の件について質問させていただきます。 基本的に数字の入っているセルなのですが、たまに数字の前に備考として特定の文字を入力しています。  特定文字例:東京・千葉・埼玉・鈴木・木村・佐藤  入力後の例:東京232・木村50 その特定の文字の入力には、マクロ登録してあるボタンで実行しています。  ActiveCell.FormulaR1C1 = "特定の文字" さて、質問なのですが、上記ではセルを選択しているときにボタンを押すことで特定文字の入力はきるのですが、入力中っていうのかな?カーソルが点滅している最中にはマクロが実行できないのです。 その為、数字の入った後のセルを選択してボタンを押すと、いちど数字の上に特定文字が上書きで入力されて数字が消えてしまいます。 現在は、ボタンを押して特定文字を入力した後に再度数字を入力しています。 どうにか、セルの選択中でもカーソル点滅中でもマクロを動かすことはできないでしょうか。 よろしくお願いいたします。

専門家に質問してみよう