- ベストアンサー
Excelのマクロについて
印刷マクロのボタンを押したら文字列検索をかけ、"@"があった場合はあるマクロが動作する状態にしたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> シートA内のA1~A5のセルから@を探します。 以下のどちらかで試してください。 Sub 印刷マクロのボタンを押したとき() Dim c As Range For Each c In Sheets("シートA").Range("A1:A5") If c.Value Like "*@*" Then Call Xのマクロ Exit Sub End If Next Call Yのマクロ End Sub Sub 印刷マクロのボタンを押したとき2() Dim FRng As Range Set FRng = Sheets("シートA").Range("A1:A5").Find(What:="@", LookIn:=xlValues, LookAt:=xlPart) If Not FRng Is Nothing Then Call Xのマクロ Else Call Yのマクロ End If End Sub
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。 丁寧に補足は、有難うございます。 (最近は、質問者に補足要求しても、えい!邪魔くさい。と無視する質問者が多い中で、 有難うございます。) ただし、細部にわたり、何をするのか、伝わってこないので、回答はしません。 ーー 下記は、ただ小生の妄想・推測かもしれませんが、(その場合は誠にすみません) ーー A1:A5のセルの1つ(させたい、選ぶ内容を勘案して)に@を入力ーー>@の有無を、あるVBAで@を入れたセルを探す。ーー>そのセルに、文字列で入力してある文字列で表される、エクセル作業(前提になっている作業)内容を実行する。 ーー ということが、したいがための、仕組として、質問のようなことを思いついたのではないか。 であれば、そういう仕組みは普通は採りません。 ーー ここがシステムの初心者の陥りやすい、だれも批判してくれないという環境であるので、弱みかも。 普通はこういう場合は、わかりにくい珍奇なVBA作業をさせることになり易い。 普通はシートかユーザーフォーム上で、選択(指定)に向いた、コントロール(リストボックスやオピションボタンなどいろいろある)をA1:A5の場合なら5つ設けて、どれかをクリック(押)したというイベントを察知・補足して、そのモジュールのVBAの処理を実行させる。 ように思った。 ーー この細部の設計や仕組みをどうすべきかが、VBAコードを聞くより、大切なことだと思うが、 思い付いた方式に拘る質問者を多くみいぇきた。 本当にまず質問すべきは、こういう点から始めるべきだと常々思う。 ーー ではどうしたらよいのか。名案はない。スクールへ行くとか、出来るだけ熟練者のコードに触れるしかない。
お礼
ありがとうございます。 ここ数日、教えていただいたことを参考に勉強しましたが、結局私の力では解決できませんでした。
- kkkkkm
- ベストアンサー率66% (1719/2589)
> 2. 実際に印刷する前に、文字列検索で"@"を含むものを探します。 どこから探すのか不明です。 先の回答に書いたように A1からA100までの範囲中に"@"が含まれるデータのあるセルがあった場合 のように具体的に示していただかないと分かりません。
補足
ご返信ありがとうございます。 シートA内のA1~A5のセルから@を探します。
- imogasi
- ベストアンサー率27% (4737/17069)
下記の意味が明確でない。 (丸投げで、こういう質問の書き方をしてるところを考えると、回答が出ても、必要な多少の修正ができるレベルとは思えない、ので無駄では?。) >印刷マクロのボタン 何処にある、どんなボタン?ユーザーフォームやシートやその他の、どこのどういうボタン? >文字列検索をかけ シートは? >検索をかけ 探すセル範囲は? >マクロが動作する状態にしたい 意味不明。マクロをっ実行ではないの? そのシート全体を印刷する、のではないの? コマンドボタンのイベントに対し、Enabled=False設定のようなこと? === Sheet1のA2:H10に範囲に@の含むセルがあればという場合 @の全角半角に注意。下記は、先頭、文字列途中、末尾でも見つける。 複数セルが該当候補にあるときは、さらに、ややむつかしくなる。WEBで調べること。 Sub test01() Set fnd = Worksheets("Sheet1").Range("A2:H10").Find("@") If fnd Is Nothing Then MsgBox "見つからない" Else MsgBox fnd.Address End If End Sub
補足
申し訳ございません。 当方は最近関数やマクロについて勉強し始めた身であり、今までは誰にも聞かず自分で調べていましたが、手詰まりになってしまったため、どうしても分からないものだけお伺いさせていただいております。 多少の修正は恐らく可能です。 A~Eのシートがあり、Aのシート内に印刷マクロのボタンがあります。言葉を知らず申し訳ないですが、開発タブから挿入、ボタン(フォームコントロール)というものです。そのボタンをクリックすると印刷マクロが実行されます。印刷マクロはA~Eのシートのうち、A.B.C.の3つのシートを選択し、予め指定した印刷範囲で1部のみ印刷されます。 また、文中にございます"あるマクロ"についてですが、例として説明させていただきます。W.X.Y.Z.のそれぞれ異なるマクロがBのシート内にあり、W.X.Y.Z.それぞれにボタン(フォームコントロール)を割り当てています。XはシートB内のA1~E1のセルを結合し、結合したセル内に"こんにちは"と文字を入力します。他にも細かい処理はありますが、やりたいことは変わりませんので割愛いたします。YはA1~E1のセルを結合、加えてA2~E2のセルも結合します。結合したセルにそれぞれ"こんにちは"、"こんばんは"と入力します。W.Z.も同じようなことをするためのマクロです。 文字列検索の対象シートはAです。 探すセルの範囲はシートA内のC1~C5とD1~D5です。つまり検索は二度行います。C1~C5で検索をかけてもし該当の文字列があったらW.を実行します。該当しない場合はX.を実行します。D1~D5の検索で該当の文字列があればY.を実行、なければZ.を実行します。 言葉を知らず重ねてお詫び申し上げます。動作ではなく実行です。印刷範囲はコマンドなどではなくページレイアウトタブの印刷範囲の設定から設定しております。 以上、よろしくお願いいたします。
- kkkkkm
- ベストアンサー率66% (1719/2589)
状況が曖昧なので適当なマクロですが A1からA100までの範囲中に"@"が含まれるデータのあるセルがあった場合「あるマクロ」を実行します。 Sub 印刷マクロのボタンを押したとき() Dim c As Range For Each c In Range("A1:A100") If c.Value Like "*@*" Then Call あるマクロ End If Next End Sub Sub あるマクロ() MsgBox "Testから実行" End Sub
補足
こんにちは、先日はありがとうございました。 今回もお答えいただき重ねてお礼申し上げます。 情報不足でした、申し訳ございません。 早速ですが下記に記載いたします。 1. A~Eまであるシートのうち、A.B.Cのみ指定し、これを一部だけプリントします。 2. 実際に印刷する前に、文字列検索で"@"を含むものを探します。 3. もし@があった場合はXのマクロを実行、なければYのマクロを実行します。(このX.Y.のマクロは、指定したセルを結合もしくは結合解除するものです。) 4. その後グループ化の解除のため、Dのシートを選択し、その後Aのシートを選択します。 というものです。 X.Y.のコードが必要であればこちらに記載させていただきます。 よろしくお願いいたします。
お礼
kkkkkmさん、いつもありがとうございます。 初心者なもので、どう伝えたらお分かりいただけるか考えながら文章を打っているつもりですが、何せ理解度が低いため分かりにくく申し訳ございません。 教えていただいたことを基に勉強してテストを繰り返しましたが、結局のところ解決には至りませんでした。 ありがとうございました、また機会がありましたらよろしくお願いいたします。