1 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 19:31:39 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1197448064/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
792 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:44:05 ] VBAでゲーム作る奴は変態
793 名前:781 mailto:sage [2008/05/14(水) 23:45:46 ] なるほど、自分がやるべきことがわかってきました。 親切に答えてくれた方々、ほんとうにありがとうございました。
794 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:48:05 ] >>792 しかしVBAの正しい利用方法だ。
795 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 07:44:28 ] >>789 お前、馬鹿
796 名前:デフォルトの名無しさん [2008/05/15(木) 07:55:47 ] >>788 年上のお姉さんに当てられたり、美少女の後輩にまさぐられたりする職場なんですね、俺と変わってくれ
797 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 08:00:39 ] データベース/SQL使うんなら、 ExcelVBAより先にAccessのクエリー/マクロ/レポートを覚えた方が金になるぞ
798 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 08:15:17 ] このスレではVBAでソートを作る方法を質問するといいよ。
799 名前:デフォルトの名無しさん [2008/05/15(木) 09:46:13 ] Vista、EXCEL2007です。 EXCEL2003(XP)で作成したマクロを動かすと動作が異なっています。 <コード> Range("A5").Select ActiveSheet.Pictures.Insert( _ "D:\abc\pic1.JPG").Select Range("A21").Select ActiveSheet.Pictures.Insert( _ "D:\abc\pic2.jpg").Select <現象> (1)Vistaでは、pic2の画像が、A21の個所でなく、A5の個所に挿入されます (pic1の上に重なって) (2)Vistaで、セルを選択して、画像挿入する操作をマクロ記録すると Range("A21").Selectは記録されてますが、 ActiveSheet.Pictures.Insert("D:\abc\pic2.jpg").Selectが 記録されていません。 上記プログラムで、pic2をA21の箇所に挿入できるようにするには どうすれば良いのでしょうか。 よろしくお願いします。
800 名前:番組の途中ですが名無しです mailto:sage [2008/05/15(木) 14:03:07 ] Excel2003のVBAでcontinue forが使えないのは仕様ですか?
801 名前:デフォルトの名無しさん [2008/05/15(木) 16:56:49 ] >>799 スクロールの問題……じゃないよな
802 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:32:49 ] Excel2000 シート上に ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1") で生成したチェックボックスのみを削除するプログラムを 実行すると アプリケーション定義またはオブジェクトの定義エラーです というメッセージが出ます。 s.FormControlType のところで エラーが出ているのですが、どうやったら動くようになるのでしょうか? Dim s As Shape For Each s In Sheets("sheet1").Shapes If s.Type = msoOLEControlObject Then If s.FormControlType = xlCheckBox Then s.Delete End If End If Next
803 名前:799 [2008/05/16(金) 17:00:43 ] >>801 レスありがとうございます。 スクロールの問題ではありません。 (1)の現象になったので、 マクロと同じ操作をして、マクロ記録してみたら (2)になりました。
804 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 18:30:33 ] >799 WorkSheet.Shapes.AddPicture(...) かな? 試してないけど ActiveSheet.Pictures.Insert( "D:\abc\pic1.JPG").Top = Range("A5").Top ActiveSheet.Pictures.Insert( "D:\abc\pic2.jpg").Top = Range("A21").Top
805 名前:799 [2008/05/16(金) 20:29:24 ] >>804 レスありがとうございます。 うまくいきました。
806 名前:デフォルトの名無しさん [2008/05/16(金) 20:37:24 ] 30125なら上位3桁だけとって、゙30100゙から100刻みで表示させたい。 0.002354なら゙0.00235゙から0.00001刻みでグラフの軸に表示したいのです。 何かよい方法はありませんでしょうか?
807 名前:799 [2008/05/16(金) 20:47:07 ] >>804 別質問ですけど、 804で挿入したオブジェクトのnameは、 どのようにすれば取得できるのでしょうか。
808 名前:デフォルトの名無しさん [2008/05/16(金) 23:37:41 ] 仕事でマクロを使って制御のシミュレーションをしたいのですが 1つのプロシージャ内でループ演算をしつつ、他のプロシージャを実行して 変数を変更したいと考えています。 複数のプロシージャを並列処理できる方法はないのでしょうか?
809 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 00:12:29 ] ActiveX EXEを作れば可能。 Win32APIのスレッドも使えるかもねー
810 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:15:28 ] 既出だったらすみません。 excel2000+winXpで開発してるんですが、 処理を走らせるとメモリの使用率がたまる一方で 解放されている気配を感じません。 しまいにはメモリが足りませんとエラーになり 落ちてしまいます。 助けて!!1 DAO3.6使ってるんですが関係しますかね? メモリを解放する方法ってありますか??
811 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 06:59:32 ] >>810 DoEvent とか 動的配列を使ってるなら必ずeraseするとか
812 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 08:39:43 ] >806 刻み幅等を計算する方法を知りたいというのが主旨かな? 30125の常用対数は、log(30125)/log(10) =4.47892705558292 切り上げて、5 上位3ケタだけ取るので、刻み幅は、10^(5-3)=100 切り上げは、round(x-0.5)+1 という感じかな。
813 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 10:29:50 ] >807 古い環境が無いんで試せてないけど Dim Pic1 As Picture Dim Pic2 As Picutre Set Pic1 = ActiveSheet.Pictures.Insert( "D:\abc\pic1.JPG") Pic1.Top = Range("A5").Top Range("A4").Value = Pic1.Name Set Pic2 = ActiveSheet.Pictures.Insert( "D:\abc\pic2.jpg") Pic2.Top = Range("A21").Top Range("A20").Value = Pic2.Name
814 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 14:03:34 ] >>808 複数のExcelインスタンスを起こして、マルチプロセスでやれば? これならWin32APIなんか使わずにできるが
815 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 19:17:01 ] timer使え
816 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 14:10:29 ] ループの中でたのプロシージャを呼び出せばいい 灰次
817 名前:デフォルトの名無しさん [2008/05/18(日) 23:31:42 ] マクロでNORMDISTを使いたいんですが、エラーが出てしまいます。 マクロではどのように記述すればNORMDISTは使えるのでしょうか? 誰か教えてください
818 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 11:05:13 ] Excel2000上で動的に配置したチェックボックスにイベント処理を追加したいのですが 方法がわかりません。ヒントだけでもいいのでお願いします。
819 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:39:14 ] >>818 classモジュール使えばできるよ
820 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:46:45 ] >>817 ヘルプの例で言えば、 42 対象となる値 40 分布の算術平均(相加平均) 1.5 分布の標準偏差 WorksheetFunction.NormDist(42, 40, 1.5, True) で、いいんじゃない?
821 名前:デフォルトの名無しさん [2008/05/19(月) 20:24:01 ] 実行時エラー'1004'が出ます。 コマンドボタンで、 Workbook Open "C:\-.xls" Worksheets("a").Select Range("A20").Select と入力し別ファイルのシートのセルを選択したいのですが、 どのように直せばいいか、教えていただきたいです。 よろしくお願いします。
822 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:26:10 ] >>821 ちゃんと目的のbookが開いているなら、シート名「a」のシートがあれば問題ないよ
823 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:55:45 ] >>821-822 シート上に置いたコントロールツールボックスのコマンドボタンならそんなんでまともに動くわけねーよ。 シートや範囲をちゃんとブックから明示しないと。
824 名前:822 mailto:sage [2008/05/19(月) 22:04:21 ] >>823 なるほど、 シート上に置いたコントロールツールボックスのコマンドボタン おまい天才! スレ汚しスマソ
825 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:21:39 ] >>823 のなかなかのエスパーぶりに嫉妬
826 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:28:05 ] 別に>>823 は普通だろ? Formのコマンドボタンなら>>821 でも動くだろうが、どこに書いても同じように動くコードを書かんとね。
827 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:30:47 ] >>826 どこに書いても同じように動くコードを書く必要はない コードを書いたクラスでまともに動けば問題ない
828 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 00:21:17 ] 質問させて頂きます。 デジタル署名付のVBAプロジェクトで、 ブックオープン時にオラクル接続をし、 オートシェイプで線を引くという処理をしております。 処理後、シートを見るとオートシェイプで描いた線の色がありませんでした。 プリンタで出力すると、線が描かれております。 原因と対処法を教えてください 【OS】windows XP pro 【EXCEL】2003 【処理内容】 Dim OraSession As Object Dim OraDatabase As Object Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) Set OraSession = Nothing Set OraDatabase = Nothing ActiveSheet.Shapes.AddLine(98.25, 151.5, 150#, 159.75).Select といったかんじです
829 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:40:10 ] >>828 オラクル関係なくね? 接続して閉じてるだけだろ? それとも、オラクルに繋がなければ問題は解消されるの?
830 名前:826 mailto:sage [2008/05/21(水) 07:43:54 ] >>827 そりゃ確かにそうだね。 冗長な記述を避けるためにもMeとか書かんからね。 >>821 のコードに関してはということ。
831 名前:826 mailto:sage [2008/05/21(水) 07:46:16 ] Me.を書かんことはちょっと違うか。 まどうでもよい。
832 名前:デフォルトの名無しさん [2008/05/21(水) 07:59:09 ] 書式設定指定したら?
833 名前:デフォルトの名無しさん [2008/05/21(水) 17:42:10 ] XP、EXCEL2003です。 特定のディレクトリの直下にあるファイル(複数)のファイル名を 全て取得する方法を教えて下さい。 よろしくお願いします。
834 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:49:26 ] >>833 ちょこちょこ質問掲示板見てると週に1回は遭遇する質問 ググれば腐るほどコードがある 個人的にはfilesystemobjectを使うのが一番効率いいと思う
835 名前:833 [2008/05/21(水) 19:20:12 ] >>834 レスありがとうございます。 失礼いたしました。
836 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:22:28 ] fsoはネットワークドライブ相手だったりするとテキメンに 速度が落ちたりするから困る。 あと、ワイルドカードが無いのはどーゆーことだ。
837 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:21:02 ] >>836 独り言はチラシの裏に書け
838 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 06:44:14 ] 確かfsoは、クエリとってからのファイル追加や削除、内容変更に 伴う更新もかなりの直近まで自動的に更新してくれる中々の 優れモンだったという記憶が.... Kernel32.DLL のAPIを使って自分でクエリした場合は、 ファイル数が多く、激しく更新されるような場合は、取得情報と 実態の間に食い違いが発生してユーザーはパニくるのがオチなんだが (これもチラ裏に書くべきだったか)
839 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:21:06 ] わざわざfsoやapi使わんでもDir()関数使えばよい
840 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:25:32 ] Dirだとパスの長さが255以上になると確かエラーになる。
841 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:23:12 ] sage
842 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:07:41 ] OS:win xp excel:2007 初めて質問します。お願いします。 ・データ用のシート ・処理用シート の二つを用意します。 データ用シート 店舗→ A B C 商品↓ りんご 100 200 300 みかん 10 20 30 めろん 1 2 3 処理用シートのA1,B1のセルに店舗と商品を書き込むと、データ用のシートを参照して、 そのシートに書かれた数値(例えば、上記の表の「A店(=A1)」の「みかん=B1」だと「100」)が、 処理用シートのC1(「=100」が)に入るようにしたいです。 店舗、商品は任意で追加していきたいので、データ用シートの列、行を検索していくようなやり方がいいのでは、 と考えています。 調べて、VLOOKUP関数を使えば…、というところまで来たのですが、二点のセルの値を見て、 表から一つの値を出力する、というところがわかりません。 何卒、ご指導の方、お願いします。
843 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:01:34 ] >>842 VBAに関係ないと思うのだが。 vlookup以外にもlookupやmatchもあるんだから何とかなるだろそれくらい。
844 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:16:49 ] なんとかするのがお前たちの仕事だろ。 あのな、上から目線もいいけどここはVBAに詳しくない奴らが 何をどうやったらいいかを聞きにきてるスレなわけ。 その手ほどきをしてやった上でそういうこと言うならいいけど、 回答も示さずにそういうこと言うのは荒らしとかわんねーんだよ。 こたえる気が無いなら質問スレから消えろよカスが。 ↓じゃ、模範的回答を頼む
845 名前:釣られてみる mailto:sage [2008/05/24(土) 00:26:30 ] いや、それだけの情報でVBAでどうしろと。
846 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 03:07:26 ] スレタイ読め。ここは質問スレであって回答スレではない。
847 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 03:09:22 ] >>846 こいつ頭悪そうだな(ゲラゲラ
848 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:33:50 ] >>842 いろんなやり方があると思うけど、私がスマートだと思うのを提案します。 データ用シートをこんなふうにする。 ID 店舗 商品 値段 Aりんご A りんご 100 Aみかん A みかん 10 Aめろん A めろん 1 Bりんご B りんご 200 Bみかん B みかん 20 Bめろん B めろん 2 Cりんご C りんご 300 Cみかん C みかん 30 Cめろん C めろん 3 IDの列は数式で作る。Aりんごのところに =B2&C2 としてオートフィルで。
849 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:53:02 ] つづき 処理用シートで C1には =A1&B1 D1には データ用シートはSheet1にあるなら =VLOOKUP(C1,Sheet1!A:D,4,FALSE) としてできあがり。
850 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 08:12:05 ] >>842 C1に =index(「データの範囲」,match(B1,「商品名の範囲」),match(A1,「店舗名の範囲」)) と入れる これVBAじゃないから、次からはEXCEL総合相談スレの方へ行ってくれ
851 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:55:08 ] VBA初心者ですが質問させて下さい。 Module1で宣言したパブリック変数をThisWorkbookで参照する事はできないのでしょうか。 状況を説明しますと、nullpo.xlsというマスターファイルがあります。 その中のModule1で処理を実行すると、public変数をインクリメントします。 "名前を付けて保存時"の保存ダイアログで、あらかじめ表示されるファイル名に そのpublic変数を出したいのですがうまくいきませんでした…
852 名前:851 [2008/05/24(土) 13:22:46 ] クスン…終わらないと帰れないんです みなさんの力を貸して下さい。 言い忘れましたがわたしは女です。
853 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 13:26:25 ] >852 俺が何でも答えますよ もうちょっとしたら家に着くから待っててね ところで今日は帰ったらどうするの? 汗かいちゃったってシャワーでも浴びるのかな?かな?
854 名前:851 [2008/05/24(土) 13:34:41 ] >>853 ありがとうございます。 彼氏と待ち合わせしてるんです。
855 名前:デフォルトの名無しさん [2008/05/24(土) 13:39:32 ] VBAを自由自在に扱うために、VBの勉強をしようかと思うのですが VBの種類が多すぎてどれを勉強したらいいのかわかりませんでした。 VBAのためにVBを勉強するには、どのVBを勉強すればいいのでしょうか?
856 名前:853 mailto:sage [2008/05/24(土) 13:41:43 ] 死ね。お前に教えることは何もない 自分でどうにかするんだな
857 名前:853 mailto:sage [2008/05/24(土) 13:42:33 ] 856は>854宛てな
858 名前:851 [2008/05/24(土) 13:59:41 ] そんな… 他スレで質問することにします。 すみませんでした。
859 名前:側近中の側近 ◆0351148456 [2008/05/24(土) 15:22:18 ] >>853 (っ´▽`)っ 独身の女の子には優しいのね。最低☆
860 名前:側近中の側近 ◆0351148456 [2008/05/24(土) 15:23:00 ] >>855 (っ´▽`)っ VBAならVB6.0だね。
861 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:25:38 ] >>856 手のひら返しワロス
862 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:29:18 ] >>851 そのpublic変数値を返す、public関数でも作れば? つか、ダイアログに値をいれて有効にする処理が出来てないだけの気がするが…
863 名前:855 [2008/05/24(土) 15:29:35 ] >>860 ありがとうございます。
864 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:39:20 ] >>860 VB6.0やVB.NETをVBAを使えない人に勧めちゃらめどちらも超ベテラン向けだよ VBScript位しか残らないけど、VBAとはちょっと合わないかも知れないね。 やっぱしVBAはVBAで覚えるしかないのかな(鬱
865 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 16:18:52 ] VBAを覚えたいのにVBAを利用しない意味がわからない
866 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:16:49 ] >>842 商品と店舗の組み合わせが疎であるなら>>848 の方法 組み合わせが密であるなら>>850 の方法がいいだろうね。 ところで解決したのかどうか反応がほしいもんだね。 コミュニケーションしようや。
867 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:25:26 ] >>865 これほんとにその通り。 なんでVBAを覚えるためにVBを覚えたいなんて言うのかな。 VBを覚えたいんだって素直に言えばいいのに。
868 名前:デフォルトの名無しさん [2008/05/24(土) 21:29:23 ] VBってMSDNライブラリ使えるの?
869 名前:デフォルトの名無しさん [2008/05/24(土) 21:38:17 ] VBAを体系的に勉強するのにいい本とかありますか?
870 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:46:29 ] 実戦力UP! Excel VBAドリル式問題集
871 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:47:13 ] VBAとはマクロの記録で泥縄式に覚えていくもんだ
872 名前:デフォルトの名無しさん [2008/05/24(土) 22:46:45 ] エクセル2003で上の行から数字が入ったセルだけをm個 選んで加えるVBAをうちたいんですが、上手くいきません。 for a = 1 to 100 m = cells(3 , 3) b = cells(1 + k + a , 1 ) k = 1 s=1 do while s =< m if b <>"#na n/a" then b = b + cells(1 + k + a + s , 1) k = k + 1 s = s + 1 else k = k + 1 loop next いまこんな感じで打ってるのですが、 if b <>"#na n/a" then のところで止まってしまいます。 どこがおかしいのでしょうか? また、もっといい方法はありますか?
873 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:21:29 ] >>872 「数字が入ってるセル」なら条件をb≧0にすれば?
874 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:33:33 ] 負の数は数字ではないと?
875 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:38:47 ] kとsを+1しているがループするたびに初期値が1に戻るぞw あと、b = cells(1 + k + a , 1 )の部分、1回目の処理でkの値が判らない。
876 名前:デフォルトの名無しさん [2008/05/24(土) 23:39:42 ] application.run "abc" msgbox "zzz" abcマクロの完了の後に、ダイヤログボックスにzzzを表示したいのに、 即行でzzzが表示されてしまう。 同期をするようにするには引数か何かを入れるのでしょうか?
877 名前:デフォルトの名無しさん [2008/05/24(土) 23:40:54 ] >>873 なるほど。そういう方法がありましたか。 ありがとうございます。 >>874 負の数は存在しないデータなので、大丈夫だと思います。 エラーがでた原因がわかる方はいらっしゃりましたら、お答えいただきたいです。
878 名前:875 mailto:sage [2008/05/24(土) 23:42:23 ] ごめん入れ子になってたんだな。最初のforしか見てなかった。
879 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:43:21 ] end ifが無いな
880 名前:872 [2008/05/24(土) 23:43:44 ] >>875 すいません初心者なもので、いまいち意味不明です。 勉強して理解したいとおもうのですが、参考までにどういった 勉強をすればいいか教えてください。 オススメの本、サイト等等・・・
881 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:46:56 ] >>877 <>"#na n/a" エラー値でなければ って条件と思っているのであれば間違い。 エラー値かどうかを調べたいのならiserrorを使う
882 名前:872 [2008/05/24(土) 23:47:24 ] for a = 1 to 100 m = cells(3 , 3) b = cells(1 + k + a , 1 ) k = 1 s=1 do while s =< m if b > 0 then b = b + cells(1 + k + a + s , 1) k = k + 1 s = s + 1 else k = k + 1 end if loop next これで大丈夫でしょうか?
883 名前:デフォルトの名無しさん [2008/05/24(土) 23:48:51 ] >>881 そういうことでしたか。 iserrorという存在を知りませんでした。 勉強不足でした。 ありがとうございます。
884 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:53:46 ] > if b <>"#na n/a" then これエラーなんか出ないよ 意図したとおりには動かないかもしれないけど
885 名前:デフォルトの名無しさん [2008/05/24(土) 23:57:29 ] 根本的な間違いがあった for a = 1 to 100 m = cells(3 , 3) b = cells(1 + k + a , 1 ) k = 1 s=1 do while s =< m if cells(1+k+a+s-1 > 0 then b = b + cells(1 + k + a + s , 1) k = k + 1 s = s + 1 else k = k + 1 end if loop next すいませんでした。
886 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:18:54 ] まあなんだ ちょっと落ち着け
887 名前:デフォルトの名無しさん [2008/05/25(日) 12:04:28 ] シートコピーで悩み事があるので打開策を見つけられたらと思い書きこまさせていただきました。 どなたかお助けいただけたらうれしいです。 VBAにてシートコピーに要する時間が長くて(10分以上)悩んでおります。 Bookの構成といたしまして標準モジュールに数式文字列を評価するものを かいてあります。 Function Eval(ByVal expr As String) Eval = Evaluate(expr) End Function ・Sheet1には、様々な経理データを入れるようにしてあります。 そこに入れた値などを元にセル名を作るように書いてあります。 例)A1に”1”という値でB1に”2”という値が入っていればA2のセル名を”12” とします。 ・Sheet2には予めセルに=eval(12)の様な数式をいれ評価をしております。 これが1枚のシートに2000くらい数式が入っています。 Sheet1、2ともに特定条件のとき複製を何枚か作ります。 このときすごく時間がかかります。 原因は数式が大量にあるものをコピーすること及びセルに名前をふっているのが原因なのは分かりますが コピー以外の動作が非常に快調なので変えたくないということとたぶんeval以外での解決策を模索するのはかなり時間を要しそうなのでコピーを何とかする方を選びたいです。 もちろん再計算の停止などはしてあります。 事前に特定条件を作りだしシートを非表示にしておき特定条件のときに表示させるのも 一つの手ではありますが何百枚もシートを隠しておくとファイルサイズがばかでかくなるという 難点もあって躊躇しています。 例えば=eval(@@@@@@)を多く入れたのが原因であれば標準モジュールを何らかの形でいったん無効にすれば早くなるのかとかスクリプトなどを使って別のブックからシートを移動させるなど・・・・他の代替案はありえないでしょうか? 何分わかりづらい質問で申し訳ありませんが、ご回答いただければ幸いです。 よろしくお願いします。
888 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 12:11:58 ] まず計測しろよ。んで、遅い原因を特定してから、もっとわかりやすい文章で再質問な。
889 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 12:58:21 ] 自動計算やめてシートコピー
890 名前:876 mailto:sage [2008/05/25(日) 13:03:06 ] >>887 質問する方のレベルのものが下手なレスをつけるのもどうかと思うが、 設問説明に既に回答があるような・・・ 経理処理なのでシート数が大量となるのはある程度やむを得ないでしょうが、 それにしても、10分というのはかかりすぎというか、長いですね。 1 object.enablecalculation=falseを設定されていると言うことですが、 必要なシート全てにされているかどうか 2 通常、速度を速める常套手段の application.screenupdating=false application.visible=false application.enableevents=false で、どうなるか試してみたらいかがでしょう 私の質問は解決しました。 直列処理のはずが、並行処理になったのかとの疑問からでしたので。
891 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:55:25 ] >>887 どこかで見たような質問だな 何でそんなおかしなことするの?
892 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:59:47 ] >>887 に回答する人は次を見てからにしてね www.moug.net/faq/viewtopic.php?t=27321