• ベストアンサー

マクロ

シート上のCommandButton1を押すと、a2:d3までのセル内に赤字があれば、ユーザーフォーム1が起動する、セル内の赤字が緑になる  上記のようなマクロは可能でしょうか? マクロ初心者ですので、サンプルコードがあれば助かります。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1641/2490)
回答No.2

> マクロの記録でフォントカラーを確認して、記述してみましたがうまくいきません。 確認不足でした。 IfでColorがマイナスの時にうまくいかないとは思っていませんでした。 If mRng.Font.Color = -16776961 Then を If mRng.Font.Color = CLng("&H00" & Right(Hex(-16776961), 6)) Then に変更してみてください。

kubotaman
質問者

お礼

大変分かりやすく、ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率65% (1641/2490)
回答No.5

No.2で色の値にたいして計算のような事をしていますが、赤が「-16776961」でしたらvbRedでいけると思います。 ただ、赤ではなく別の色にしたい場合、たとえば緑であれば赤にしたいとなった時に、緑が「-11489280」だった場合はvbGreendでは対応できないので、あえて実際の色をマクロで取得してもらって計算するようにしています。 標準の緑を選択したセルの色の設定で「その他の色」「ユーザー設定」で見ると緑に青が少し入った色になっていると思います。 なので、純粋な緑(緑だけ255)で比較すると一致しないという結果になり、基本的な色定数などでは比較できないので、現状は赤ですが一応計算をするようなコードにしています。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

質問者のやりたいことが、具体的に質問の文章に説明されていないので答えにくい。 想像してやって見たが、余り普通に行われそうなパターンでなく、自信ない。 特に>a2:d3までのセル内に赤字があれば、ユーザーフォーム1が起動する、はどういう段階でこれを 判断するのか、想像しにくい。 Private Sub CommandButton1_Click() For Each cl In Worksheets("Sheet1").Range("a2:D3") MsgBox cl.Address If cl.Font.ColorIndex = 3 Then MsgBox "AA" cl.Font.ColorIndex = 4 UserForm1.Show End If Next End Sub 上記でMsgboxの行は確認用なので、(本番的な段階では)削除する。 ーー >マクロ初心者です、が謙遜でなければ、ユーザー相手のGUIとして、コントロール部品などを使う勉強は、(良く飛びつきやすいが)後にすべきではないか? 特に(使う人が他人も居る場合)「シートに!」コマンドボタンを張り付けるのは、使う側で、戸惑うのではないか?クリックするやその意味や結果が予想できなくて困るし、誤ってクリックすると大事になる場合もある。 VBE画面で「SUBーユーザーフォームの実行」で実行する、で考えるべきではないか? ーー (A)シートにコントロール部品を張り付ける (B)ユーザーフォームにコントロール部品を張り付ける。   そしてその、ユーザーフォームをShowする あると思うが、(B)を考えるのが良いのではないか? 回答説明なども相当変わる。 >サンプルコードがあれば助かります。 コードを作ってほしい、というのはあからさまに言わないのが普通か? 言わなくても回答に書いている場合がほとんど。  それより、どういう場合にコントロール部品やユーザーフォームを使うのが良いか、日ごろから 考えておくべきと思う。対話型(ケースを選ばせるなど)で処理しなければならない、時もあるが、INPUTBOXの応答利用程度で済む場合も多いのではないか。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1641/2490)
回答No.3

No.2の追加です。 マクロの記録で取得した値だけに限りますが、以下のようなやりかたもあるかとは思います。 If mRng.Font.Color = -16776961 Then を If mRng.Font.Color = -16776961 - CLng(&HFF000000) Then 以下のような場合は、同じ色(A1が赤)でも一致とは認識しません。 mFColor = Range("A1").Font.Color For Each mRng In Range("A2:D3") If mRng.Font.Color = mFColor - CLng(&HFF000000) Then

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1641/2490)
回答No.1

vbRedとvbGreenはマクロの記録で実際に文字色を変更して.Colorで取得した数値にしてください。 Private Sub CommandButton1_Click() Dim mRng As Range For Each mRng In Range("A2:D3") If mRng.Font.Color = vbRed Then mRng.Font.Color = vbGreen ユーザーフォーム1.Show Exit For End If Next End Sub

kubotaman
質問者

補足

kkkkmさま ありがとうございます。 Private Sub CommandButton1_Click() Dim mRng As Range For Each mRng In Range("A2:D3") If mRng.Font.Color = -16776961 Then mRng.Font.Color = -11489280 ユーザーフォーム1.Show Exit For End If Next end sub マクロの記録でフォントカラーを確認して、記述してみましたがうまくいきません。 どこか間違えているでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA escキーのマクロ

    初心者に毛が生えた状態です。エクセル2000を使っています。 ワークシートをWクリックするとユーザーフォームを表示するようにマクロの記述をしています。 ユーザーフォームをキャンセルボタン(×)で閉じるとシートのセルの中にカーソルが入った状態になります。 それをescキーを押した時のように、カーソルがセルの中に無い状態にしたいのです。 マクロの記録でescキーを押しても記録されないので、コードが分かりません。 ユーザーフォームの×ボタンを押したら、Wクリックする前の状態に戻すコードを教えてください。 よろしくお願いします。

  • 別のブックのセルの値をコピーするマクロについて

    ExcelのVBAのマクロに関する質問です。 複数のブックのセルの値をコピーするマクロについての質問なのですが、現在以下のファイルがあります。 サンプル1.xls サンプル2.xls サンプル3.xls データ.xls そして、 サンプル1のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA1~D1まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA1~D1まで、 サンプル2のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA2~D2まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA2~D2まで、 サンプル3のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA3~D3まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA3~D3まで、 上記のような形でコピーしたいのですがマクロがわかりません。 データ.xlsにボタンを作成し、そのボタンを押すとこの処理が実行されるようにしたいです。 どなかた方法を教えていただけますでしょうか。ご回答お待ちしております。 ※ファイルの名前は今回はサンプル1などとしましたが実際は違う名前も使用します。 また、ファイルの数も今回は3つにしましたが増減します。

  • エクセルVBA ユーザーフォームのボタン

    ユーザーフォームにCommandButton1があります ワークシートにもCommandButton2があります ユーザーフォーム上のCommandButton1をクリックすることで、ワークシート上のCommandButton2をクリックするという命令は作れるのでしょうか? ワークシート上のCommandButton2をクリックした後の命令は出来ているのですが、そのコードをコピーしてユーザーフォーム上のCommandButton1のコードにコピーするしかないのでしょうか? 実行ボタン(CommandButton2)をワークシートに作成したので、 ユーザーフォームで入力→ ユーザーフォーム上のボタン(CommandButton1)をクリック→ ユーザーフォームは終了→ ワークシート上の実行ボタン(CommandButton2)をクリック してくれると良いかと思いました よろしくお願いします

  • 【エクセル2003】マクロ終了後、フォームを閉じたくない。

    ユーザーフォームを挿入し、 Private Sub CommandButton1_Click() ActiveSheet.Delete Sheets.Add End Sub というコードを書き、 図のように配置しています。 やりたいことは、シート上にもコントロールがある状態で、 フォームを実行し、コードを終了させても、フォームは表示させたままにしたいのです。 しかし、図の状態で上記のコードを実行すると、フォームも閉じてしまいます。 コマンドボタンがシート上になければ コードが終わってもフォームは閉じません。 どうすればコマンドボタンも配置しつつ、シートごと削除させ、 フォームを表示したままにすることが可能なのでしょうか? よろしくお願いします。

  • マクロの初心者

    マクロの超初心者です。 マクロの記録を行ってそのコードを表示し、学習を始めたばかりの初心者です。 A1セルに、数字100が入力されてるとします。 A2セルに、A1セルの数値を取り出して 1 を加えて 表示させるコードはどのようになるのか、どなたか おしえてください。 宜しくお願いします

  • EXCELのマクロで忠告文について。

    EXCELのユーザーフォームについて質問です。 マクロで処理時間が少し長いコードがあります。 ユーザーフォームでデータを入力してCommandButton1を押すとそのマクロが動く仕組みです。 処理時間が少し長いので 「ただいま、処理中です。 しばらくお待ちください」 といった忠告文を出したいです。 msgboxのようにOKボタンを押さずに、処理が終了したら忠告文が自動で消えるようにしたいです。 どのようにすればできますか? よろしくお願いします。

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

    通常使っていたマクロを間違えて消してしまい、その上再構築できなくて困っています。 こんなマクロだったですが。 ブック内に複数のシートが入っています。新しくSheetを追加してA2セル(他のセルの時もあります)をアクティブにします。 Alt+F8→実行でA2セルから下へ、そのブック内の全ての「シート名」が書き出されるというマクロだったのです。 マクロ初心者です、どなたかアドバイスをお願いします。

  • 同じマクロ名でも、違うモジュールならエラーにならな

    同じマクロ名でも、違うモジュールならエラーにならない? エクセルVBAについてご教授ください。 標準モジュールに ――――――――― Option Explicit Sub CommandButton1_Click() MsgBox "" End Sub Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― と同じマクロ名を2つ作ったら、コンパイルエラーになりますが、 上記のコードは一度消して、フォームモジュールに ――――――――― Private Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作り、 標準モジュールに ――――――――― Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作った場合は、エラーにならずにマクロを実行できました。 これは、フォームモジュールがPrivate Subだからでしょうか? フォームモジュールに1つ、 標準モジュールに1つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

  • マクロ

    マクロのユーザーフォームに関してですが,RefEditコントロールで選択したセル範囲を取得したのですが,ここで取得したセル範囲が[A1:B10]のような形になっています.そこで,知りたいことが例えば[A]が何列目になるかということです.何か関数があればご教示頂けないでしょうか? よろしくお願いいたします.

  • 【Excel VBA】ユーザーフォームについて

    Excel2003を使用しています。 Sheet1のある範囲のデータをSheet2に(アクティブセルに)コピーするというマクロを作成しました。 データをコピーする際、範囲中のいくつかのセル(2~3箇所ですが)のデータを書き換えて、コピーするときもあるため、変更箇所がある場合は入力モード等の関係もあるので、ユーザーフォームを使って、書き換えるようにしました。 コピー元の範囲を変えただけの同じようなマクロが複数あるのですが、テキストボックスやコンボボックスに入力されたデータをシートへ転記する際のセルの位置が変わるだけなので、ひとつのユーザーフォームを使いまわしというと変ですが、そのようなことはできないのかなと思い、質問させていただきました。 -------------------------------------------------------------- Private Sub CommandButton1_Click()   Range("F371").Value = TextBox1.Text   Range("N371").Value = ComboBox1.Text   Unload Me End Sub 上記コードは、ユーザーフォームのコードの一部ですが、 Range("F371").Value = TextBox.1Text      ↓ Range("F397").Value = TextBox.1Text のように、転記先のセルだけ変わればいいので、そのために、同じユーザーフォームをいくつも作るのも…と思った次第です。使いまわしのようなことはできなければ、コピーして作成しようと思っています。 うまく文章に表すことができなくて申し訳ないのですが、よろしくお願いします。

このQ&Aのポイント
  • TKFBP101の足ゴムが取れてしまい、入力がしにくくなっています。この問題を解決する方法について詳しく教えてください。
  • TKFBP101の足ゴムが外れてしまったため、キータッチが悪くなっています。どのようにして足ゴムを取り付けることができるのか、具体的な手順を教えてください。
  • TKFBP101の足ゴムが取れてしまい、打ちづらくなっています。足ゴムを販売している場合は、どこで購入することができるのか教えてください。
回答を見る