トップページ > プログラム > 2014年06月23日 > h9OdHO6e

書き込み順位&時間帯一覧

2 位/170 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000011000200002017



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
874
870
Excel VBA 質問スレ Part33

書き込みレス一覧

Excel VBA 質問スレ Part33
856 :デフォルトの名無しさん[sage]:2014/06/23(月) 11:18:51.46 ID:h9OdHO6e
>>854
たぶんメモ帳でもできるんだろうけど
エクセルでシート上にメッセージを表示じゃだめなの?
そっちのほうが簡単じゃね?
Excel VBA 質問スレ Part33
865 :デフォルトの名無しさん[sage]:2014/06/23(月) 12:49:27.29 ID:h9OdHO6e
>>864

Private Sub UserForm_Activate()
Call myForm.myButton_Click
End Sub
じゃなくて
Private Sub UserForm_Activate()
Call myButton_Click
End Sub
でいいんじゃないの?
Excel VBA 質問スレ Part33
868 :デフォルトの名無しさん[sage]:2014/06/23(月) 16:22:31.21 ID:h9OdHO6e
そんな手間かけるより使う人達にEnter連打するなって言えば済む話じゃないか?
Excel VBA 質問スレ Part33
870 :デフォルトの名無しさん[]:2014/06/23(月) 16:39:51.77 ID:h9OdHO6e
そのメッセージボックスがいかなる状態で表示されるのか不明だけれど、
メッセージ表示のトリガーをマウス操作にすれば
(画面上の何らかのオブジェクトをマウスでクリックした後でメッセージが表示されるようにする)
Enter連打は回避できる
Excel VBA 質問スレ Part33
874 :デフォルトの名無しさん[sage]:2014/06/23(月) 21:27:39.48 ID:h9OdHO6e
>>871
まぁ、本来は>>872さんの仰る通りなんだけど、
コード書いてみたかったから書きました。

A列に名前がある行を先頭にして、B列で空白が出てきた行までの範囲の
C列の値を集計して、先頭行のD列に書き込むマクロです。
処理対象シートの下の方から順次処理をして、先頭行のD列が空白ではない時点、
もしくは先頭行が1行目になった時点で処理を終了します。

なお、With 〜 のところで処理するシートを指定しているので、
使用する際はここを適宜書き換えてください。

Sub test()
Dim rwA As Long
Dim rwB As Long
With ThisWorkbook.Sheets(1)
rwA = .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(rwA, 1) = "" Then Exit Sub
rwB = .Cells(rwA, 2).End(xlDown).Row
Do
If .Cells(rwA, 4) = "" Then Exit Do
.Cells(rwA, 4) = WorksheetFunction.Sum(.Cells(rwA, 3).Resize(rwB - rwA + 1))
If rwA = 1 Then Exit Do
rwB = .Cells(rwA - 1, 2).End(xlUp).Row
rwA = .Cells(rwA, 1).End(xlUp).Row
Loop
End With
End Sub
Excel VBA 質問スレ Part33
876 :874[sage]:2014/06/23(月) 21:44:44.46 ID:h9OdHO6e
あれ?
書き間違えてた。

If .Cells(rwA, 4) = "" Then Exit Do

じゃなくて

If .Cells(rwA, 4) <> "" Then Exit Do

です。
何で間違えたんだろ?
(多分、3行上からIf文をコピペして "=" を "<>" に直し忘れたんですね)
あと、表の開始行が1行目じゃないとエラーが出ますので、
その場合は

If rwA = 1 Then Exit Do

の1を開始する行に変更してください。
Excel VBA 質問スレ Part33
882 :870[sage]:2014/06/23(月) 23:54:40.63 ID:h9OdHO6e
>>880
あぁ、そういうことですか。
作業中にEnter連打とか
どんなバカ野郎揃いの職場なんだと思ってました、ゴメンなさい。

そんじゃあ、Yes/Noじゃなくて、Yes/No/キャンセルの3つのボタンを用意して、
デフォルトをキャンセルボタンにしておいたらどうですか?

で、キャンセル選択時には再びメッセージボックスを表示するように無限ループにしておく。

あるいはメッセージボックス表示前とボタン押下後にNowで時刻を取得して
1秒以上(別に1秒じゃなくてもいいけど)経過してなければ
同様に無限ループとか。

閾値が1秒だとちょっと作業のテンポが悪すぎかもしれないんですが、
確かミリ秒単位で時間を計れるマクロがググッたらどっかに在った気がします。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。