• ベストアンサー

エクセルマクロ中の再計算について

papayukaの回答

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

#6です。 変数 i2 と i3 と Range("AD46").Value の式、Range("C26").Value のセルに入っている関数式が不明で良く解かりませんのでアドバイスを。 if 条件 then  真の時 else  偽の時 end if のように else を使った方がコードが見渡しやすくなります。 i が 0 のループはループ前に Sheets("合計").Range("A1").ClearContents を入れれば不要に思います。 ※2の条件は Sheets("合計").Range("AD46").Value  が「空白かどうかだけの判断」 で、空白以外なら条件内に入り、※3も実行される仕組みになっていますよね? ループ中に、Sheets("合計").Range("A1").Value = b が「再計算される」と Sheets("合計").Range("AD46").Value が「空白になり」 ※2が「実行されない」事を望んでいるのですか??

list
質問者

お礼

補足漏れをさせて下さい。 AD46が職場別の合計金額であり、私の実行したい処理は、例を言うと  A.○部署の実績なし(AD46=0) -> IF文内を実行しない(別シートを作成しない)  B.△部署の実績あり(AD46>0) -> IF文内を実行する(シート名「合計」を別シートにコピーして当該部署の実績表を作成する) ところが、実績の無い部署を一度処理すると、その後、実績が有ってもIF文内が処理されず、実績なし(AD46=0)と処理されて、職場ごとの実績シートが作成されない。 また、AD46は別に関数を記載しましたがそれ以外が記載漏れであったので、下記に記載します。なお、#6さんの言われた通りに単純にAD46=sum(・・・)に変更しました。 ※i2 -> シート名「請求先」に職場名を入力してあるのですが当該請求先の数以上ループさせる必要が無いために、部署数をカウントする関数をSheets("請求先").Range("A5")に入力して、その値を当該変数に代入しています。 ※i3 -> 部署番号が連番(同一の番号は付与していません)でないために、シート名「請求先」に入力している部署名の表の上から順番に部署番号を表から抽出する時の当該部署のセルの行数です。 ※Sheets("合計").Range("C26") -> =IF($A26="","",VLOOKUP($A26,品名等!$C$6:$F$45,2,FALSE)) ※Sheets("合計").Range("A26") -> =IF(ISERROR(SMALL(実績!J$5:J$596,B26))=TRUE,"",SMALL(実績!J$5:J$596,B26)) ※Sheets("合計").Range("A26") -> 21(上下に2つの表がありA26は2枚目の1行目のデータセル) ※実績!J$5:J$596 -> 全体で実績のある品目を品目番号を昇順にJ5から列べた 最後に、「if then else end if」等は、この後、実施します。

list
質問者

補足

何回も有り難う御座います。 職場毎のデータがあり、各職場毎に集計表を作成させるマクロなんですが、シート名『合計』は職場別の合計を作成するシートで、 Sheets("合計").Range("AD46").Valueは合計金額欄であり、=IF(SUM(F46,H46,J46,L46,N46,P46,R46,T46,V46,X46,Z46,AB46)=0,"",SUM(F46,H46,J46,L46,N46,P46,R46,T46,V46,X46,Z46,AB46))となっています。 ですから、その職場に実績がある場合には、If内のマクロにて、別シートを作成し、実績が無い場合には、次の職場へ変更して処理を継続させる。 以上です。よろしくお願いします。

関連するQ&A

  • Excelのセルの比較について

    Excelのマクロにてセルの比較を行っています。 A1に"123" A2をハイパーリンクに指定して"123"と表示しています。 表示形式はどちらも通貨で表示しています。 If Range(A1).Value <> Range(A2).Value Then   MsgBox "同じではない" Else   MsgBox "同じ" End If と比較しているのですが"同じではない"が表示されてしまいます。 試しに MsgBox Range(A1).Value と MsgBox Range(A2).Value を表示してみたところ、どちらも"123"と表示されました。 セルに表示されている値で比較するにはどうしたらいいのでしょうか?

  • エクセルマクロでの計算について(2007)

    エクセルマクロ初心者です。 試行錯誤しながら作成しています。 セルB1には直接計算式を入れており(=(480+(A1)*10)/480*I1) その結果次第(70以下)でセルC1に計算結果(=(75-B1)*.48)をいれて 70より大きければセルC1に"-"を入れたいのですが上手く計算してくれません。 この処理を約65個のセルにしようと思っています。(セルの列はバラバラです) どうすればよいかご教示ください。 ちなみに現在作成している文は Private Sub 計算_Click() Worksheets("sheet2").Select If Range("B1").Value <= 70 Then Range("C1").Formula = "=(75 - (B1)) * 0.48" Else: Range("C1").Value = "-" End If End Sub よろしくお願いいたします。

  • エクセルVBA記述誤りの解決お願い

    A1~A20のセルに入力データが一切無い場合に、入力を促すメッセージを表示させるマクロを作りましたが,「実行時エラー13  型が一致しません」のエラー表示が出ます。 デバックすると下記マクロの「If Range("A1:A20").Value = "" Then」の部分でストップしていました。 いろいろとやってみましたが、うまくゆきません。 If Range("A1:A20").Value = "" Then MsgBox ("参加マークーを入力ください") Exit Sub End If 記述上の誤りがあるようですので、ご教示いただけましたら幸いです。

  • マクロif文での条件式について

    マクロ初心者です。Excel2003を使用しています。 仕事上で使用しているエクセル表より、ある値以上の項目を抽出し、その値を用いて計算結果を出すためのマクロを作成いたしました。いろいろなサイトを参考にして自分なりに書いてみたのですが、どうしてもうまくいきません。 表は簡単なもので、以下のようなものです。 1 9 2 24 3 45 4 67 1列目は使用濃度、2列目は測定値です。この測定値が30より大になった項目を抽出し、計算式にその値を代入し計算結果として出したいのです。また、全ての測定値が30以下だった場合は、計算結果の欄に”<30”とのように表示をさせたいと考えています。 以下のようにマクロを書いてみました。 Sub Macro1() For i = 1 to 4 if Worksheets("sheet1").cells(i , 2).value <=30 then Range("A5")=0 '測定値が=<30だった場合は計算をしないので、フラグとして値を入力 Elseif Worksheets("sheet1").cells(i , 2).value > 30 then Range("A5")=Cells(i , 1) Range("B5")=Cells(i , 2) Exit for Endif if Worksheets("sheet1").Range("A5").value > 0 then Range("A6").Formula ="=(50-B5) / A5" Elseif Worksheets("sheet1").Range("A5").value = 0 then Range("A6") ="<30" Else Endif Next i End Sub >30だった項目の抽出まではできたのですが、計算値をだすところがどうしてもうまくいかず、A6セルにはどんな値でも”<30”と入力されてしまいます。 マクロの基本的なルールなどがまだまだ未熟なので、基本的な構文も書けていないと思います。 全然方向性が違うかもしれないので、そういった点も含めてご教示いただけたら幸いです。 分かりにくいかもしれませんが、どうぞよろしくお願いいたします。

  • Excelのマクロで質問です

    セルに関数で文字が入った時にマクロを実行させる方法を教えて下さい。 今回行いたいのは、C9~C19セルにNGと表示された場合にメッセ―ジを表示したいです。 Private Sub Worksheet_Change(ByVal Target As Range) '変化のあったセルがA1セルか? If Intersect(Target, Range("C9:C19")) Is Nothing Then Exit Sub '条件判定:A1セルの値は 1 か? If Target.Value = "NG" Then MsgBox "NGです" End If End Sub このような場合C9~C19セルにNGと打ち込めばメッセ―ジが表示されるのですが あらかじめ、関数で =IF(M9="","",IF(Q9<M9,"OK","NG")) というような式がそれぞれのC9、C10、C11・・・・セルに入ってしまっています。 これだと、例えばC9セルにNGと表示されてもマクロは起動せず、メッセージが表示されません。 関数をマクロに盛り込むか、このままでもマクロが起動できるような書き方があるか 教えてください。 すみません。補足でQ9セルには =IF(I9="","",I9+"07:01")のような関数が 入力されています。

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

    エクセルのマクロ実行についてですが、 例えば、 E1セルの値が1ならばこうする(マクロ名 E1セル1) E2セルの値が2ならばこうする(マクロ名 E1セル2) E3セルの値が3ならばこうする(マクロ名 E1セル3) というマクロを別々に作りました。 これをボタンで実行する時に、 If Range("E1").Value = 1 Then ElseIf Range("E1").Value = 2 Then 2行目には作ったマクロを全部貼り付けないといけないのでしょうか? それとも簡単にこの場合は、マクロ名E1セル1を実行するという命令することができるのでしょうか? できるのであれば、入力方法を教えてください。 質問が分かりにくいと思いますが、よろしくお願いします。

  • エクセルのマクロを利用して

    マクロ初心者でです。 いろんなサイトから引用させて頂き次のようなマクロを作成しました。 実行すると、日付と担当者氏名(A1)がファイル名となるものです。 そこで教えて頂きたいのですが、実行すると保存先がマイドキュメントに なるのですが、これを例えば「C:\日報」というフォルダが指定されるようにしたいのですが、 自分なりに、いろいろ試したのですが全くできません。 宜しくお願い致します。 Sub 名前をつけて保存() Dim SaveFileName As String, re As Variant With Sheets("sheet1").Range("A1") If .Value = "" Then MsgBox "名前が入力されていません", vbExclamation Exit Sub Else SaveFileName = Format(Now, "yyyymmdd") & "_" & .Value End If End With re = Application.GetSaveAsFilename(SaveFileName) If re = False Then MsgBox "保存を中止しました", vbExclamation Else MsgBox "日報をを保存しました", vbInformation End If End Sub

  • エクセルでセルに文字が入力されたらマクロを実行

    前回どなたかが質問されて回答を見せてもらったら私のやりたいことと同じだったので実行してみましたが出来なかったのでもう一度質問をさせてください。 1.実行したのですが、なにも実行されません。 2.実行したらメッセジBOXだけは実行するのですが、後のコマンドが実行されずにエラーになります。 もう一度詳しく教えてください。 マクロ初心者ですよろしくお願いします。 1.【シートモジュールで条件判定し、マクロを起動する】 通常はこちらの方法が使われます。 Private Sub Worksheet_Change(ByVal Target As Range)   '変化のあったセルがA1セルか?   If Target.Address = "$A$1" Then      '条件判定:A1セルの値は 1 か?     If Target.Value = 1 Then       MsgBox "A1セルは条件を満たしました"     End If   End If End Sub 2.【ワークシート上で条件判定し、マクロを起動する】 処理内容にもよっては不向きな場合もありますが、こんな方法も あります。 マクロを Sub ではなく、Function 、、つまり関数にしてしまいます。 Function TestMacro() '<-- Sub を Function に替える   MsgBox "A1セルは条件を満たしました"   TestMacro = "" '戻り値はなし End Function そして、ワークシートの B1 セルに次の式を入力します。()は必須 です。  =IF(A1=1,TestMacro(),"")

  • エクセルのマクロのコード(?)を教えてください!

    マクロ初心者……どころか今日初めて触った者です。 なんだか楽しかったので、エクセルでスペルクイズを作ってみようかなーといじっています。(`・ω・´) が、何も知らないので何も進みません(汗) スペルを打って、 合ってたら黒で「OK!」 間違ってたら赤で「Miss!」と表示させたいです。 それから、間違ってたらMiss!の右側のセルに正しい答えを表示したいです。 今判るのは、例えばdoctorが答えのときだと↓だけです…… If Range("c4").Value = "doctor" Then Range("d4").Value = "OK!" Else Range("d4").Value = "Miss!" End If Miss!の字を赤くする方法と e4セルに正答を表示させる方法を教えてください。 どこに何と書けばいいでしょうか? 入門者すぎる質問ですみません! どなたかよろしくお願いいたしますm(_ _)m

  • マクロの自動実行

    Private Sub Worksheet_Calculate() Range("b1").Value = Range("b1").Value + Range("a1").Value End Sub このマクロをA1セルの数値が変わるたびに自動で実行するには どうすればいいでしょうか?