>>903 エクセルそのものはマルチコア対応だから、普通のワークシート関数とかは効果あるはず
そもそもCPUが原因で遅いのじゃなければ、CPU早くしても効果薄いぞ
100メガのエクセルとか、IOでだいぶ時間食う気がするけど
ハードに金かけるならSSDとか試してみる価値はある
VBAのコード見直せば早くなる可能性もあるけど
910 :
デフォルトの名無しさん:2014/05/11(日) 17:39:07.78 ID:valH51XC
>>908 ありがとうございます。
Errオブジェクトというのがあったのですか。
これは便利ですね。
>>903 何をやってるのかわからんけど、画像とかなしで 100MB になってるなら、マジで DBMS の導入考えた方がいいかも
SQL-Server Express とかならとりあえず只だし
>>893 仕事で年に1回しか使わないマクロで、参照を設定し忘れて毎度何でエラーになるのか悩むもんでw
>>912 ソースの先頭か、最初に開くシートの見える場所にコメントを書いておく
俺がよく使う方法は、ファイル名にコメントを入れる
Book1 (参照設定を忘れないこと).xlsx
ファイル名を勝手に変更できない時は、同じフォルダに空のテキストファイルを作って、
そのファイル名をコメントにしておく
Book1.xlsx
Book1 (参照設定を忘れないこと).txt
こんなふうにしておくと、2つのファイルが隣に並ぶので、コメントが必ず目に入る
>>912 参照先のパスが毎回変わるとか、特殊な事情があるのか?
なぜ参照設定した状態で保存しないの?
なぜ実行時にコードで動的にやる必要があるの?
Excel2010
フォームにあるボタンを一時的に機能を停止するのに
btnxx.Enabled = False
にすれば、ボタンがグレーアウトされて使えなくはなりますが、シートに貼り付けたボタン
に対して同じような事するにはどうするんでしょうか?
>>915 Sheet1.Shapes("ボタン 1").ControlFormat.Enabled = False
Sheet1.CommandButton1.Enabled = False
とか
ただ、フォームコントロールのEnabled=Falseにしても、グレーアウトしないな
押せなくはなるけど
>>917 シートに貼るボタンは「フォーム コントロール」と「ActiveX コントロール」の2種類ある
で、グレーにして押せなくできるのは後者で、
>>916の2番目も後者に対して使う方法
>>918 了解しましたです。ありがとうございます。
>>914 毎年、客から支給されるデータをマクロで整形してDTPソフトに貼り込む作業なもんで。
>>920 参照設定はプログラムモジュールを指定するもの
データが変わろうが、参照設定は変わらんだろ
>>921 確か参照設定はブックに依存するのではなく、
アプリケーション側に依存したはず。
つまり参照設定していない他のPC上にあるEXCELでそのブックを立ち上げても
ダメだったんじゃなかったかな。
違ってたらごめん。
>>922 お前の環境では、あるブックに参照設定したらすべてのエクセルファイルでその参照設定が有効になってるのか?
つか、今のエクセル、未使用の参照設定勝手に外して保存しやがるな
それだけじゃなく、未使用のコードも勝手に消されてる
なんつう迷惑な事しやがるんだ
>未使用のコードも勝手に消されてる
オプションで清掃が有効になってない?
>>924 その 清掃 とかいうオプションはどこにある?
馬鹿には無理
927 :
デフォルトの名無しさん:2014/06/06(金) 17:56:50.11 ID:xrGe04ue
Functionで返り値に動的配列とすることは可能ですか?
その場合どんなコードになりますか?
>>927 Function ar(cnt As Integer) As Variant
Dim ret() As Integer
ReDim ret(cnt)
ar = ret
End Function
929 :
デフォルトの名無しさん:2014/06/06(金) 19:29:10.75 ID:xrGe04ue
>>928 あれれ?おかしいですよ。
返り値はVariantなのにそのプロシージャ内ではInteger。
こんなこと許される?
930 :
デフォルトの名無しさん:2014/06/06(金) 19:29:56.02 ID:xrGe04ue
Dim ret() As Integer
ReDim ret(cnt)
をまとめて
Dim ret(cnt) As Integer
にしちゃ問題あるの?
932 :
デフォルトの名無しさん:2014/06/06(金) 20:59:12.41 ID:xrGe04ue
何故と言われてもVBAのお作法みたいなもんだしな
>>932 VBAのルールで、Dimの中で配列のサイズに変数は使えない、と決まっているから
実際にやってみればエラーが出るからすぐ確認できる
935 :
デフォルトの名無しさん:2014/06/06(金) 21:27:08.12 ID:xrGe04ue
そうでござったか
ワークシート main のC7に作業時刻を入れています eg 10:30
前回作業時刻よりも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以降しか実行しません
時刻の比較ってどうするんでしたっけ?
.TIMEVALUE()
ありがとう
If TimeValue(Now()) < TimeValue(DateAdd("h", 1, Worksheets("main").Cells(7, 3))) Then
でElse以前が動作できるようになりました
>>938 Cells(7, 3)に入ってる時刻がシリアル値なら、そんな長い式を書かなくてもこれでいける
If Now() < Worksheets("main").Cells(7, 3) + #1:00:00# Then
あ、ごめん。今のなし
日付込みだとおかしくなる
ワークシート上のシリアル値は1900/1/1になってる可能性があるから
VBAは気づいたらワークシート関数とか一切使ってなかった
じゃVB6で良かったんじゃね?みたいな事になるよね
ちょっとした計算とか確認程度なら、モジュールすら作らずにイミディエイトウィンドウでやっちゃう
コンパイルどころかソースファイルすら作る必要がないという手軽さは他の処理系では真似できない
windows7, office2010を使っています
data1,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を変数として認識させる方法はないでしょうか?
同じフォルダ中のファイルをすべて開く方法ならあるようですが、それだと意味が
ないのです。わかる方がいましたらよろしくお願いいたします。
>>944 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
Dir使うなら、ワイルドカードを使ったこんな方法もある
Dim 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で絞り込むだけの話
>>945 ありがとうございます
Iを"と&で挟むことは私も試したんですが、エクセルは両方で挟むんですね
これで行けそうです
>>946 ありがとうございます
今回はちょっと事情が特殊なんですが、普通ならこっちのほうがスマートな気もしますね。
勉強になりました。
948 :
デフォルトの名無しさん:2014/06/12(木) 22:39:19.22 ID:JGtl8L6J
日別の購入データの通し番号から、マスターを参照してジャンル分けして、ジャンルごとの合計金額を出したいです。
http://light.dotup.org/uploda/light.dotup.org28231.png ↑
データはこのような画像の通りにシート3つに分かれて存在しています。
どのようなマクロを組めばいいかお教え願いたいです。
ジャンルごとに変数というものを持たないといけないのでしょうか?
実際は母が使うので、ボタン一つで出来るのだとありがたいのですが・・・
大変面倒な質問ですが、お願いします
具体的なコードを教えてください
本当に困っていますお願いします
>>948 丸投げしたいのなら、完全な状態のブックをどっかにアップしてください
本当に困っていますお願いします
>>1 > ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
> コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
> ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
951 :
デフォルトの名無しさん:2014/06/13(金) 14:29:39.15 ID:QETwEf+A
>>949-950 本スレとマルチだし、向こうでかなり暴れてたから
もうこっちには来ないと思う。
プリンターの無い家で印刷に関するマクロを組みたいのですが
印刷の代わりに使える分かりやすい言葉はないですか?
953 :
デフォルトの名無しさん:2014/06/14(土) 14:15:23.09 ID:NIfTAMoH
>>953 如何にもな言葉してますね…
ありがとうございます助かりました!
セルに「hoge hoge、huga huga」みたいに入力されていて、
先頭の文字と「、」の後の一文字だけ大文字にすることってできるかな?
PROPERを使うと、Hoge Hoge、Huga Hugaみたいになるし、
UPPERは特定の文字だけ変換する方法わからんし、
できれば関数で簡単に処理したいんですが、無理かな?
>>955 普通に「、」でSplitして、ループ内で1文字目だけ大文字に変換して、Joinで再連結すればいいんじゃね?
関数にしたいなら、それを関数として定義すれば良いだけのことだし
1文字目だけ大文字にする方法はいくつかあるが
Midの関数ではなくステートメントの方を使うのが簡単かもな
>>956 そっかー。
簡単にできる関数が用意されてないかな?と思ったんだけど、無いんだね。
わざわざVBA作るほど沢山あるわけじゃないから、手で治すことにするよ。
アドバイスごち