マクロVBAについての要約

このQ&Aのポイント
  • マクロVBAについてサンプルコードを見ながら説明します
  • 試験10と試験20が実行されている場合に試験50を実行するVBAの作成方法について教えてください
  • パソコン初心者の私でも理解できる詳しい解説をお願いします
回答を見る
  • ベストアンサー

マクロ VBAについて

sheet1に試験10、試験20、試験50というマクロがあったとします。 試験10と試験20が実行されていないと試験50のマクロを実行してもマクロが実行されない。 また試験10と試験20が実行されていたら試験50を実行したときに試験50が実行されるような VBAは可能なんでしょうか。 パソコン初心者なんで全くわからない状態です。 ちなみに下記ではだめでした。 ほんと全くわかんないです。 詳しい方どうぞよろしくお願いします。 Sub マクロ() Dim 試験10 Dim 試験20 If 試験10 And 試験20 Then 試験50 End If End Sub

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

わたしの提案は、試験10、試験20、試験50のマクロの内容をちょっと変更するというものです。 例えば以下のように変更します。 試験10のマクロの最終行(End Subの前)に以下を挿入 Cells(1.1) = 1 試験20のマクロの最終行(End Subの前)に以下を挿入 Cells(1.2) = 1 上記で試験10を実行するとA1セルに"1"が入力され、試験20を実行するとB1セルに"1"が入力されます。 その上で試験50のマクロを If Cells(1,1) = "1" And Cells(1,2) = "1" Then 試験50の実行内容 End If のようにすれば、A1セルおよびB1セルに1が入力されている場合のみ、試験50の内容を実行するという形にできるということです。 ご参考まで。

n5s1r3k1
質問者

お礼

早急な回答ありがとうございました。 大変勉強になりました。 解決しましたので大変うれしいです。 またお願いします。

その他の回答 (1)

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.1

質問文にあるようなVBでは無理ですね。 もっと単純に考えて、例えば試験10、試験20のVBの最後に実行時に特定のセルに実行したことを示す値を入力する処理を入れておき、試験50でその値が入力されているかどうかを検査して、入力されていればマクロを続行、という風にしておけば良いと思いますよ。 ご参考まで。

n5s1r3k1
質問者

お礼

ちなみにそのVBAを教えていただけないでしょうか。

n5s1r3k1
質問者

補足

Sub マクロ() Dim 試験10 Dim 試験20 If 試験10 And 試験20 Then 試験50 End If End Sub

関連するQ&A

  • マクロ VBAについて

    例えばsheet1に試験1、試験2、試験3というマクロが保存されていたとします。 この状態で もし試験1と試験2のマクロが実行されていれば試験3のマクロを実行する。というVBAは可能なのでしょうか。 私は初心者ですがたぶんIFを使うんではないかと思うんですが、詳しい方いましたら宜しくお願いします。

  • コマンドボタンに二回目のマクロ実行しない設定を

    excel2007を使ってマクロ作成の初心者です。 「最新明細」シート上に、ユーザーフォームがあります。 その中のコマンドボタンクリックすると マクロ2を実行します。 しかし、このマクロは月初めに1回だけ実行し、 再びボタンをクリックしても、マクロ2を実行しないようにしたいです。 いろいろ考えたましたが、思ったように動作させることできず、こまってます。 どうしたらよいのでしょう。 Sub 処理済の確認() Dim AB3 As Date Dim AB4 As Date Sheets("計算").Select If AB3 = AB4 Then Exit Sub MsgBox "データは処理済みです。" Sheets("最新明細").Select Else End If If AB3 <> AB4 Then マクロ2の実行 End If End Sub

  • エクセルのマクロについて教えていただきたいのですが・・・

    見積書を作成しているんですが、1枚目のシート(見積書)に明細が書ききれなかった時に、マクロを実行すると、『明細書』と言う名前のシートが(1)~(5)枚目まで追加され、各シートの小計を1枚目のシートに書き出す・・・と言うマクロを作りたいのですが、うまくいかずに困っています>< 追加されるシートの元となる『見積もりマスター』と言うシートがあって、そのシート内でそれぞれのシートの小計は取れるのですが・・・ 下記のマクロの中に何か追加すればうまくいく方法はありますか?? (明細書は追加する時もあれば追加しない時もあってその都度、使う人が、最大5枚まで何枚追加するかを決めるそうです。) Sub Macro1() Dim cnt As Integer Dim wkNum As Double Dim ws As Worksheet  For Each ws In Worksheets   If Left(ws.Name, 4) = "明細書(" Then    If IsNumeric(Mid(ws.Name, 5, 1)) Then     wkNum = Val(Mid(ws.Name, 5, 1))     If cnt < wkNum Then      cnt = wkNum     End If    End If   End If  Next ws  If cnt >= 5 Then   MsgBox ("明細書シートが既に5枚以上あるため追加できません")   Exit Sub  Else   Sheets("明細マスター").Copy after:=Sheets(Worksheets.Count)   ActiveSheet.Name = "明細書(" & cnt + 1 & ")"  End If End Sub マクロ自体をあまり理解できてなくて、会社の人や、ここで教えていただいて進めているので、出来ればそのままコピーして使用できるようにしていただけるとありがたいです。 よろしくお願いします。

  • エクセルのマクロで

    お世話になります 下記のマクロで実行した所 100まで書式設定で保護、ロックしたいのですが b3:l3はロックするものの 4行目以降はロックしません どうしたらいいでしょうか もう1つ、このシートはいつもc3からはじめたいのですが If ActiveCell.Value >= "" Then の部分はどうしたらいいでしょうか よろしくおねがいいたします 初心者でバカな質問ですみません Sub マクロ1() Dim i As Integer For i = 1 To 100 If ActiveCell.Value >= "" Then Range("B3:l3").Select Selection.Locked = True Selection.FormulaHidden = False End If ActiveCell.Offset(1, 0).Select Next End Sub

  • マクロで色が同じになるように設定したい

    こんにちは。 現在マクロに挑戦中なのですが、一点分からず戸惑っています。 お分かりになる方教えてください。 下記のマクロを書きました。 Sheet2のセルに数字を入れることによってSheet1のセルの色が変わるようにしています。 25以上の数字は全て青(カラー番号5)表示にしたいのですが、どのように記したら良のか教えてください。 --------------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim iColors As Variant Dim i As Integer Dim j As Integer iColors = Array(36, 20, 24, 37, 40, 39, 17, 22, 45, 43, 28, 6, 4, 41, 18, 47, 50, 46, 10, 7, 3, 21, 9, 5) For Each c In Target If c.Value <> "" Then If IsNumeric(c.Value) Then i = c.Value If i > 0 And i < 25 Then j = iColors(i - 1) Else j = 2 End If End If End If i = c.Row If i > 2 And j > 0 Then Worksheets("Sheet1").Range("B3:K6").Cells(i - 3).Interior.ColorIndex = j End If Next c End Sub --------------------------------------------------------------- お分かりになる方、宜しくお願い致します。

  • VBAで2つのプロシージャーをつなげるには

    VBAでSub ~ End Subまで書き終えて、一つのプロシジャーを完成させたあと、 その下に、もう一つのプロシジャーを作り、連続してマクロを動かしたいと思ってます。 例に例えると、 Sub test() Dim MyRange As Range Set MyRange = Columns("c").Find(What:="﨑") If MyRange Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyRange.Font.ColorIndex = 3  End If Dim MyCells As Range Set MyCells = Columns("c").Find(What:="髙") If MyCells Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyCells.Font.ColorIndex = 3 End If End Sub      Sub sample()    Dim i As Long   For i = 1 To Cells(Rows.Count, "I").End(xlUp).Row    If InStr(1, Cells(i, "I"), "VBA", vbTextCompare) > 0 Then   Cells(i, "M") = "YES"   End If   Next   End Sub 上記のような2つのマクロをつなげて1つの実家行えるようにするにはどうしたらよろしいのでしょうか。 どうしても実行時に上のマクロと下のマクロが別々に表示されてしまします。 (ちなみに、上側のマクロは環境依存文字を探すマクロ、下側はVBAの文字を見つけ出すマクロです。) どなたかご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願い致します。

  • マクロ

    マクロ初心者です。 シート名=社員番号(数字2~3桁) 以下のようなマクロを組んでみましたが、 実行してみると該当する社員番号のシートがあっても 「該当する社員が存在しません」と出てしまいます。 間違いをご指摘いただけると助かります。 Sub 社員検索()   Dim SheetName As String   SheetName = InputBox("社員検索" & vbLf & vbLf & "社員番号を入力して下さい")    If SheetName = vbNullString Then     Exit Sub     Sheets(SheetName).Activate    Else     MsgBox "該当する社員が存在しません"    End If End Sub よろしくお願いいたします。

  • VBAの時間設定について教えてください

    質問1: VBAで、ある一定の時間だけ指定したマクロが実行されることは出来ますか? (例えば毎日16時30分~21時だけ"マクロA"が実行されるというような) ただ、16時30分にエクセルが開いているとは限らないので、もし開始される時間に開いてない場合でも、指定した時間内に1度でも開けば必ず実行されるのでしょうか? マクロAには Sub マクロA() If sheets("1").Range("A1").Value <>"" Then msgbox"このシートは使えません" Else End If End sub という命令を作っています。 質問2: SUB() EndSub で Private Sub Worksheet_SelectionChange(ByVal           Target As Range を開くことは出来ないのでしょか。 色々やってみたのですが出来ません。 すいません。初心者なので色々本を見ながら勉強していますが、なかなかうまく出来ません。 どなたか、教えてください。      

  • VBA マクロの2つのカウントダウンタイマーの件

    VBAでマクロ作成中ですが、標準モジュール間の変数のやり取りがよくわかりません。 教えていただけないでしょうか? Sub 指定時刻にマクロを実行する1()    mywait = 1    指定時刻 = Now + TimeSerial(0,0,mywait)    IF MacroStop = False Then      Application.OnTime 指定時刻,”指定時刻にマクロを実行する1”    Call やりたいこと1    Else MacroStop = False End End If End Sub Sub やりたいこと1    C1= C1+1    ZAN1 =TB1-C1   ・・・ End Sub Sub マクロ停止1()     MacroStop = True     Range(”A1”).ClearContents     ... End Sub と Sub 指定時刻にマクロを実行する2()    mywait = 1    指定時刻 = Now + TimeSerial(0,0,mywait)    IF MacroStop = False Then      Application.OnTime 指定時刻,”指定時刻にマクロを実行する2”    Call やりたいこと2    Else MacroStop = False End End If End Sub Sub やりたいこと2    C2= C2+1    ZAN2 =TB2-C2  ・・・ End Sub Sub マクロ停止2()     MacroStop = True     Range(”A2”).ClearContents     ... End Sub という標準モジュールを2つ作成し、一方のマクロ(C1側)を止めると、もう一方のマクロ(C2側)の変数(TB2)がIntegerからEmptyに変わってしまい、ZAN2がマイナスカウントしてしまいます。 TB1はInteger型のままClearContentsされ0になり、C1側のマクロは正常に止まっています。C2側は、継続して正常にカウントダウンさせたいのですが。。。 マクロの初心者です どなたかよろしくお願いします。 

  • エクセル マクロのいれ方

    エクセルを使って表を作っています。 自分のしたい事をするには、マクロを組まなくてはならないことが分かりました。 私はマクロは使ったことがないので、本来ならちゃんと勉強すべきなんですが、締め切りが迫ってるので、マクロのVBAを調べました。 したいのは、『ロックされているセル以外のデータをクリアにする』ということなんですが、その為には下記のVBA?を入れればいいらしいのです。 Sub UnlockCellClear() Dim Rng As Range For Each Rng In UsedRange   If Rng.Locked = False Then     Rng.Clear     Rng.Locked = False   End If Next End Sub ツール→マクロ→VBA→標準モジュール→Module1を開き、上記のVBAを入れてみましたが出来ませんでした。 そんな簡単なことじゃないんですかね? ど 質問の説明が下手でしたら申し訳ありません。

専門家に質問してみよう