『VBAで順次自動表示』(さちこ) シート1の下記のリストを作る  A  千葉  東京  栃木   ・   ・  シート2に印刷ボタンを作ってシート2のA1に リスト内にあるものを順次一秒ずつ表示させたい リスト内に3こあったら3秒になり10こだったら10秒に なりますよね ---- パソコンのスペックが低かったら、そうとも言い切れませんよ。 質問のタイトルと内容が、関係ないのでは? (INA) ---- で、どのあたりを聞きたいのかな? 1秒ずつ表示させるVBA? 印刷させるVBA? VBAという言葉に敏感な連中が多数在籍していますのでご注意ください。 (おいぼれramrun) ---- すみません 詳しく書きます シート1 A1は入力 A2は=vlookup(A1,シート2,・・・ シート2は 主キーとなる 東京 千葉 埼玉 とかの県名が入っています それをシート1のA1に順番(順不同)に取り込みA2の表示を一秒くらいずつ 変えたいのです つまりボタンを作成しボタンの押下後VBAで東京→千葉→埼玉の(←順不同でもいい) 順に表示させたいのです (さちこ) ---- こんばんは、私が VBA を載せるのはおこがましいのですが、 たまたま Wait を知ってたもので....滝汗! Wait の間隔は修正して下さい。   (jun53) Sub Macro1() ' Macro1 Macro Range("A1").Select ActiveCell.FormulaR1C1 = "東京" Application.Wait (Now() + TimeValue("00:00:02")) Range("A1").Select ActiveCell.FormulaR1C1 = "千葉" Application.Wait (Now() + TimeValue("00:00:02")) Range("A1").Select ActiveCell.FormulaR1C1 = "埼玉" Application.Wait (Now() + TimeValue("00:00:02")) Range("A1").Select ActiveCell.FormulaR1C1 = "神奈川" Application.Wait (Now() + TimeValue("00:00:02")) End Sub ---- このコード、短く整理するのはどうするんでしょう?? ←(jun53) です ---- テストしてませんが、こんな感じ? (kazu) Sub WaitMsg(rng, msg, tim) Range(rng).Select ActiveCell.FormulaR1C1 = msg Application.Wait (Now() + TimeValue("00:00:" & tim)) End Sub Sub WaitMsgProc() WaitMsg "A1", "東京", 2 WaitMsg "A1", "千葉", 2 WaitMsg "A1", "埼玉", 2 WaitMsg "A1", "神奈川", 2 End Sub ---- ありがとうございます だけどリスト上、東京とかを書き換えるときがあるのでVBAを書き換えず 自動でリストから もってきたいのですが? (さちこ) ---- kazuさんのコードをちょっと変えてみました。 Sub WaitMsg(rng, msg, tim) Range(rng).Select ActiveCell.FormulaR1C1 = msg Application.Wait (Now() + TimeValue("00:00:" & tim)) End Sub Sub WaitMsgProc() Dim i As Integer Dim myrng As String For i = 1 To Sheets("Sheet1").Range("A65536").End(xlUp).Row myrag = Sheets("Sheet1").Cells(i, 1).Value WaitMsg "A1", myrag, 1 Next i End Sub 試してください。もっと良い方法があれば追記してくれるはずです。(ケン) ---- もっといい方法ではありませんが、いかにもこれが素人 VBA という見本。 Sub WaitMsgProc() WaitMsg "A1", Sheets("Sheet1").Range("a1"), 2 WaitMsg "A1", Sheets("Sheet1").Range("a2"), 2 WaitMsg "A1", Sheets("Sheet1").Range("a3"), 2 WaitMsg "A1", Sheets("Sheet1").Range("a4"), 2 End Sub もう少し待ってみてください、もっといい方法が出てくるはずです。 あはっ 私のは完璧にバージョンダウン です。   (jun53) ---- jun53のだと4つのみだけしかできないのでスペース以外に入っているものを 表示させたいです (さちこ) ---- ん スペース以外ってどういうことでしょう?? シート1にリストがある事を想定してますが?? リストに空白が有るのですか? ケンさんのを使えば簡単ですよ。 Sheet2 を Sheet1 に変えてみて下さい。 無理矢理私のでしたら WaitMsg "A1", Sheets("Sheet1").Range("a4"), 2 の次に WaitMsg "A1", Sheets("Sheet1").Range("a5"), 2 以下必要分だけコピーして下に続けて、参照数字を変更して下さい。 でも、ケンさんのをおすすめしますね。   (jun53) ---- junさん、ごめんなさい。↑のSheet2すでに直しました。m(_ _)m (ケン) ---- これってどういう風に使えばいいのですか シート1にボタンを作ってそのまま貼り付ければいいのですか (さちこ) ---- Alt+F11でVBEを開き挿入>標準モジュールで上のコードを貼り付けします。 フォームのボタンならそのままWaitMsgProcのマクロ登録するだけです。 (ケン) ---- あら、タッチの差でケンさんに先を越されました。 最も基本的なことが、忘れられていたようです。 (1)エクセルのワークシートから[Alt]キーを押したまま[F11]キーで VBEの世界に入ります。 (2)VBEの世界で、[挿入]メニュー→[標準モジュール]で画面右半分に まっさらなシートがでてきますからそこにVBAコードを貼り付けます。 (3)ワークシートに戻ってコントロールツールボックスのボタンを ワークシート上に作成します。 (4)デザインモードを終了して、できたボタンをダブルクリックすると、 もう一度VBAの世界に入ります。そこで、下のように書きます。 Private Sub CommandButton1_Click() WaitMsgProc End Sub (kazu) ---- まあまあ、長々と書いてる間にお二人がアドバイスを。 以下は参考程度に読んで下さい。 ***************************** 最初に確認しますが、kazuさんの VBA を試して 東京 千葉 埼玉 神奈川 が2秒間隔でシート2の A1 に表示出来たんですよね? これが出来て無いと説明方法が違ってきますが? 同じ事でケンさんのコードを標準モジュールに貼り付け、ボタンをシート2に作って ケンさんのコードをそのボタンに登録する。 その前にモジュール内に古い WaitMsgProc があったらそれを全部削除して下さい。 必要なら此処ですぐコピー出来ますから。 私のでしたら Sub WaitMsgProc() WaitMsg "A1", Sheets("Sheet1").Range("a1"), 2 WaitMsg "A1", Sheets("Sheet1").Range("a2"), 2 WaitMsg "A1", Sheets("Sheet1").Range("a3"), 2 WaitMsg "A1", Sheets("Sheet1").Range("a4"), 2 End Sub    ↑ コードの中の WaitMsg "A1", Sheets("Sheet1").Range("a4"), 2 の次に WaitMsg "A1", Sheets("Sheet1").Range("a5"), 2 を追加する 以下必要分だけこのコードを増やしていく、参照数字は増えた分だけ変更。 WaitMsg "A1", Sheets("Sheet1").Range("a1"), 2                 ↑      ↑               シート1の  セルA1を参照 の意味です。 今日はこれで PC OFF しますのでもし明日で良かったら説明致します。 でも本当は、私はこれで目一杯でもっと詳しい方が沢山いらっしゃいます。 きっとその方達がアドバイスしてくれると思います。いや、絶対にアドバイスしてくれます。  (jun53) ---- いろいろありがとうございました がんばってやってみます また質問をします (さちこ) ---- さちこさんの2回目のレス >それをシート1のA1に順番(順不同)に取り込みA2の表示を一秒くらいずつ を、よく見ると私が勘違いしてたようです。すみません。 「シート1のA1に 秒間隔で表示させたい」 ですね。 ケンさんのコードでしたら、 Sheet1 を Sheet2 に修正 万が一、私のコードでしたら これも Sheet1 全部を Sheet2 に修正して下さい。 ボタンは、シート1に作って下さい。 これで間違い無いでしょうか?、、不安。。  (jun53) ---- あら、本当!1回目と2回目でシートが反対になっていますね。(ケン) ---- 誰かが脱ぎ捨てた「おいぼれ」の家紋入りの羽織を着込んでらっしゃる御方、 >VBAという言葉に敏感な連中が多数在籍していますのでご注意ください。 アナタのご指摘通りの展開になって参りましたわ、ホンマに...。     傍観者(弥太郎) ---- kazuさんのこのコードの時 Sub WaitMsg(rng, msg, tim) Range(rng).Select ActiveCell.FormulaR1C1 = msg Application.Wait (Now() + TimeValue("00:00:" & tim)) End Sub Sub WaitMsgProc() Dim i As Integer Dim myrng As String For i = 1 To Sheets("Sheet1").Range("A65536").End(xlUp).Row myrag = Sheets("Sheet1").Cells(i, 1).Value WaitMsg "A1", myrag, 1 Next i End Sub たとえば主キー(表示させたいもの)がAの一列だけでなくB・Cとあったときに ボタンをわけて使い全部がこのコードにくるとき Sub ボタン10_Click() Range("D1").Select WaitMsgProc End Sub Sub ボタン11_Click() Range("D1").Select WaitMsgProc End Sub Sub ボタン12_Click() Range("D1").Select WaitMsgProc End Sub としてもだめですよね myrag = Sheets("Sheet1").Cells(i, 1).Value                   ↑ここをボタン10の時は 1でボタン11のときは2でという形にはできないのですか すみません初心者でおねがいします (さちこ) ---- そこを変えるよりも、こうしたほうがいいかと。 (まだよく見てないけど...) Sub WaitMsg(rng, msg, tim) Range(rng).Select ActiveCell.FormulaR1C1 = msg Application.Wait (Now() + TimeValue("00:00:" & tim)) End Sub Sub WaitMsgProc(srng) Dim i As Integer Dim myrng As String For i = 1 To Sheets("Sheet1").Range(srng & "65536").End(xlUp).Row myrag = Sheets("Sheet1").Cells(i, 1).Value WaitMsg "A1", myrag, 1 Next i End Sub Sub ボタン10_Click() WaitMsgProc "D" End Sub Sub ボタン11_Click() WaitMsgProc "E" End Sub Sub ボタン12_Click() WaitMsgProc "F" End Sub 羽織を捨てていかれた方がおりましてな。 このご時世にリッチな方でしたわ。 へへへ。 お客さん、レンタルしまひょか? でもお客さん、風紀EENさんと凹凸の関係にあるそうじゃないでっか。 二人羽織の方がいいなぁ(笑)。 (おいぼれramrun) ---- わたしもちょっとだけ参加 Declare Sub Sleep Lib "kernel32" _ (ByVal dwMilliseconds As Long) Sub Sleep_Msg(myCol As Long) Dim myRange As Range Dim myRow As Long With Worksheets("sheet1") myRow = .Cells(65536, myCol).End(xlUp).Row For Each myRange In .Range(.Cells(1, myCol), .Cells(myRow, myCol)) Cells(1, 1).Value = myRange.Value Sleep 1000 Next End With End Sub Sub ボタン11_Click() Sleep_Msg 1 End Sub Sub ボタン12_Click() Sleep_Msg 2 End Sub マクロ実行中に[Esc]→[終了]としても終了できないときがあるようです注意してください [Esc]→[デバッグ]なら大丈夫のようです  (りな) ---- ↑    ↑ >二人羽織の方がいいなぁ せやけど、そないな羽目に陥るんやったら、背中合わせに着なあきまへんがな。(笑) それにしてもおいぼれさん、何で次々ほんなおもろいネタが浮かんできまんのん?    羽織捨てたら薄ら寒うなってきた(弥太郎) ---- ちょっとの間、忙しくなるのでその前に。 再帰的なヤツをひとつ。 順不同でもいいということなので、リストの逆順表示ですけど可ですよね。 どこまで汎用性を持たせるか迷ったんですけど、面倒なのでゴメンシテ。 シート1のD、E、F列にリストがあって、 D列にボタン11、E列にボタン12、F列にボタン13が割り当てられていて、 シート2のA1へ1秒毎に表示するとき〜 というように組んでいます。 途中での終了はESCキー。 サブルーチンFは F(行数, 列番号, 秒) (ramrun)     Sub F(ByVal rw As Long, ByVal cl As Byte, ByVal sec As Byte) Sheet2.Cells(1, 1).Value = Sheet1.Cells(rw, cl).Value Application.Wait (Now() + TimeValue("00:00:" & sec)) If rw > 1 Then F rw - 1, cl, sec End Sub       'D列より(4列目) Sub ボタン11_Click() F Sheet1.Cells(65536, 4).End(xlUp).Row, 4, 1 End Sub 'E列より(5列目) Sub ボタン12_Click() F Sheet1.Cells(65536, 5).End(xlUp).Row, 5, 1 End Sub 'F列より(6列目) Sub ボタン13_Click() F Sheet1.Cells(65536, 6).End(xlUp).Row, 6, 1 End Sub