kobouzu_su の回答履歴

全93件中1~20件表示
  • 負数のみを対象としたSUMPRODUCT関数

    エクセル2000です。 たとえば A1:A40 がCCCでないもののうちの B1:B40 の中での最大値をSUMPRODUCT関数で求める方法は以下の式だと思います。 =SUMPRODUCT(MAX((A1:A40<>"CCC")*(B1:B40))) ところが、B1:B40 の数値がすべて負の数だった場合、返って来る答えは常に 0 になるようです。 最初は原因がわからず、途方にくれていましたが、A1:A4の中で値がCCCのセル場合、そのセルが返す値は FALSE で、これを対応するB列に乗じた積を 0 としているのではないかと推測しました。 そこで、次の式のように FALSEの数+1番目に大きい数を指定したところ、やっと負の数のなかから最大値を返すようになったように思います。 =SUMPRODUCT(LARGE((A1:A40<>"CCC")*(B1:B40),COUNTIF(A1:A40,"CCC")+1)) この推測は合っているのでしょうか? 他にもっと簡単なやりかたがあるのでしょうか?

  • エクセルVBAのFunctionについて

    エクセル2000です。 以下は、時間を与えれば、それに相当する挨拶が返ってくるFunctionのつもりです。 一応期待通りの働きはしてくれます。 質問は、Functionから ”messe” として返ってくる文字列を、Function内部で生成している、”hmsg”、”mes”、”s”、”kao(i)” にわけて取得できないかということです。 もちろん Functionを複数つくったり、返ってくる文字列”messe”を、”。”の位置を取得してMID関数等で分ければ取得できるのはわかるのですが、そんな手間をかけず、たとえば、MsgBox hmsg のような感じで簡単に ”hmsg”、”mes”、”s”、”kao(i)” それぞれの文字列を取得する方法があったらご教示くださいませ。 Sub test01() MsgBox messe(TimeValue("17:46")) End Sub Function messe(t As Date) As String Dim t2 As Integer, t3 As Integer, m As Integer, i As Integer, n As Integer Dim kao Dim s As String t2 = Hour(t) t3 = Hour(TimeValue(t) + TimeValue("01:00")) m = Minute(t) kao = Split("o(^o^)/,(*^o^*),(*´∇`*),(= ̄▽ ̄=)V,(〃^∇^〃),(=´▽`)ゞ,(^∇^),(〃^∇^)o,ヾ(@⌒ー⌒@)ノ, (#^。^#),o(^-^)o,ヾ(=^▽^=)ノ, \(*^▽^*)/ ,( ̄ー ̄)v", ",") Select Case t2 Case Is < 11: hmsg = "おはようございます。" Case Is < 17: hmsg = "こんにちは。" Case Else: hmsg = "こんばんは。" End Select Select Case m Case Is < 15: mes = t2 & "時を回りましたね。 " Case Is < 30: mes = "もうすぐ " & t2 & "時半になりますね。 " Case Is < 45: mes = t2 & "時半を過ぎてますね。" Case Else: mes = "もうすぐ " & t3 & "時になるんですね。 " End Select Select Case t2 Case 0: s = "とうとう日付が変わりました。 " Case 1, 2, 3, 4: s = "からだに気をつけてね。 " Case 5, 6: s = "朝になっちゃいました。 " Case 7, 8, 9: s = "また一日が始まりましたね。 " Case 10: s = "お昼にはまだもうちょっと・・・。 " Case 11: s = "おなかが空いちゃいました。 " Case 12: s = "お昼ですよ~。 " Case 13: s = "食後は眠くなっちゃいます。 " Case 14: s = "そろそろおやつが欲しいかも。 " Case 15, 16: s = "午後は長いですね。 " Case 17: s = "お疲れさまです。 " Case 18: s = "残業、お疲れさまです。 " Case 19, 20: s = "そろそろ切り上げませんか。 " Case 21, 22: s = "こんな遅くまで大変ですね。 " Case 23: s = "日付が変わっちゃいますよ。 " Case Else: s = "がんばってね。 " End Select Randomize i = Int(Rnd() * 14) messe = hmsg & mes & s & kao(i) End Function

  • エクセルVBAのFunctionについて

    エクセル2000です。 以下は、時間を与えれば、それに相当する挨拶が返ってくるFunctionのつもりです。 一応期待通りの働きはしてくれます。 質問は、Functionから ”messe” として返ってくる文字列を、Function内部で生成している、”hmsg”、”mes”、”s”、”kao(i)” にわけて取得できないかということです。 もちろん Functionを複数つくったり、返ってくる文字列”messe”を、”。”の位置を取得してMID関数等で分ければ取得できるのはわかるのですが、そんな手間をかけず、たとえば、MsgBox hmsg のような感じで簡単に ”hmsg”、”mes”、”s”、”kao(i)” それぞれの文字列を取得する方法があったらご教示くださいませ。 Sub test01() MsgBox messe(TimeValue("17:46")) End Sub Function messe(t As Date) As String Dim t2 As Integer, t3 As Integer, m As Integer, i As Integer, n As Integer Dim kao Dim s As String t2 = Hour(t) t3 = Hour(TimeValue(t) + TimeValue("01:00")) m = Minute(t) kao = Split("o(^o^)/,(*^o^*),(*´∇`*),(= ̄▽ ̄=)V,(〃^∇^〃),(=´▽`)ゞ,(^∇^),(〃^∇^)o,ヾ(@⌒ー⌒@)ノ, (#^。^#),o(^-^)o,ヾ(=^▽^=)ノ, \(*^▽^*)/ ,( ̄ー ̄)v", ",") Select Case t2 Case Is < 11: hmsg = "おはようございます。" Case Is < 17: hmsg = "こんにちは。" Case Else: hmsg = "こんばんは。" End Select Select Case m Case Is < 15: mes = t2 & "時を回りましたね。 " Case Is < 30: mes = "もうすぐ " & t2 & "時半になりますね。 " Case Is < 45: mes = t2 & "時半を過ぎてますね。" Case Else: mes = "もうすぐ " & t3 & "時になるんですね。 " End Select Select Case t2 Case 0: s = "とうとう日付が変わりました。 " Case 1, 2, 3, 4: s = "からだに気をつけてね。 " Case 5, 6: s = "朝になっちゃいました。 " Case 7, 8, 9: s = "また一日が始まりましたね。 " Case 10: s = "お昼にはまだもうちょっと・・・。 " Case 11: s = "おなかが空いちゃいました。 " Case 12: s = "お昼ですよ~。 " Case 13: s = "食後は眠くなっちゃいます。 " Case 14: s = "そろそろおやつが欲しいかも。 " Case 15, 16: s = "午後は長いですね。 " Case 17: s = "お疲れさまです。 " Case 18: s = "残業、お疲れさまです。 " Case 19, 20: s = "そろそろ切り上げませんか。 " Case 21, 22: s = "こんな遅くまで大変ですね。 " Case 23: s = "日付が変わっちゃいますよ。 " Case Else: s = "がんばってね。 " End Select Randomize i = Int(Rnd() * 14) messe = hmsg & mes & s & kao(i) End Function

  • エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?

    例えば、A1、B2、C3セルに「名前の定義」で、それぞれ入力A、入力B、入力C という名前がつけてあります。 それらのセルに入力があった場合、Select Caseで分岐させ作動するマクロをつくりました。 簡略化すると以下のようなもので、一応正しく作動します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "A1" MsgBox "A処理します。" Case "B2" MsgBox "B処理します。" Case "C3" MsgBox "C処理します。" End Select End Sub ただ、せっかくセルに名前を定義してあるのに、個々の入力セルの判定をTarget.Addressでしているのが不満です。 ( ̄~ ̄;) 定義された名前を使えないかと以下のようにやってみましたが実行時エラーで「サポートしてません」となってしまいます。 (T.T) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Names.Name 'ここでエラー Case "入力A" MsgBox "A処理します。" Case "入力B" MsgBox "B処理します。" Case "入力C" MsgBox "C処理します。" End Select End Sub どうやったら、Targetに設定されている名前を取得できるのでしょうか? (^∇^`)? 実際の例はもっと対象が多いので、Select Caseを使わない以下の方法は避けたいのです。 If文の羅列(これでも正しく作動はします。) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub If Not Intersect(Target, Range("入力A")) Is Nothing Then MsgBox "A処理します。" ElseIf Not Intersect(Target, Range("入力B")) Is Nothing Then MsgBox "B処理します。" Else MsgBox "C処理します。" End If End Sub なにとぞよろしくお願いします。 (o。_。)oペコッ

  • エクセルVBAでShapeRangeについて

    すみません、教えてください。 以下のマクロは正常に動きます。 Sub TEST() With ActiveSheet For Each s In .Shapes If s.AutoShapeType = msoShape5pointStar Then s.Delete Next .Cells.Interior.ColorIndex = 1 Set AA = .Shapes.AddShape(msoShape5pointStar, 55, 22, 25#, 25#) AA.Fill.Visible = msoTrue AA.Fill.Solid AA.Fill.ForeColor.SchemeColor = 13 AA.Fill.Transparency = 0# AA.line.Weight = 0.75 AA.line.DashStyle = msoLineSolid AA.line.Style = msoLineSingle AA.line.Transparency = 0# AA.line.Visible = msoTrue AA.line.ForeColor.SchemeColor = 64 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) ' .Range("A1").Select'(1) Set AB = AA.Duplicate '(2) AB.Top = 44 AB.Left = 110 ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 End With End Sub ところが、 Set AB = AA.Duplicate '(2)の部分を、コメントアウトしている '(1)の記述に変えると、 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 の部分も ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 に変えないとエラーになります。 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) も Set AB = AA.Duplicate '(2) も、同じことのように思えるのですが、この違いで、ShapeRangeというのを入れたり消したりしなければならないのはどうしてでしょうか? エクセルは2000です。

  • エクセルVBAでShapeRangeについて

    すみません、教えてください。 以下のマクロは正常に動きます。 Sub TEST() With ActiveSheet For Each s In .Shapes If s.AutoShapeType = msoShape5pointStar Then s.Delete Next .Cells.Interior.ColorIndex = 1 Set AA = .Shapes.AddShape(msoShape5pointStar, 55, 22, 25#, 25#) AA.Fill.Visible = msoTrue AA.Fill.Solid AA.Fill.ForeColor.SchemeColor = 13 AA.Fill.Transparency = 0# AA.line.Weight = 0.75 AA.line.DashStyle = msoLineSolid AA.line.Style = msoLineSingle AA.line.Transparency = 0# AA.line.Visible = msoTrue AA.line.ForeColor.SchemeColor = 64 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) ' .Range("A1").Select'(1) Set AB = AA.Duplicate '(2) AB.Top = 44 AB.Left = 110 ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 End With End Sub ところが、 Set AB = AA.Duplicate '(2)の部分を、コメントアウトしている '(1)の記述に変えると、 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 の部分も ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 に変えないとエラーになります。 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) も Set AB = AA.Duplicate '(2) も、同じことのように思えるのですが、この違いで、ShapeRangeというのを入れたり消したりしなければならないのはどうしてでしょうか? エクセルは2000です。

  • エクセルVBAでShapeRangeについて

    すみません、教えてください。 以下のマクロは正常に動きます。 Sub TEST() With ActiveSheet For Each s In .Shapes If s.AutoShapeType = msoShape5pointStar Then s.Delete Next .Cells.Interior.ColorIndex = 1 Set AA = .Shapes.AddShape(msoShape5pointStar, 55, 22, 25#, 25#) AA.Fill.Visible = msoTrue AA.Fill.Solid AA.Fill.ForeColor.SchemeColor = 13 AA.Fill.Transparency = 0# AA.line.Weight = 0.75 AA.line.DashStyle = msoLineSolid AA.line.Style = msoLineSingle AA.line.Transparency = 0# AA.line.Visible = msoTrue AA.line.ForeColor.SchemeColor = 64 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) ' .Range("A1").Select'(1) Set AB = AA.Duplicate '(2) AB.Top = 44 AB.Left = 110 ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 End With End Sub ところが、 Set AB = AA.Duplicate '(2)の部分を、コメントアウトしている '(1)の記述に変えると、 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 の部分も ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 に変えないとエラーになります。 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) も Set AB = AA.Duplicate '(2) も、同じことのように思えるのですが、この違いで、ShapeRangeというのを入れたり消したりしなければならないのはどうしてでしょうか? エクセルは2000です。

  • エクセルVBA、入力しないと閉じないInputBox

    必ず何かを入力しないと閉じないInputBoxを作ろうと思います。 以下のコードで入力がなければ閉じないというか、Line:に戻るので、何度でも現れるInputBoxになるようですが、このやり方は正しいですか? 通常はどうやるのでしょうか? Sub test() Dim a line: a = Application.InputBox("必ず入力して下さい。", "Input!") If Len(a) = 0 Or a = False Then GoTo line MsgBox "有難う。" & a & " ですね。", , "(o。_。)oペコッ" End Sub

  • エクセルVBA、入力しないと閉じないInputBox

    必ず何かを入力しないと閉じないInputBoxを作ろうと思います。 以下のコードで入力がなければ閉じないというか、Line:に戻るので、何度でも現れるInputBoxになるようですが、このやり方は正しいですか? 通常はどうやるのでしょうか? Sub test() Dim a line: a = Application.InputBox("必ず入力して下さい。", "Input!") If Len(a) = 0 Or a = False Then GoTo line MsgBox "有難う。" & a & " ですね。", , "(o。_。)oペコッ" End Sub

  • エクセルVBAでDictionaryオブジェクトについて

    エクセル2000です。 例えばA列に国名、B列に都市名、C列に団体名が切れ目なく並ぶリストがあります。 表はA列を基準にソートされています。 A列の同じ国名が終わる行のD列の1個のセルに、そこまでのC列で出てきた団体名を重複しないでカンマ区切りで表示しようと思います。 そのため、下記のようにDictionaryオブジェクトで団体名の重複を防いでいます。 Sub Test2() Dim i As Long Dim myStr As String Dim myDic Set myDic = CreateObject("Scripting.Dictionary") For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row If myDic.exists(Cells(i, "C").Value) = False Then myStr = myStr & Cells(i, "C").Value & "、" myDic.Add Cells(i, "C").Value, "" End If If Cells(i, "A") <> Cells(i + 1, "A") Then Cells(i, "D") = Left(myStr, Len(myStr) - 1) myStr = "" End If Next i End Sub 問題は、国をまたいで同じ団体名が出てきた場合、すでに上の方の国で変数myDicに登録されているため、登録されないということです。 上記コードでD列に変数myStを転記し、myStrを = ""にした時に、変数myDicの方もクリアしてしまえばいいとは思うのですが、どうやってクリアしたらよいのかわかりません。 ご教示くださいませ。 こんな感じにしたいのです。 日本 東京 abc 日本 横浜 bbc 日本 大阪 bbc 日本 名古屋 abc 日本 札幌 abc bbc、abc 韓国 ソウル kbc 韓国 プサン kkc 韓国 テグ kbc 韓国 テジョン abc 韓国 インチョン bbc kbc、kkc、bbc、abc 北朝鮮 ピョンヤン xxc 北朝鮮 テポドン xxc xxc 中国 北京 ccc 中国 南京 ccc 中国 上海 abc 中国 大連 kbc ccc、abc、kbc 表が上手く表示されませんが、各国名の最終行のB列都市名の右の1個はC列の団体名で、その右にくっついて見えるのがD列のカンマ区切りのデータです。

  • エクセルのマクロ

    現在エクセルにてデーターの分析などをおこなっています。 そこで1つ質問ですがオートフィルターをした後のベスト10のデーターをコピーできないでしょうか? Sheets("シート名").Select Range("J5").Select Selection.AutoFilter Field:=10, Criteria1:=">=500", Operator:=xlAnd Range("A5:R2384").Sort Key1:=Range("Q5"), Order1:=xlDescending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal ActiveWindow.SmallScroll ToRight:=-4 Range("B5:R15").Select Application.CutCopyMode = False Selection.Copy Sheets("データーシート3").Select Range("B5").Select ActiveSheet.Paste この様にやっているのですが Criteria1:=">=500"の部分が変動する為に、表示されるデーター数がバラバラです。 たえずどんな条件でオートフィルターをかけても10件コピーできる方法はないでしょうか?

  • EXCEL VBA

    EOMONTH 関数にて、日付のみを表示させたのですが、どうすればいいのですか?

    • a29
    • 回答数3
  • エクセルVBAで文字列の重複を削除する方法?

    VBAでの質問でしゅ。エクセルは2000です。 変数MyStrに全角カンマで区切られた文字列データが10種類程度あります。 現在、ある条件のもとに、MyStr=MyStr & Cell(i,2) & "、"のように取り込んで、最後にMyStr=Left(MyStr, Len(MyStr) - 1) で一番最後の「、」を削除しています。 例えば、MyStrの中身は、 OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、OK建設株式会社、CC工業合資会社、DD商事有限会社、EE合名会社、株式会社BB企画 のような感じです。この中には重複したデータがある可能性があります。(例ではOK建設株式会社と株式会社BB企画) これを重複を排除し、変数MyStrの中身を、 OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、CC工業合資会社、DD商事有限会社、EE合名会社  と変える方法はないでしょうか? あるいは、変数 MyStrにデータを取り込む際にすでにMyStrに入っているデータは除くような方法でもかまいません。 お知恵をお貸しくださいませ。 (o。_。)oペコッ.

  • エクセルVBAで文字列の重複を削除する方法?

    VBAでの質問でしゅ。エクセルは2000です。 変数MyStrに全角カンマで区切られた文字列データが10種類程度あります。 現在、ある条件のもとに、MyStr=MyStr & Cell(i,2) & "、"のように取り込んで、最後にMyStr=Left(MyStr, Len(MyStr) - 1) で一番最後の「、」を削除しています。 例えば、MyStrの中身は、 OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、OK建設株式会社、CC工業合資会社、DD商事有限会社、EE合名会社、株式会社BB企画 のような感じです。この中には重複したデータがある可能性があります。(例ではOK建設株式会社と株式会社BB企画) これを重複を排除し、変数MyStrの中身を、 OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、CC工業合資会社、DD商事有限会社、EE合名会社  と変える方法はないでしょうか? あるいは、変数 MyStrにデータを取り込む際にすでにMyStrに入っているデータは除くような方法でもかまいません。 お知恵をお貸しくださいませ。 (o。_。)oペコッ.

  • エクセルVBAで文字列の重複を削除する方法?

    VBAでの質問でしゅ。エクセルは2000です。 変数MyStrに全角カンマで区切られた文字列データが10種類程度あります。 現在、ある条件のもとに、MyStr=MyStr & Cell(i,2) & "、"のように取り込んで、最後にMyStr=Left(MyStr, Len(MyStr) - 1) で一番最後の「、」を削除しています。 例えば、MyStrの中身は、 OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、OK建設株式会社、CC工業合資会社、DD商事有限会社、EE合名会社、株式会社BB企画 のような感じです。この中には重複したデータがある可能性があります。(例ではOK建設株式会社と株式会社BB企画) これを重複を排除し、変数MyStrの中身を、 OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、CC工業合資会社、DD商事有限会社、EE合名会社  と変える方法はないでしょうか? あるいは、変数 MyStrにデータを取り込む際にすでにMyStrに入っているデータは除くような方法でもかまいません。 お知恵をお貸しくださいませ。 (o。_。)oペコッ.

  • エクセルVBAを中断する場合

    簡略化してますが、下記のVBAコードはDATAシートから1行ずつデータをBBBシートに読み込み、プリントまたはプリントプレビューするものです。 予期したとおりに作動するのですが、1点不満があります。 途中でやめることが出来ないのです。もちろんEscキーを長押しすればエラーになって止まりますが、そうするとステータスバーの表示が残ったままになります。 On Error GoTo で、Application.StatusBar = ""に飛ぶようにしているのですがEscキー長押しのエラーでは飛ばないようです。 1.どうやったらすんなり止めることができるでしょうか? 2.その他、改善点がありましたらご指摘ください。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Option Explicit Sub DM_OutPut() Dim myYN As Integer, myYN2 As Integer, s As Long, n As Long, x As Long, tx As String Dim ds As Worksheet, bs As Worksheet, base As Range s = 300 myYN = MsgBox("データはDATAシートに切れ目なくセットされてますか?", vbYesNo + vbQuestion, " (^∇^)?") If myYN = vbNo Then Exit Sub Else myYN2 = MsgBox("本番印刷行きますか?" _ & vbCrLf & "すぐ行っちゃうなら「はい」を、" _ & vbCrLf & "テストでプレビュー画面出すなら「いいえ」をクリックしてください。" _ & vbCrLf & "" _ & vbCrLf & "プレビューは1画面 約" & Format(s, "#,##0") & "ミリ秒間表示します。", vbYesNo + vbQuestion, " (^∇^)?") End If Set ds = Sheets("DATA") Set bs = Sheets("BBB") Set base = ds.Range("B3") '基準点 bs.Rows(3).ClearContents Do While 1 On Error GoTo line If base.Offset(n).Value = "" Then Exit Do '基準点以下にデータのある限り続ける bs.Rows(3).Value = base.Offset(n).EntireRow.Value n = n + 1 'カウント Application.StatusBar = Format(n, "#,##0") & "件目を処理しました。" If myYN2 = vbNo Then SendKeys "%C" 'デモ用 ActiveSheet.PrintPreview tx = "プレビュー" Else ActiveSheet.PrintOut Copies:=1 '本番用 tx = "プリント指示" End If Sleep s '休みを入れる Loop MsgBox Format(n, "#,##0") & "件を" & tx & "しました。", vbInformation, " (o^-')v " line: Application.StatusBar = "" End Sub

  • エクセルVBAを中断する場合

    簡略化してますが、下記のVBAコードはDATAシートから1行ずつデータをBBBシートに読み込み、プリントまたはプリントプレビューするものです。 予期したとおりに作動するのですが、1点不満があります。 途中でやめることが出来ないのです。もちろんEscキーを長押しすればエラーになって止まりますが、そうするとステータスバーの表示が残ったままになります。 On Error GoTo で、Application.StatusBar = ""に飛ぶようにしているのですがEscキー長押しのエラーでは飛ばないようです。 1.どうやったらすんなり止めることができるでしょうか? 2.その他、改善点がありましたらご指摘ください。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Option Explicit Sub DM_OutPut() Dim myYN As Integer, myYN2 As Integer, s As Long, n As Long, x As Long, tx As String Dim ds As Worksheet, bs As Worksheet, base As Range s = 300 myYN = MsgBox("データはDATAシートに切れ目なくセットされてますか?", vbYesNo + vbQuestion, " (^∇^)?") If myYN = vbNo Then Exit Sub Else myYN2 = MsgBox("本番印刷行きますか?" _ & vbCrLf & "すぐ行っちゃうなら「はい」を、" _ & vbCrLf & "テストでプレビュー画面出すなら「いいえ」をクリックしてください。" _ & vbCrLf & "" _ & vbCrLf & "プレビューは1画面 約" & Format(s, "#,##0") & "ミリ秒間表示します。", vbYesNo + vbQuestion, " (^∇^)?") End If Set ds = Sheets("DATA") Set bs = Sheets("BBB") Set base = ds.Range("B3") '基準点 bs.Rows(3).ClearContents Do While 1 On Error GoTo line If base.Offset(n).Value = "" Then Exit Do '基準点以下にデータのある限り続ける bs.Rows(3).Value = base.Offset(n).EntireRow.Value n = n + 1 'カウント Application.StatusBar = Format(n, "#,##0") & "件目を処理しました。" If myYN2 = vbNo Then SendKeys "%C" 'デモ用 ActiveSheet.PrintPreview tx = "プレビュー" Else ActiveSheet.PrintOut Copies:=1 '本番用 tx = "プリント指示" End If Sleep s '休みを入れる Loop MsgBox Format(n, "#,##0") & "件を" & tx & "しました。", vbInformation, " (o^-')v " line: Application.StatusBar = "" End Sub

  • EXCEL VBA の計算で

    USERFORMに付けたTEXTBOXの値をFormat関数でカンマを 付け、別のTEXTBOXの値と計算させるとうまく計算して くれません。どのようにすれば出来るのでしょうか。 カンマを付けずに表示させ計算させると問題ありません。

  • Excelの名前の作成とラベル

    こんにちは。 Excelを使っていてふと疑問に思ったので教えて下さい。 [挿入]→[名前]なのですが この先の選択肢の 「作成」と「ラベル」はどのように使うのでしょうか? 気になります。 分かる方、どうぞお願いします!

  • ブック名を変数にしたらアクティブになりません。

    色々と調べたり試したのですが、どうしても判らないので質問させてください。 Excel2002でマクロを組んでいます。 セル上の数値を使って、ブック名を変数に格納しました。 したい事は、「DataBase.xls」のCalendarシートの内容を 「07年6月売上.xls」のとあるシートに値貼り付け です。 格納した変数 Dim Uriage As String Uriage = Worksheets("設定").Range("A4") & "年" & Worksheets("設定").Range("B5") & "月売上.xls " 上記のブックを開き、マクロを記述したブックに戻り、 再度上記のブックをアクティブにしようとすると 「有効範囲にありません」とメッセージが出ます。 デバッグ状態で記述を見てみると 1 Windows("DataBase.xls").Activate (←マクロ記述のブック名) 2 Sheets("Calendar").Select 3 Range("B7:H7").Select 4 Selection.Copy 5 Windows(Uriage).Activate (←変数格納したブック名) 5番でとまっています。 ですが、オンマウスにするとちゃんと「"07年6月売上.xls"」と表示が出ます。 それ以前に、ファイルを開くことは出来てるのに・・・・ いったいどういう事なのか、どうかご教示ください。 宜しくお願いします。

    • hyorono
    • 回答数2