Excel VBA 質問スレ Part32
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2013/10/07(月) 22:19:55.86★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
前スレ:Excel VBA 質問スレ Part31
http://toro.2ch.net/test/read.cgi/tech/1376371376/
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0847841
2014/05/02(金) 11:21:13.12ID:0Sm4zufHおい、すごいじゃないか(笑)
今年一番感動した(爆)
それより知りたいんですが、こういう解法ってどうやって探し当てたんですか?
ふつうのVBA入門系の本には載ってないし
ヘルプでも、Application.Volatile→使用法の方向では調べられても、やりたい事→Application.Volatileの方向では、絶対に調べられないか困難だぞ。
0848デフォルトの名無しさん
2014/05/02(金) 12:31:21.02ID:eSB12fTeggrks
>>832と同じ人?
0849デフォルトの名無しさん
2014/05/02(金) 16:31:45.74ID:VTOLN4jYxpからwin7は同じマシンで、呼び出し?使い方も同じです。
試しにより高性能なマシンでやってみたところ
xpのときよりも10倍ほど時間がかかるもののとりあえず完走しました。
2000のときは窓が一つで中に複数のファイルを開く形でしたが
2013のようにファイルごとひとつづつ立ち上がると負担が大きいんでしょうか。
マクロ自体に問題があるわけではなさそうなので別のマシンで使うことにします。
ありがとうございました。
0850デフォルトの名無しさん
2014/05/03(土) 05:25:42.80ID:9Cuh0B7r引数や戻り値はとりあえず置いておいて、シートに書かれた関数があれば実行して、無ければエラーメッセージを出力するような処理を作りたいです。
0851デフォルトの名無しさん
2014/05/03(土) 07:59:55.44ID:W3aEO+UgそのシートをActivateせずに取り出す方法を以前発見したのですが
それはどういう方法ですか?
0852デフォルトの名無しさん
2014/05/03(土) 08:19:26.49ID:ElKs5wH6適当だしあんまり確認してないけどこんなのどうでしょう、バグったらごめんなさい
Private Sub Test()
Dim buf As Variant
Dim target As Range
For Each target In Selection
If target.Value = "" Then
Debug.Print "Error"
Else
'ここでセルに入力されたワークシート関数を実行・評価する
buf = Application.Evaluate(target.Value)
If IsError(buf) Then
Debug.Print "Error"
Else
Debug.Print buf
End If
End If
Next target
End Sub
0853デフォルトの名無しさん
2014/05/04(日) 07:58:46.98ID:PkGldEjn1つを他のもののコピーとしたいんですが
単に代入すると同一のものの参照となります。
そうじゃなくて構造体の全メンバの変数の値をコピーするにはどうするのが一般的ですか?
0854デフォルトの名無しさん
2014/05/04(日) 08:03:57.92ID:PkGldEjnDim name as String
Dim age as integer
Dim sex as String
Dim first_time_sex_date as Date
End Structure
Dim student(2) as Student
student(1).name="Taro"
student(1).age=16
student(1).sex="Male"
student(1).first_time_sex_date="2012/7/7"
student(2)=student(1)
student(2).name="Jiro"
みたいにして変になる。
0855デフォルトの名無しさん
2014/05/04(日) 08:15:17.54ID:PkGldEjnタブ(複数開いてる)でアクティブになっているページをgetするためには
どういうコードになりますか?
0856デフォルトの名無しさん
2014/05/04(日) 08:41:36.79ID:v/jP7knVhttp://toro.2ch.net/test/read.cgi/tech/1342087380/
0857デフォルトの名無しさん
2014/05/05(月) 02:49:54.32ID:GlFHWnLlVariantにすればByvalで渡せますが要素数が多いと速度が激しく遅くなるのは何故ですか?
この2つ調べても分からなかったので教えてください
0858857
2014/05/05(月) 02:50:19.74ID:GlFHWnLl0859デフォルトの名無しさん
2014/05/05(月) 02:55:31.79ID:GlFHWnLlByvalで渡すとき要素数が大きくなっても速度が遅くならないと思うんですけど
0860デフォルトの名無しさん
2014/05/05(月) 03:33:06.97ID:uFaF33P2任意の型の配列をVariantに代入した時、代入されるのはポインタ(番地)じゃなくて内容、配列全体が丸ごとコピーされる
だから配列のサイズに応じて処理時間も変わる
Dim A(100) As Integer
Dim B As Variant
B = A
MsgBox TypeName(B)
このサンプルの場合、代入後にBの型を見るとInteger(配列)に変わっている
0861デフォルトの名無しさん
2014/05/05(月) 03:45:08.05ID:GlFHWnLlInteger(配列)に変わっているという事は配列全体が丸ごとコピーされてる証拠になるわけですか?
じゃあ普通の配列がByvalで渡せないのは配列全体が丸ごとコピーされて
処理時間が遅くなるから使い物にならないという理由なのですかね
0862デフォルトの名無しさん
2014/05/05(月) 08:56:42.69ID:uFaF33P2ちょっと調べてみたけど、簡単には証拠は示せなさそう
もっと厳密に言うと、Variantに配列を代入すると、もともとVariantには数値が1つしか格納できないので、
配列のコピーが作られた上で、その配列へのポインタがVariantに格納される
だからVariantの中身はポインタ、という理解は間違ってはないけど、そのポインタの先にあるのは
代入元の配列ではなく、新しく作られた配列になっている
配列を丸ごと新しく作るため、処理はそれなりに重くなるしメモリも消費する
証拠はないけど、そういう仕様
どうして配列がbyValで直接渡せないのか、理由はよくわからないが、たぶんスタックオーバーフローを防ぐためのMSのおせっかいだと思う
Variantに配列を入れた時は、配列の本体は別の所に作られてスタックはVariant本体の分しか消費しない
だから許容する仕様にしたんじゃないのかな
0863デフォルトの名無しさん
2014/05/05(月) 18:06:25.33ID:/BaOb3+lDim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.CreateTextFile("\\PC2\os\test.txt")
.WriteLine Now
.Close
End With
Set FSO = Nothing
ネットワーク先のディレクトリに新規ファイルの書き出しを行った場合
ネットワーク先のPCが消えているとVBAエラーが発生しますが、このエラーを無視して
コードを停止させることなく続行させ続けるにはどうすれば良いのでしょうか?
0864デフォルトの名無しさん
2014/05/05(月) 18:15:41.79ID:zTX2z7nm0865デフォルトの名無しさん
2014/05/05(月) 18:23:09.75ID:/BaOb3+lありがとうございます!これは便利ですね。独学でVBAを勉強中ですが知りませんでした。。
0866デフォルトの名無しさん
2014/05/05(月) 18:25:54.17ID:hthjFo5y0867デフォルトの名無しさん
2014/05/05(月) 18:51:57.18ID:zTX2z7nm*ちなみにSleepはPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwmillsecounds As Long)と宣言してから使います
0868デフォルトの名無しさん
2014/05/05(月) 19:02:52.67ID:eTvbwywS0869デフォルトの名無しさん
2014/05/05(月) 19:37:01.29ID:uFaF33P2>>303
0870デフォルトの名無しさん
2014/05/05(月) 19:38:31.76ID:zTX2z7nmそれオレじゃないか(ワラ
0871デフォルトの名無しさん
2014/05/05(月) 20:03:01.60ID:rD1fSl2O文体と質問のアホさ加減が同じ
0872デフォルトの名無しさん
2014/05/05(月) 20:05:33.73ID:uFaF33P2DoEventsはメッセージループを処理する
0873デフォルトの名無しさん
2014/05/05(月) 20:06:58.64ID:uFaF33P20874デフォルトの名無しさん
2014/05/05(月) 20:09:20.00ID:F7Zw8bMG0875デフォルトの名無しさん
2014/05/05(月) 20:21:56.97ID:zTX2z7nmではさっそく質問に移ります
いろんなソフトウェアの上のほうに
ファイル(F)、表示(V)・・・、ツール(O)、ヘルプとあり、たとえばファイル(F)の下には終了(X)とだいたい決まっています。
これVBAから現在立ち上げてるアプリをすべてオブジェクト変数にいれて
そのメソッドとしてキー入力をできるようにできる方法はありませんか?
たとえばメモ帳を
Appli(1)というオブジェクト変数にして
Appli(1).KeySend("FX")というコードを書けば
見事にメモ帳が閉じるような。
もちろん本題は閉じることではなくいろんなアプリを自由自在に操ることですが。
0876デフォルトの名無しさん
2014/05/05(月) 20:43:36.05ID:iASqhGK2VBAからと言うのが
APIも含めるという広域を意味しているなら
出来ないこともない。
0877デフォルトの名無しさん
2014/05/05(月) 21:05:07.90ID:zTX2z7nm含めましょう。
ではどうやるのでしょうか?
0878デフォルトの名無しさん
2014/05/05(月) 21:31:26.89ID:uFaF33P2さすがにVBAの比率が低くなりすぎてスレチ
API関係のスレにでも行け
0879デフォルトの名無しさん
2014/05/06(火) 09:50:23.96ID:Avr/JzZk[引数] Webサイトページの一番上のバーに表示されてる「タイトル」
[返り値] なし
[機能] 現在開いてるWebページを全部調べて、引数の「タイトル」のものがあればそれをアクティブにしてタブなら前面に出してそれをオブジェクト変数に代入する。なければなにもしない。
0880デフォルトの名無しさん
2014/05/06(火) 14:55:03.32ID:jl3/KWxAはい、次のかた〜
0881デフォルトの名無しさん
2014/05/06(火) 16:34:49.64ID:EF/hc8MQAPIで可能
VBAでやる必然性なし
0882デフォルトの名無しさん
2014/05/06(火) 16:48:53.58ID:WIbNvSPM必然性?
0883デフォルトの名無しさん
2014/05/07(水) 01:13:46.53ID:XHO24LnTシートを右クリックなどして見れるようにするにはどうすれば良いですか。セルとかコメントに出力する以外の方法でお願いします。
0884デフォルトの名無しさん
2014/05/07(水) 01:37:28.97ID:uh4oWvq+http://officetanaka.net/excel/vba/tips/tips122.htm
0885デフォルトの名無しさん
2014/05/07(水) 01:56:01.55ID:XHO24LnT各シートにこういうプロパティ画面を表示するにはどうやるのですか?
0886デフォルトの名無しさん
2014/05/07(水) 11:11:46.79ID:aD6Um6cx0887デフォルトの名無しさん
2014/05/07(水) 13:35:40.93ID:w4bXJfpERegExpやMatchCollection型の変数を定義するとユーザー定義型未定義の
コンパイルエラーが出てしまうのですがどうしたらよいですか?
0888デフォルトの名無しさん
2014/05/07(水) 13:39:29.10ID:uh4oWvq+エラーが出る最小限のソース晒して
0889887
2014/05/07(水) 14:33:27.95ID:w4bXJfpERefFile = "C:\Windows\System32\vbscript.dll\2"
ActiveWorkbook.VBProject.References.AddFromFile RefFile
RefFile = "C:\Windows\System32\vbscript.dll\3"
ActiveWorkbook.VBProject.References.AddFromFile RefFile
Dim re As RegExp
Dim mc As MatchCollection
これだとコンパイルチェック前にライブラリがロードされてないから、
RegExp型やMatchCollection型が定義されてないってないなるのは当たり前ですが、
これを回避する方法はありますか? ライブラリロードだけを別マクロにして1度だけ
実行すれば良いんでしょうけど。
0890デフォルトの名無しさん
2014/05/07(水) 14:58:46.92ID:uh4oWvq+それはVBAでは基本的に無理
万能の解決策じゃないけど「CreateObject」「実行時バインディング」あたりで調べてみ
0892デフォルトの名無しさん
2014/05/08(木) 16:21:39.25ID:DqNc14pRVBAで正規表現を扱うためのやり方をググるとこの辺がヒットするんだけど
それではアカンの?
VBAで正規表現を使う (1/3):CodeZine
http://codezine.jp/article/detail/1655
Office TANAKA - Excel VBA Tips[正規表現によるマッチング]
http://officetanaka.net/excel/vba/tips/tips38.htm
0893デフォルトの名無しさん
2014/05/08(木) 16:45:09.21ID:UhAEWxzwなんかの事情でどうしても実行時に参照したいんだよな?
0894デフォルトの名無しさん
2014/05/08(木) 17:19:41.49ID:WIVGkEtc目的はなんで、それをやるとなにができて、どういうことが便利ですか?
0895デフォルトの名無しさん
2014/05/08(木) 18:24:47.72ID:uOW3clqTよくある話じゃないか
0896デフォルトの名無しさん
2014/05/08(木) 21:10:31.28ID:JZCmTzL00897デフォルトの名無しさん
2014/05/10(土) 00:30:41.40ID:DYZqKBH3そのとき
(1) 一旦、変数(配列変数とか)に入れて、その変数でいろいろ計算する
(2) そのまんまセルの値を参照しながら計算する (Cells(r,c)とかを駆使して)
の、どっちがいいですか?それともどっちも変わらないですか?場合によるならその解説もお願いします。
0898デフォルトの名無しさん
2014/05/10(土) 00:57:40.41ID:DYZqKBH3引数 Rabgeオブジェクト(セル)
返り値 Rabgeオブジェクト(セル)
処理 もし引数が結合セルだった場合、その左上のセルを返り値として返す。結合セルでないふつうのセルだった場合、なにもせずおなじセルを返す。
0899デフォルトの名無しさん
2014/05/10(土) 00:59:22.57ID:0NkefTVZどっちがいいかと言えば、自分にとってわかりやすい方
セルの読み書きは変数への代入より時間がかかるので、スピード重視なら変数に入れた方がいいと言われるけど
本気で計算スピードが欲しいならVBとかC#とか使うべきであって、結局は最初に書いたように、
プログラムを作りやすい方を選べばいいと思う
0900デフォルトの名無しさん
2014/05/10(土) 01:01:36.00ID:0NkefTVZMergeCellsとMergeAreaでがんばれ
0901デフォルトの名無しさん
2014/05/10(土) 11:38:30.40ID:Om1HfajVX.MergeArea.Cells(1,1)
0902883
2014/05/11(日) 03:04:41.66ID:X2XaIOXl0903デフォルトの名無しさん
2014/05/11(日) 13:20:36.77ID:E4N7zZTW自宅PCコア2Duo3GHZで 100メガぐらいある表のセルに数式を追加する処理がすべて動くのに5分ぐらい時間がかかるのですが
会社に持っていき一番速いi7 3Ghzのクアッドコア8スレッドのPCで実行させてみましたが同じく5分ぐらいかかりがっかりしました
それでも多少は速くなったようですが、何とか少しでも(でjきれば爆発的に)処理時間を速くできない物かと思っています。
世の中にはXeonE5系のものは15コア30スレッドというような物も存在しますが
http://ja.wikipedia.org/wiki/Xeon
Xeon搭載PCは30万ぐらい出せば買えるようですが
速くなるなら安い物かと思っているのですが
Xeonのコア数の多い物を使うとどのくらい高速になるのでしょうか?
(30スレッドでも処理時間はほとんど変わらず30万無駄遣いにおわるのでしょうか?w)
0904デフォルトの名無しさん
2014/05/11(日) 13:28:37.64ID:9n+Ded1d通常マルチコアを有効に使うためにはマルチスレッドでの処理を行います。
残念ながらVBA単独でのマルチスレッド処理はできないと思います。
http://q.hatena.ne.jp/1310989651
諦めませう
0905903
2014/05/11(日) 13:40:22.25ID:4IeCHncM残念、、、ありがとうございます。
処理中に画面下には8CPUというような表示が出ていましたがあれは書いてあるだけなのですねww
VBAはマルチスレッドに非対応だとマルチCPU対応のメリットは少なそうですね。
0906デフォルトの名無しさん
2014/05/11(日) 15:37:14.98ID:qmCq3i4D0907デフォルトの名無しさん
2014/05/11(日) 17:07:08.06ID:valH51XCエラーの種類によって処理を分岐する方法があったと思うけど
そのときに使用するエラーコードの番号ってどうやって取得しますか?
○○のエラーがでたときはメッセージ出して強制終了、
□□のエラーがでたときは無視してNEXTにそのまま続ける、
△△のエラーがでたときはこういう処置をして続行する、
みたいにしたいんです。
0908デフォルトの名無しさん
2014/05/11(日) 17:14:44.13ID:9n+Ded1d俺は
MsgBox Err.Number & " " & Err.Description, vbCritical, "xxxx"
とかで表示させて強制終了にしてるけど
実行時エラーの一覧
http://officetanaka.net/Excel/vba/error/execution_error/index.htm
0909デフォルトの名無しさん
2014/05/11(日) 17:37:21.71ID:sdx099L9エクセルそのものはマルチコア対応だから、普通のワークシート関数とかは効果あるはず
そもそもCPUが原因で遅いのじゃなければ、CPU早くしても効果薄いぞ
100メガのエクセルとか、IOでだいぶ時間食う気がするけど
ハードに金かけるならSSDとか試してみる価値はある
VBAのコード見直せば早くなる可能性もあるけど
0910デフォルトの名無しさん
2014/05/11(日) 17:39:07.78ID:valH51XCありがとうございます。
Errオブジェクトというのがあったのですか。
これは便利ですね。
0911デフォルトの名無しさん
2014/05/11(日) 20:47:26.63ID:zdamCAAu何をやってるのかわからんけど、画像とかなしで 100MB になってるなら、マジで DBMS の導入考えた方がいいかも
SQL-Server Express とかならとりあえず只だし
0912デフォルトの名無しさん
2014/05/12(月) 15:19:33.35ID:l6E7y7n0仕事で年に1回しか使わないマクロで、参照を設定し忘れて毎度何でエラーになるのか悩むもんでw
0913デフォルトの名無しさん
2014/05/12(月) 15:46:22.10ID:r3XyQ/Bdソースの先頭か、最初に開くシートの見える場所にコメントを書いておく
俺がよく使う方法は、ファイル名にコメントを入れる
Book1 (参照設定を忘れないこと).xlsx
ファイル名を勝手に変更できない時は、同じフォルダに空のテキストファイルを作って、
そのファイル名をコメントにしておく
Book1.xlsx
Book1 (参照設定を忘れないこと).txt
こんなふうにしておくと、2つのファイルが隣に並ぶので、コメントが必ず目に入る
0914デフォルトの名無しさん
2014/05/12(月) 16:22:06.75ID:Pq2vKY3y参照先のパスが毎回変わるとか、特殊な事情があるのか?
なぜ参照設定した状態で保存しないの?
なぜ実行時にコードで動的にやる必要があるの?
0915デフォルトの名無しさん
2014/05/12(月) 18:04:32.83ID:tYXPKjS8フォームにあるボタンを一時的に機能を停止するのに
btnxx.Enabled = False
にすれば、ボタンがグレーアウトされて使えなくはなりますが、シートに貼り付けたボタン
に対して同じような事するにはどうするんでしょうか?
0916デフォルトの名無しさん
2014/05/12(月) 21:17:50.64ID:Pq2vKY3ySheet1.Shapes("ボタン 1").ControlFormat.Enabled = False
Sheet1.CommandButton1.Enabled = False
とか
ただ、フォームコントロールのEnabled=Falseにしても、グレーアウトしないな
押せなくはなるけど
0917デフォルトの名無しさん
2014/05/12(月) 21:53:45.43ID:tYXPKjS8こちらの言い方がおかしかったか
http://www.dotup.org/uploda/www.dotup.org5057295.jpg
こういう状態の事です。
ま、それは良いんですが、、、
すいません、上の方でだと、動いてしまいます
下だと
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
で実行時エラー438になってしまいます。
当面動作予定は無いので、消しておきます
0918デフォルトの名無しさん
2014/05/13(火) 03:16:42.81ID:fpyFYdoXシートに貼るボタンは「フォーム コントロール」と「ActiveX コントロール」の2種類ある
で、グレーにして押せなくできるのは後者で、>>916の2番目も後者に対して使う方法
0919デフォルトの名無しさん
2014/05/13(火) 11:11:36.24ID:3oieHFyI了解しましたです。ありがとうございます。
0920デフォルトの名無しさん
2014/05/13(火) 12:41:31.19ID:oNeP8dL2毎年、客から支給されるデータをマクロで整形してDTPソフトに貼り込む作業なもんで。
0921デフォルトの名無しさん
2014/05/13(火) 19:25:34.15ID:/l0lTNTz参照設定はプログラムモジュールを指定するもの
データが変わろうが、参照設定は変わらんだろ
0922デフォルトの名無しさん
2014/05/14(水) 00:44:43.93ID:4NYZ0gDe確か参照設定はブックに依存するのではなく、
アプリケーション側に依存したはず。
つまり参照設定していない他のPC上にあるEXCELでそのブックを立ち上げても
ダメだったんじゃなかったかな。
違ってたらごめん。
0923デフォルトの名無しさん
2014/05/14(水) 01:44:23.14ID:k2UyUu49お前の環境では、あるブックに参照設定したらすべてのエクセルファイルでその参照設定が有効になってるのか?
つか、今のエクセル、未使用の参照設定勝手に外して保存しやがるな
それだけじゃなく、未使用のコードも勝手に消されてる
なんつう迷惑な事しやがるんだ
0924デフォルトの名無しさん
2014/05/14(水) 19:48:14.68ID:9e1uL7m3オプションで清掃が有効になってない?
0925デフォルトの名無しさん
2014/05/15(木) 11:36:12.81ID:xP8vZsncその 清掃 とかいうオプションはどこにある?
0926デフォルトの名無しさん
2014/05/15(木) 20:30:44.53ID:Mes52j2B0927デフォルトの名無しさん
2014/06/06(金) 17:56:50.11ID:xrGe04ueその場合どんなコードになりますか?
0928デフォルトの名無しさん
2014/06/06(金) 18:58:23.21ID:nBXq1INXFunction ar(cnt As Integer) As Variant
Dim ret() As Integer
ReDim ret(cnt)
ar = ret
End Function
0929デフォルトの名無しさん
2014/06/06(金) 19:29:10.75ID:xrGe04ueあれれ?おかしいですよ。
返り値はVariantなのにそのプロシージャ内ではInteger。
こんなこと許される?
0930デフォルトの名無しさん
2014/06/06(金) 19:29:56.02ID:xrGe04ueReDim ret(cnt)
をまとめて
Dim ret(cnt) As Integer
にしちゃ問題あるの?
0931デフォルトの名無しさん
2014/06/06(金) 20:56:58.40ID:2p7Hju+qそんなことできない
0932デフォルトの名無しさん
2014/06/06(金) 20:59:12.41ID:xrGe04ueそれはなぜですか?
0933デフォルトの名無しさん
2014/06/06(金) 21:07:05.43ID:fJT63IUR0934デフォルトの名無しさん
2014/06/06(金) 21:12:39.28ID:2p7Hju+qVBAのルールで、Dimの中で配列のサイズに変数は使えない、と決まっているから
実際にやってみればエラーが出るからすぐ確認できる
0935デフォルトの名無しさん
2014/06/06(金) 21:27:08.12ID:xrGe04ue0936デフォルトの名無しさん
2014/06/07(土) 11:14:14.46ID:7p+CDDc/前回作業時刻よりも1時間以降経過した後でないと同じ作業は出来ないようにしたいのですが、、、
If Now() < DateAdd("h", 1, Worksheets("main").Cells(7, 3)) Then
MsgBox "前回作業時刻よりも1時間経っていません。" & vbCrLf & _
DateAdd("h", 1, Worksheets("main").Cells(7, 3)) & " 以降に作業してください"
Exit Sub
Else
MsgBox "現在時刻:" & Format(Now(), "hh:mm") & vbCrLf & _
"直前作業時刻より1時間後:" & DateAdd("h", 1, Worksheets("main").Cells(7, 3))
End If
とすると、
現在時刻:11:12
直前作業時刻より1時間後:11:30:00
となってElse以降しか実行しません
時刻の比較ってどうするんでしたっけ?
0937デフォルトの名無しさん
2014/06/07(土) 15:30:59.32ID:SxbAzKvi0938デフォルトの名無しさん
2014/06/07(土) 16:25:46.19ID:7p+CDDc/If TimeValue(Now()) < TimeValue(DateAdd("h", 1, Worksheets("main").Cells(7, 3))) Then
でElse以前が動作できるようになりました
0939デフォルトの名無しさん
2014/06/07(土) 17:38:13.17ID:qI6lrvl+Cells(7, 3)に入ってる時刻がシリアル値なら、そんな長い式を書かなくてもこれでいける
If Now() < Worksheets("main").Cells(7, 3) + #1:00:00# Then
0940デフォルトの名無しさん
2014/06/07(土) 17:41:53.05ID:qI6lrvl+日付込みだとおかしくなる
ワークシート上のシリアル値は1900/1/1になってる可能性があるから
0941デフォルトの名無しさん
2014/06/07(土) 18:42:33.53ID:FLlpq6LcじゃVB6で良かったんじゃね?みたいな事になるよね
0942デフォルトの名無しさん
2014/06/07(土) 18:49:17.07ID:qI6lrvl+コンパイルどころかソースファイルすら作る必要がないという手軽さは他の処理系では真似できない
0943デフォルトの名無しさん
2014/06/07(土) 19:25:35.22ID:SxbAzKvihttp://cpplover.blogspot.jp/2014/05/blog-post_29.html
0944デフォルトの名無しさん
2014/06/10(火) 02:49:48.07ID:YTnem67Idata1,data2,data4が同じフォルダに入っている場合に、
存在しないdata3を飛ばしてファイルをすべて開くというテストプログラムを作っています
Sub test()
Dim I As Long
For I = 1 To 4
If Dir("C:\excel\dataI.xlsx") <> "" Then
Workbooks.Open "C:\excel\dataI.xlsx"
Else
End If
Next I
End Sub
これだとエラーは出ませんが、どのファイルも開きません
Iが文字として認識されているためにelse条件に引っかかっているのだと
思うのですが、ファイル名中のIを変数として認識させる方法はないでしょうか?
同じフォルダ中のファイルをすべて開く方法ならあるようですが、それだと意味が
ないのです。わかる方がいましたらよろしくお願いいたします。
0945デフォルトの名無しさん
2014/06/10(火) 03:33:00.72ID:hc4LiDN+Sub test()
Dim I As Integer
For I = 1 To 4
If Dir("C:\excel\data" & I & ".xlsx") <> "" Then
Workbooks.Open "C:\excel\data" & I & ".xlsx"
End If
Next I
End Sub
0946デフォルトの名無しさん
2014/06/10(火) 04:40:54.93ID:ZdnvVnA2Dim fn As String
fn = Dir("C:\excel\data*.xlsx")
Do Until (fn = "")
If fn Like "data#.xlsx" Then Workbooks.Open "C:\excel\" & fn
fn = Dir()
Loop
C:\excel 内の data数字.xlsx を全て開くというもの
まあ、「同じフォルダ中のファイルをすべて開く」の発展型みたいなもので
同じ方式を使いながら、対象を「すべて」ではなくDirとLikeで絞り込むだけの話
レス数が900を超えています。1000を超えると表示できなくなるよ。