トップページtech
1001コメント350KB

Excel VBA 質問スレ Part32

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2013/10/07(月) 22:19:55.86
ExcelのVBAに関する質問スレです

★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/
0835デフォルトの名無しさん2014/04/30(水) 17:45:32.67ID:Iw0O5ndu
range("C"&n&":C"&n+11).select
にしないといけない。
0836デフォルトの名無しさん2014/04/30(水) 18:05:42.98ID:bd35DGVT
>>835
ありがとう。
それをそのままコピーして貼りつけたんだけど、なぜかまた同じメッセージが
出て、今度は「":C"」の部分が選択状態になってる。
どこか、別の行がおかしいのかな。

Sub a()

Dim i As Integer
Dim n As Integer

Worksheets(1).Activate
n = 5

For i = 1 To 3

range("C"&n&":C"&n+11).select

(以下、略)
0837デフォルトの名無しさん2014/04/30(水) 18:18:39.04ID:bIvK3JIl
>>836
>>799-802
range("C"&n &":C"&n+11).select
0838デフォルトの名無しさん2014/04/30(水) 18:47:49.29ID:bd35DGVT
>>837
おお、できた。ありがとう。
0839デフォルトの名無しさん2014/05/01(木) 01:54:32.40ID:tA55q8Iy
' 参照型変数sh1の参照渡しとsh2の値渡しとで結果が違うのが理解できません。
' 参照型変数を値渡しするsh2がNothingのままなのは何故なんですか。
Sub a()
 Dim sh1 As Worksheet, sh2 As Worksheet
 b sh1
 c sh2
 Stop
End Sub

Sub b(ByRef sh As Worksheet)
 Set sh = ThisWorkbook.Worksheets("Sheet1")
End Sub

Sub c(ByVal sh As Worksheet)
 Set sh = ThisWorkbook.Worksheets("Sheet1")
End Sub
0840デフォルトの名無しさん2014/05/01(木) 02:23:33.09ID:UMPLKQg9
>>839
変数「が」参照するのと変数「を」参照するのは別だから
0841デフォルトの名無しさん2014/05/01(木) 06:29:41.23ID:VQHKFgN+
ユーザ定義関数で他セルの値を計算に使って表示してるとき
他セルの値を変更してもすぐにはそのセルの値が反映されない問題は
どう解決しますか?
0842デフォルトの名無しさん2014/05/01(木) 06:47:21.36ID:9zM4+Fav
>>834
まったく知らずに言うけど、
ActiveCellは、ユーザがマウスでクリックしたなど、
今フォーカスを持っているセル

ThisCellは、フォーカスを持っていないが、
今書き込むなど、計算しているセル

だから、ユーザ定義関数は、単なる何かを計算する関数で、
Applicationオブジェクトとは関係がなく、
フォーカスイベントをもらえないのでは?

Application.ThisCellは、定数のように静的なプロパティで、
どの関数からでも、使えるメンバなのかも?
0843デフォルトの名無しさん2014/05/01(木) 15:43:23.17ID:C2Wy7tu3
なんでヘルプ見ないんだろ。
ThisCellと書いてF1キー雄だけなのに。
> Range オブジェクトとして呼び出されるユーザー定義関数が入っているセルを返します。
0844デフォルトの名無しさん2014/05/01(木) 21:05:28.24ID:8XTpF2p+
http://d.hatena.ne.jp/robbie21/20060821/1156193877
ここにある、複数のシートを結合するマクロを
xp+Office2000で使っていたのですが
win7+office2013に移行したところ、うまく動きません。
具体的には、ふたつ結合したところで終わってしまいます。
どこを直せばいいのでしょうか?
0845デフォルトの名無しさん2014/05/01(木) 21:28:28.93ID:UMPLKQg9
>>844
バージョンに依存する部分なんてなさそうだけどなあ
呼び出し方とか間違えてない?
0846デフォルトの名無しさん2014/05/02(金) 04:58:44.30ID:AXfyvegw
>>841
Application.Volatile
08478412014/05/02(金) 11:21:13.12ID:0Sm4zufH
>>846
おい、すごいじゃないか(笑)
今年一番感動した(爆)

それより知りたいんですが、こういう解法ってどうやって探し当てたんですか?
ふつうのVBA入門系の本には載ってないし
ヘルプでも、Application.Volatile→使用法の方向では調べられても、やりたい事→Application.Volatileの方向では、絶対に調べられないか困難だぞ。
0848デフォルトの名無しさん2014/05/02(金) 12:31:21.02ID:eSB12fTe
>>847
ggrks
>>832と同じ人?
0849デフォルトの名無しさん2014/05/02(金) 16:31:45.74ID:VTOLN4jY
>>845
xpから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したらそのシートでActiveCellになるはずのセルのアドレスを
そのシートをActivateせずに取り出す方法を以前発見したのですが
それはどういう方法ですか?
0852デフォルトの名無しさん2014/05/03(土) 08:19:26.49ID:ElKs5wH6
>>850
適当だしあんまり確認してないけどこんなのどうでしょう、バグったらごめんなさい
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:PkGldEjn
構造化してる変数が2つあるんですが
1つを他のもののコピーとしたいんですが
単に代入すると同一のものの参照となります。
そうじゃなくて構造体の全メンバの変数の値をコピーするにはどうするのが一般的ですか?
0854デフォルトの名無しさん2014/05/04(日) 08:03:57.92ID:PkGldEjn
Structure Student
Dim 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
VBAでIEを操作するとき
タブ(複数開いてる)でアクティブになっているページをgetするためには
どういうコードになりますか?
0856デフォルトの名無しさん2014/05/04(日) 08:41:36.79ID:v/jP7knV
>>853-855
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0857デフォルトの名無しさん2014/05/05(月) 02:49:54.32ID:GlFHWnLl
配列を関数にByvalで渡すことが出来ないのは何故ですか?
VariantにすればByvalで渡せますが要素数が多いと速度が激しく遅くなるのは何故ですか?
この2つ調べても分からなかったので教えてください
08588572014/05/05(月) 02:50:19.74ID:GlFHWnLl
エクセル2002です
0859デフォルトの名無しさん2014/05/05(月) 02:55:31.79ID:GlFHWnLl
配列をVariantに入れた変数は配列の先頭番地を格納してるので
Byvalで渡すとき要素数が大きくなっても速度が遅くならないと思うんですけど
0860デフォルトの名無しさん2014/05/05(月) 03:33:06.97ID:uFaF33P2
>>859
任意の型の配列を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:GlFHWnLl
>>860
Integer(配列)に変わっているという事は配列全体が丸ごとコピーされてる証拠になるわけですか?
じゃあ普通の配列が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+l
FSOについて質問ですが

Dim 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:zTX2z7nm
ON ERROR RESUME NEXT
0865デフォルトの名無しさん2014/05/05(月) 18:23:09.75ID:/BaOb3+l
>>864
ありがとうございます!これは便利ですね。独学でVBAを勉強中ですが知りませんでした。。
0866デフォルトの名無しさん2014/05/05(月) 18:25:54.17ID:hthjFo5y
便利なのは便利なんだろうけどさ、その危険性ってのも判った上で使えよ
0867デフォルトの名無しさん2014/05/05(月) 18:51:57.18ID:zTX2z7nm
SleepとDoEventsの違いは何ですか?

*ちなみにSleepはPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwmillsecounds As Long)と宣言してから使います
0868デフォルトの名無しさん2014/05/05(月) 19:02:52.67ID:eTvbwywS
逆に共通する事知りたいわ
0869デフォルトの名無しさん2014/05/05(月) 19:37:01.29ID:uFaF33P2
>>867
>>303
0870デフォルトの名無しさん2014/05/05(月) 19:38:31.76ID:zTX2z7nm
>>869
それオレじゃないか(ワラ
0871デフォルトの名無しさん2014/05/05(月) 20:03:01.60ID:rD1fSl2O
SubとFunctionが同じだとか言い続けてるバカもおまえだろ
文体と質問のアホさ加減が同じ
0872デフォルトの名無しさん2014/05/05(月) 20:05:33.73ID:uFaF33P2
Sleepはプログラムの実行を一時的に止める
DoEventsはメッセージループを処理する
0873デフォルトの名無しさん2014/05/05(月) 20:06:58.64ID:uFaF33P2
>>839あたりからも同じ匂いがする
0874デフォルトの名無しさん2014/05/05(月) 20:09:20.00ID:F7Zw8bMG
>>787 >>851 あたりも同じかな
0875デフォルトの名無しさん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:iASqhGK2
>>875
VBAからと言うのが
APIも含めるという広域を意味しているなら
出来ないこともない。
0877デフォルトの名無しさん2014/05/05(月) 21:05:07.90ID:zTX2z7nm
>>876
含めましょう。
ではどうやるのでしょうか?
0878デフォルトの名無しさん2014/05/05(月) 21:31:26.89ID:uFaF33P2
ウィンドウハンドルを取得した上でキーボードやマウス、その他のイベントを直接送ってやればほとんどなんでもできるけど、
さすがにVBAの比率が低くなりすぎてスレチ
API関係のスレにでも行け
0879デフォルトの名無しさん2014/05/06(火) 09:50:23.96ID:Avr/JzZk
Excel VBAでこんな機能のプロシージャってつくれますか?

[引数] Webサイトページの一番上のバーに表示されてる「タイトル」
[返り値] なし
[機能] 現在開いてるWebページを全部調べて、引数の「タイトル」のものがあればそれをアクティブにしてタブなら前面に出してそれをオブジェクト変数に代入する。なければなにもしない。
0880デフォルトの名無しさん2014/05/06(火) 14:55:03.32ID:jl3/KWxA
できますん

はい、次のかた〜
0881デフォルトの名無しさん2014/05/06(火) 16:34:49.64ID:EF/hc8MQ
>>879
APIで可能
VBAでやる必然性なし
0882デフォルトの名無しさん2014/05/06(火) 16:48:53.58ID:WIbNvSPM
>>881
必然性?
0883デフォルトの名無しさん2014/05/07(水) 01:13:46.53ID:XHO24LnT
シートのCustomPropertyをVBAで設定して
シートを右クリックなどして見れるようにするにはどうすれば良いですか。セルとかコメントに出力する以外の方法でお願いします。
0884デフォルトの名無しさん2014/05/07(水) 01:37:28.97ID:uh4oWvq+
>>883
http://officetanaka.net/excel/vba/tips/tips122.htm
0885デフォルトの名無しさん2014/05/07(水) 01:56:01.55ID:XHO24LnT
>>884
各シートにこういうプロパティ画面を表示するにはどうやるのですか?
0886デフォルトの名無しさん2014/05/07(水) 11:11:46.79ID:aD6Um6cx
みんな なんでも知ってるな・・・
0887デフォルトの名無しさん2014/05/07(水) 13:35:40.93ID:w4bXJfpE
References.AddFromFile()でVBScriptの正規表現ライブラリを参照した後、
RegExpやMatchCollection型の変数を定義するとユーザー定義型未定義の
コンパイルエラーが出てしまうのですがどうしたらよいですか?
0888デフォルトの名無しさん2014/05/07(水) 13:39:29.10ID:uh4oWvq+
>>887
エラーが出る最小限のソース晒して
08898872014/05/07(水) 14:33:27.95ID:w4bXJfpE
Dim RefFile As String

RefFile = "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+
>>889
それはVBAでは基本的に無理
万能の解決策じゃないけど「CreateObject」「実行時バインディング」あたりで調べてみ
08918872014/05/07(水) 15:20:21.05ID:w4bXJfpE
>>890
ありがとうございます。ちょっと調べてみます。
0892デフォルトの名無しさん2014/05/08(木) 16:21:39.25ID:DqNc14pR
>>887
VBAで正規表現を扱うためのやり方をググるとこの辺がヒットするんだけど
それではアカンの?

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:JZCmTzL0
参照設定で愚ぐれ
0897デフォルトの名無しさん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
>>897
どっちがいいかと言えば、自分にとってわかりやすい方

セルの読み書きは変数への代入より時間がかかるので、スピード重視なら変数に入れた方がいいと言われるけど
本気で計算スピードが欲しいならVBとかC#とか使うべきであって、結局は最初に書いたように、
プログラムを作りやすい方を選べばいいと思う
0900デフォルトの名無しさん2014/05/10(土) 01:01:36.00ID:0NkefTVZ
>>898
MergeCellsとMergeAreaでがんばれ
0901デフォルトの名無しさん2014/05/10(土) 11:38:30.40ID:Om1HfajV
>>898
X.MergeArea.Cells(1,1)
09028832014/05/11(日) 03:04:41.66ID:X2XaIOXl
シートのCustomPropertyはエクセル再起動すると値が変化してる事に気付きました。これは自分だけ?
0903デフォルトの名無しさん2014/05/11(日) 13:20:36.77ID:E4N7zZTW
Excel2007 2010のマルチプロセッサ対応はどのような処理がどのくらいスピードがアップするのでしょうか?
自宅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

諦めませう
09059032014/05/11(日) 13:40:22.25ID:4IeCHncM
>>904
残念、、、ありがとうございます。
処理中に画面下には8CPUというような表示が出ていましたがあれは書いてあるだけなのですねww
VBAはマルチスレッドに非対応だとマルチCPU対応のメリットは少なそうですね。
0906デフォルトの名無しさん2014/05/11(日) 15:37:14.98ID:qmCq3i4D
ごー
0907デフォルトの名無しさん2014/05/11(日) 17:07:08.06ID:valH51XC
ON ERROR GOTO NEXT使ってるとき
エラーの種類によって処理を分岐する方法があったと思うけど
そのときに使用するエラーコードの番号ってどうやって取得しますか?

○○のエラーがでたときはメッセージ出して強制終了、
□□のエラーがでたときは無視してNEXTにそのまま続ける、
△△のエラーがでたときはこういう処置をして続行する、

みたいにしたいんです。
0908デフォルトの名無しさん2014/05/11(日) 17:14:44.13ID:9n+Ded1d
Err.Numberのこと?

俺は
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
>>903
エクセルそのものはマルチコア対応だから、普通のワークシート関数とかは効果あるはず

そもそもCPUが原因で遅いのじゃなければ、CPU早くしても効果薄いぞ
100メガのエクセルとか、IOでだいぶ時間食う気がするけど
ハードに金かけるならSSDとか試してみる価値はある

VBAのコード見直せば早くなる可能性もあるけど
0910デフォルトの名無しさん2014/05/11(日) 17:39:07.78ID:valH51XC
>>908
ありがとうございます。
Errオブジェクトというのがあったのですか。
これは便利ですね。
0911デフォルトの名無しさん2014/05/11(日) 20:47:26.63ID:zdamCAAu
>>903
何をやってるのかわからんけど、画像とかなしで 100MB になってるなら、マジで DBMS の導入考えた方がいいかも
SQL-Server Express とかならとりあえず只だし
0912デフォルトの名無しさん2014/05/12(月) 15:19:33.35ID:l6E7y7n0
>>893
仕事で年に1回しか使わないマクロで、参照を設定し忘れて毎度何でエラーになるのか悩むもんでw
0913デフォルトの名無しさん2014/05/12(月) 15:46:22.10ID:r3XyQ/Bd
>>912
ソースの先頭か、最初に開くシートの見える場所にコメントを書いておく
俺がよく使う方法は、ファイル名にコメントを入れる

Book1 (参照設定を忘れないこと).xlsx

ファイル名を勝手に変更できない時は、同じフォルダに空のテキストファイルを作って、
そのファイル名をコメントにしておく

Book1.xlsx
Book1 (参照設定を忘れないこと).txt

こんなふうにしておくと、2つのファイルが隣に並ぶので、コメントが必ず目に入る
0914デフォルトの名無しさん2014/05/12(月) 16:22:06.75ID:Pq2vKY3y
>>912
参照先のパスが毎回変わるとか、特殊な事情があるのか?

なぜ参照設定した状態で保存しないの?
なぜ実行時にコードで動的にやる必要があるの?
0915デフォルトの名無しさん2014/05/12(月) 18:04:32.83ID:tYXPKjS8
Excel2010

フォームにあるボタンを一時的に機能を停止するのに
btnxx.Enabled = False
にすれば、ボタンがグレーアウトされて使えなくはなりますが、シートに貼り付けたボタン
に対して同じような事するにはどうするんでしょうか?
0916デフォルトの名無しさん2014/05/12(月) 21:17:50.64ID:Pq2vKY3y
>>915
Sheet1.Shapes("ボタン 1").ControlFormat.Enabled = False
Sheet1.CommandButton1.Enabled = False
とか
ただ、フォームコントロールのEnabled=Falseにしても、グレーアウトしないな
押せなくはなるけど
0917デフォルトの名無しさん2014/05/12(月) 21:53:45.43ID:tYXPKjS8
>>916
こちらの言い方がおかしかったか
http://www.dotup.org/uploda/www.dotup.org5057295.jpg
こういう状態の事です。

ま、それは良いんですが、、、
すいません、上の方でだと、動いてしまいます
下だと
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
で実行時エラー438になってしまいます。

当面動作予定は無いので、消しておきます
0918デフォルトの名無しさん2014/05/13(火) 03:16:42.81ID:fpyFYdoX
>>917
シートに貼るボタンは「フォーム コントロール」と「ActiveX コントロール」の2種類ある
で、グレーにして押せなくできるのは後者で、>>916の2番目も後者に対して使う方法
0919デフォルトの名無しさん2014/05/13(火) 11:11:36.24ID:3oieHFyI
>>918
了解しましたです。ありがとうございます。
0920デフォルトの名無しさん2014/05/13(火) 12:41:31.19ID:oNeP8dL2
>>914
毎年、客から支給されるデータをマクロで整形してDTPソフトに貼り込む作業なもんで。
0921デフォルトの名無しさん2014/05/13(火) 19:25:34.15ID:/l0lTNTz
>>920
参照設定はプログラムモジュールを指定するもの
データが変わろうが、参照設定は変わらんだろ
0922デフォルトの名無しさん2014/05/14(水) 00:44:43.93ID:4NYZ0gDe
>>921
確か参照設定はブックに依存するのではなく、
アプリケーション側に依存したはず。
つまり参照設定していない他のPC上にあるEXCELでそのブックを立ち上げても
ダメだったんじゃなかったかな。
違ってたらごめん。
0923デフォルトの名無しさん2014/05/14(水) 01:44:23.14ID:k2UyUu49
>>922
お前の環境では、あるブックに参照設定したらすべてのエクセルファイルでその参照設定が有効になってるのか?

つか、今のエクセル、未使用の参照設定勝手に外して保存しやがるな
それだけじゃなく、未使用のコードも勝手に消されてる
なんつう迷惑な事しやがるんだ
0924デフォルトの名無しさん2014/05/14(水) 19:48:14.68ID:9e1uL7m3
>未使用のコードも勝手に消されてる

オプションで清掃が有効になってない?
0925デフォルトの名無しさん2014/05/15(木) 11:36:12.81ID:xP8vZsnc
>>924
その 清掃 とかいうオプションはどこにある?
0926デフォルトの名無しさん2014/05/15(木) 20:30:44.53ID:Mes52j2B
馬鹿には無理
0927デフォルトの名無しさん2014/06/06(金) 17:56:50.11ID:xrGe04ue
Functionで返り値に動的配列とすることは可能ですか?
その場合どんなコードになりますか?
0928デフォルトの名無しさん2014/06/06(金) 18:58:23.21ID:nBXq1INX
>>927
Function 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
>>928
あれれ?おかしいですよ。
返り値はVariantなのにそのプロシージャ内ではInteger。
こんなこと許される?
0930デフォルトの名無しさん2014/06/06(金) 19:29:56.02ID:xrGe04ue
Dim ret() As Integer
ReDim ret(cnt)

をまとめて

Dim ret(cnt) As Integer

にしちゃ問題あるの?
0931デフォルトの名無しさん2014/06/06(金) 20:56:58.40ID:2p7Hju+q
>>930
そんなことできない
0932デフォルトの名無しさん2014/06/06(金) 20:59:12.41ID:xrGe04ue
>>931
それはなぜですか?
0933デフォルトの名無しさん2014/06/06(金) 21:07:05.43ID:fJT63IUR
何故と言われてもVBAのお作法みたいなもんだしな
0934デフォルトの名無しさん2014/06/06(金) 21:12:39.28ID:2p7Hju+q
>>932
VBAのルールで、Dimの中で配列のサイズに変数は使えない、と決まっているから
実際にやってみればエラーが出るからすぐ確認できる
レス数が900を超えています。1000を超えると表示できなくなるよ。