- 1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ]
- ExcelのVBAに関する質問スレです
前スレ pc11.2ch.net/test/read.cgi/tech/1212587819/ ★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 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
- 759 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:50:15 ]
- >>757
以前やってみようとした事があったけど見つからなかった 本当に出来るのかどうかも不明 >>758 お前頭悪そうだな
- 760 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:56:56 ]
- >>759
質問の仕方が悪いのに、慮って答えてやるだけが能じゃないよ
- 761 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:01:11 ]
- 質問スレで分かってて答えないのは只の無能だと思われてもしょうがない。
- 762 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:10:08 ]
- >>761
そう思いたい奴は思えばいいよ。回答者としてのスタンスは人それぞれだろ 質問スレでいちいち他の回答者をくさすのが有能とも思わないぞ
- 763 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:46:09 ]
- 喧嘩は他所でスレ立ててやれよ
目障り
- 764 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:18:48 ]
- 自己紹介乙
- 765 名前:デフォルトの名無しさん [2008/11/06(木) 21:53:02 ]
- >>763
おまえは引っ込んでろ! このカス。
- 766 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:10:27 ]
- 俺も >>757 の質問がよくわからないし
つか、前に質問したなら名前欄にレス番とか入れてくれ
- 767 名前:569 mailto:sage [2008/11/07(金) 06:17:38 ]
- フォルダの中を検索して特定のExcelファイル(○○.xls)を見つけたいのだが
フォルダを作る側が適当で(ここの部分は立場上どうしようもないです・・・) Aフォルダ Bフォルダ ○○.xls というパターンもあれば Aフォルダ/Cフォルダ/○○.xls Bフォルダ/○○.xls というパターンもあり、○○.xlsが無いことも2個あることも5個あることもある。ただ幸い○○.xlsの名前は固定です。 このフォルダ内から存在する全ての○○.xlsを開いて中身から数字を 取り出す機能を持ったVBAを作ろうとしています。 フォルダのパスはFOを使って配列に入れてそれを 全てのフォルダパターンを使って○○.xlsを探そうとしています。 そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか? 階層固定のフォルダ抽出、Excelファイルは問題ないのですが 階層実固定のフォルダ抽出で詰まっています。 例えば手抜きですが↓みたいな流れでうまく出来そうですかね? Private Sub AAA() 今のパスを配列に格納 if フォルダが有る時 then call AAA end if End AAA
- 768 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 06:18:18 ]
- すんません。上のやつ>>569さんじゃないです・・・。名前に入っちゃいました。
- 769 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 08:44:46 ]
- >>767
>そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか? 試した? 試してもいないのに質問しに来てない?
- 770 名前:751 [2008/11/07(金) 09:34:48 ]
- >>754
>>755 >>758 ありがとうございます.orz 754さんの方法でグーですね。
- 771 名前:751 [2008/11/07(金) 09:47:36 ]
- ついでにもう1つ教えてください。
xの値が「=AAA」とかだったりするとエラーになってしまうのですが、これを判別 するにはどうしたらよいのでしょうか? ? Application.WorksheetFunction.IsError(x) だとエラーにならないのですが...
- 772 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:00:12 ]
- どういうエラーでそのxが何か分からないと答えられない
セル(Range)なのか数値や文字なのか
- 773 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:09:03 ]
- >>767
「Excel VBA 再帰」でぐぐれば見本がゾロゾロ出てくるよ
- 774 名前:771 [2008/11/07(金) 10:50:19 ]
- 入力したテキストxでAutoFilterの設定・解除をしています。
(フィールドはアクティブセルの列) この時、xの書式をアクティブセルの書式への変換は >>751 さんに教えて頂き実現できましたが、テキストがエラーかどうかの判定に Set rng = ActiveCell: rng.Value = x if WorksheetFunction.Iserror(rng) とすると、アクティブセルの保存が必要になってしまう為もう少しましな 方法を模索中なのです。
- 775 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:54:09 ]
- >>769
ちょっと試せない状態だったのでとりあえず聞きました。 >>773 ありがとうございます。ぐぐり方が悪かったのかExcel VBA 再帰で入れたらちゃんと出てきました。 お騒がせしました。
- 776 名前:デフォルトの名無しさん [2008/11/07(金) 13:14:43 ]
- 初歩的な質問なんですが、
intの変数にアクティブセルのアドレスを代入していますが、一つ目の変数にしか代入できません。 二つ目の変数に別のアクティブセルを代入するとerror13が現れます。 どなたかご教授願えないでしょうか?
- 777 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 13:47:26 ]
- >>776
アクティブセルは1つしかないはずなのに「別のアクティブセル」って何?
- 778 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 15:38:15 ]
- >>776
Error 13は「型が一致しません。」だから 単純にint型に文字列(スペース含む)を代入しようとしてるとか? セルが空なら0が入るし
- 779 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:04:36 ]
- 膨大な量じゃないならコード貼ってどこでエラーがでたか書いてくれよ
- 780 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:10:46 ]
- >>774
x = "=AAA" の時に、Criteria1:="=" & x でオートフィルタかけてもエラー出ないよ? いつどこで出るエラーのことを言ってるんだ?具体的にコード貼ってくれないかな
- 781 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:27:19 ]
- 説明が下手な奴大杉
- 782 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 19:31:54 ]
- 説明もまともに出来ない不出来な頭だから、問題も自分で解決できずにここに質問に来るんだよ
もちろん、本当に難易度の高いことをやっていて、行き詰まって来る奴も居ないわけではないが 殆どが能無しどころか脳無し(調べる考えるという知能的行為そのものが出来ない奴)なんだから ここに居座る(質問者としてではなく)ならそのことは覚悟しなくちゃならない
- 783 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 19:45:31 ]
- >>782
よく分からない論理だな。
- 784 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:12:21 ]
- わからんではないが、そこまで言い放つことでもない
甘え放題も困るが委縮させ過ぎるのもよくない 意味不明な質問を差し戻したり、時々愚痴るぐらいで丁度いい
- 785 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:17:57 ]
- ヒマだからスレ読み返してたらわかったw
>>757=>>729だね。たぶん>>715も同じ人っぽい screenupdating = false をやっててもちらつくのは、おそらく on / off のタイミングが悪い たびたび on / off すると、on になった一瞬のスキも見逃さずに画面更新するからちらつく off にしたらしっぱなしになる位置でやらないと 範囲指定を解除(セルが select されていない状態に)する方法だけど、 高さ・幅 0のイメージを用意してそれを select すれば、 selection が range でない状態にすることはできる activecell の参照は直前のまま保持されるけど、シート上の囲み枠は出ない でもさ、解除ができても、指定/解除を繰り返せばどのみちチラチラするよ ちらつき防止なら、screenupdating のタイミングを確認するのがいいと思う
- 786 名前:デフォルトの名無しさん [2008/11/08(土) 17:49:36 ]
- >>785
ベリー、ベリー、サンクス お見込みのとおり、その3つは折れです。 展望が開けました。 サンクス。
- 787 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 08:43:30 ]
- Enumとして宣言さている列挙型のmember名をStringとして取得できますか?
- 788 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:32:30 ]
- 販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。
・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述 ・実行ボタンを押す ・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す
- 789 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:34:07 ]
- だれのための、どういう報告なの?
- 790 名前:788 mailto:sage [2008/11/09(日) 11:36:43 ]
- 販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。
・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述 ・実行ボタンを押す ・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す そんなマクロなんだけど、毎日販売管理ソフトから吐き出されたxlsファイルをBook1.xlsと同じ階層にコピーして、ファイル名を記述しないといけないのだけど、 xlsファイルをxlsファイルにドラッグアンドドロップとかでファイル名を取得して実行できるようにする方法ってありますかね?
- 791 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:53:23 ]
- >>787
スレ違い それはVBAではなくVB言語の質問だ >>790 あるけど、それはWindowsの設定の問題だ
- 792 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:30:57 ]
- windows弄ったら出来るのかー。
ほんと言うとVisualStudioでEXE形式にできたらいいんだけどね。 VisualStudioからEXCELのコントロールわからんしな;;
- 793 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 14:49:50 ]
- できないだろ
無理にやると普通に開けなくなるだろ バッチファイルかWSHにドロップして 引数を環境変数に設定して xlsファイルを開き 環境変数を見る
- 794 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 15:43:56 ]
- いつもそんなことやってるの?
- 795 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 19:34:55 ]
- >>790
普通にアドインを作れば解決するケースに思えるけど。
- 796 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:03:05 ]
- アドイン??
- 797 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:16:11 ]
- >>795
教えてくれ
- 798 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:31:57 ]
- 「Excel アドイン」でググってトップのところに詳しい説明があるから
それを読んだ方がいいよ。 VBAのコードが普通に書ける人ならすぐに理解できると思う。
- 799 名前:788 mailto:sage [2008/11/09(日) 21:34:13 ]
- >>795
>>798 まさにこれだ!!! ありがとう!!!
- 800 名前:655 mailto:sage [2008/11/10(月) 00:15:33 ]
- >>655
If Weekday(Date) = 7 And (Day(Date) + 7) \ 7 = 3 Then Range("A1").Value = "明日は第三週の日曜日" End If 正直な話、説明がさっぱり理解できてませんでしたが、がんばったらできました。
- 801 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 10:07:40 ]
- >>786
書いて良かった。誰?とか言ってゴメンなw >>790 処理対象ファイルが自動的に特定できれば一番ラクそうだけど、 人間が見ないと特定できないの? あるフォルダ内でタイムスタンプが今日付けの .xls とかでも無理? 正直、アドインにする利点がピンと来ない、、、
- 802 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:51:04 ]
- >>801
販売管理ソフトから出力する段階で一旦エクセルが開いてそのxlsを手動で名前をつけて保存するんだ。 たとえは今日なら20081110.xlsって手打ちで名前をつけてね。 それをこのマクロの入ったBook1.xlsから呼び出すんだ。 それを、アドインにしておけば、xlsを吐き出すことなく、読み込むcsvの名前をつけて保存すればよくなるだけだなと思ったら、これはいいアイディアだと思う。
- 803 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:55:12 ]
- >>802
>販売管理ソフトから出力する段階で一旦エクセルが開いてそのxlsを手動で名前をつけて保存するんだ。 保存する前の段階でBook1.xls開いてマクロ動かせばいいだけじゃね? 一々保存してからマクロ動かさないといけない理由でもあるのか?
- 804 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:58:20 ]
- >>802
なるほど理解した。けど単にツールバーにマクロ登録でいいような、、、
- 805 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:33:50 ]
- 今までが無駄過ぎただけだな。
- 806 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:03:48 ]
- >>803
保存しないとファイル名がないから別のブックからコントロール奪えないと思ってたorz
- 807 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:05:19 ]
- >>804
それがアドインかと思ってたorz orz
- 808 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:24:04 ]
- >>804
そのブックは「販売管理ソフト」が吐き出しすものだって言ってるじゃん。
- 809 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:26:46 ]
- >>808
ツールバーにマクロ登録すると その販売管理ソフトが吐き出したブックをExcelで開いたときにマクロを動かせます。
- 810 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:30:27 ]
- うーんだからマクロっていうのはだなあ.....ってところから説明しないとダメ?
- 811 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:40:33 ]
- マクロが記述してあるだけのブックを用意して
そのマクロをツールバーに登録するんだよ ネットワーク越しでも大丈夫だし
- 812 名前:デフォルトの名無しさん [2008/11/10(月) 23:38:11 ]
- 初心者なので、丸投げでお願いします。
application on timeを使って、 開始したら、 a時に処理1をやって、その20秒後に処理2をやって、その8秒後に処理3を やって、終わる。 というものです。 どうにも、最近、頭が回らなくなって困ってます (~.~)
- 813 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:48:19 ]
- はい次の話題
- 814 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:02:20 ]
- 812の追記
処理1は、マクロ1。処理2はマクロ2。処理3はマクロ3と いうことでお願いします。
- 815 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:31:29 ]
- A1に「08/11/11」と入力されているのをB1に「20081111」と変換させるマクロを作りたいと考えています。
Cで書くと下記みたいな流れになるかなと思うんですが・・・(間違ってるかもしれませんが) abc ="08/11/11"; sscanf(abc,"%d/%d/%d",&a,&,b,&c); printf("20%02d%02d%02d",a,b,c); VBAで書くにはどんな関数使えばいいのでしょう。
- 816 名前:812 mailto:sage [2008/11/11(火) 01:45:58 ]
- 自己解決できましたので、
>>812 814はスルーでよろっ。
- 817 名前:815 mailto:sage [2008/11/11(火) 02:02:40 ]
- 文字列操作でこうやってみた
tmpdate_y = CStr(Left(Sheet1.Range("A" & i).Value, 2)) tmpdate_m = CStr(Mid(Sheet1.Range("A" & i).Value, 4, 2)) tmpdate_d = CStr(Right(Sheet1.Range("A" & i).Value, 2)) tmpdate = "20" & tmpdate_y & tmpdate_m & tmpdate_d スマートじゃねえよなーorz
- 818 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:09:50 ]
- >>815
いったん日付型にしてから書式変換するとラクだと思う 文字列→日付型への変換は cdate() 日付型→書式付文字列変換は format() 詳しくはヘルプ読んでね
- 819 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:44:30 ]
- すいません質問です
エクセルのマクロで module1内にコード書くのと sheet1内にコード書くのとでは 動作にどんな違いがありますか? sheet1から他のシートを対象としたselectionメソッドが失敗するようなのですが・・・
- 820 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:50:39 ]
- 訂正)Selection→Select
- 821 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:51:01 ]
- >>445で解決しましたすいません
- 822 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:15:30 ]
- こんばんは
複数のセルの値を一度に比較することってできますか? Sheet1のA1:B5とSheet2のA1:B5のValueが 同じであるかどうか、が分かるだけでokなのですが。
- 823 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:20:52 ]
- 各シートは配列のようにアクセスできるが
- 824 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:57:12 ]
- >>822
配列数式でできるよ
- 825 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 05:52:03 ]
- Excel2003を使っています。
羅線の太さを調節する方法ってありますか? できるだけ細くしたいのです。
- 826 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:21:13 ]
- >>825
マクロの記録使って保存すればおk 単純に細くするだけの質問ならスレチ
- 827 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 12:48:05 ]
- Excel2000:WindowsXP/Pentium4(1.8GHz)/RAM512
セルA1とA2を結合したシートに対して 下記のコードの実行時間は 1回目:13秒 2回目以降:54秒 (Pasteに変更すると29秒) 1回目と2回目以降の違いの理由は何なのでしょうか? rows(1).select selection.copy selection.offset(1).resize(20000).select selection.insert shift:=xlDown selection.mergecells = false selection.delete shift:=xlUp range("A1").Select どうやったら速度アップできるか知りたいのですが...
- 828 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 12:52:09 ]
- 羅線ってなんだ?
らせん?
- 829 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:26:01 ]
- 螺旋
罫線 新羅 確かに間違える人は居るかも
- 830 名前:827 mailto:sage [2008/11/12(水) 14:59:51 ]
- やりたい事は
シート・アクティブ時にコピー挿入し編集 シート・ディアクティブ時に挿入データを削除(元の状態に戻す) なのです。
- 831 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:02:57 ]
- > 1回目:13秒
> 2回目以降:54秒 (Pasteに変更すると29秒) 単位、「秒」じゃなくて「_秒」の間違いだよね?
- 832 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:15:35 ]
- 秒です。
- 833 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:17:38 ]
- セルを結合していなければ1秒未満です。
- 834 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:20:33 ]
- いや、結合していても_秒でしょ
- 835 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:34:39 ]
- 結合云々は関係なく1秒かからんな
データは何かあるのか? とりあえず高速化のために Application.ScreenUpdating=False はやってるよな?
- 836 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:54:59 ]
- 新規ブックでセルをマージし、>>827のコードを走らせただけです。
ScreenUpdating, EnableEvent, Calculation等もやってみています。 マシン・スペック(5年前)の問題でしょうか?
- 837 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:15:36 ]
- スペックは漏れのマシンのほうが悪いくらいのはずw
計測方法の問題じゃないか?
- 838 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:54:32 ]
- すまん、Mobile Pentium4の間違いだったorz
- 839 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:23:09 ]
- Mobile Celeron(1200MHz)512MB RAM
Mobile云々は置いといてこっちは1.2GHzなんだよw OSが2kだからってここまで差は出ないよな? 体感でも1秒以上かかってるのか?
- 840 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:38:52 ]
- excel2003:WindowsXP/Pentium4(2.8GHz)/RAM512
でセルA1とB1を結合して走らせてみたら 1回目:9秒 2回目:40秒 体感で1秒未満は、セル結合無しの場合だけ
- 841 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:33 ]
- あぁA1とB1を結合かw
それなら確かに遅くなるな
- 842 名前:827 mailto:sage [2008/11/12(水) 18:00:26 ]
- >>827のA1とA2はA1とB1の結合に訂正願います orz
- 843 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 18:03:34 ]
- 俺の古典的環境だと1回目20秒、2回目1分40秒w
遅過ぎワロタw
- 844 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:23:38 ]
- >>830
どこまでが編集前でどこからが編集後? 編集は .mergecells = false の前?後?
- 845 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 09:30:46 ]
- *)シート(A1とB1結合)アクティブ時の処理
rows(1).select selection.copy selection.offset(1).resize(20000).select selection.insert shift:=xlDown 'コピー挿入した行に名前を付ける(後で削除の為) *)コピー挿入したデータへの編集 *)シートディアクティブ時の処理(アクティブ時点の状態に戻す) '実際にはSelectionでは無く名前で削除 selection.mergecells = false '<- これ無しだと遅くなる為 selection.delete shift:=xlUp range("A1").Select
- 846 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 09:40:02 ]
- メモリ1ギガとか積んでいる人だと1回目と2回目の差が無いなんて事ないですか?
- 847 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:31:54 ]
- >>845
了解 多数の結合セルを含む範囲で挿入/削除を続けてやると、後でやる方の処理が遅くなる感じ メモリ上のシート情報がややこしくなるのかな?1回目をやった後ブックを閉じて開き直すか、 シートコピーでリフレッシュすれば2回目が遅くならないけど、イベント拾うならキツイよね オレなりに試してみた限りでは、 挿入時: .insert を使わず、2行目以降にデータがあった場合は 20000行ずらした位置へ コピーし、狭間へ 1行目を 20000行分コピー 削除時: 最初にシートコピーでバックアップを取っておいて、.cells.copy でコピーし戻す ( .mergecells = false もいらない) ってなやり方が一番早かった。1回目は大差ないけど 2回目が 1回目より早くなる
- 848 名前:845 mailto:sage [2008/11/13(木) 13:26:06 ]
- >>847
有難うございます 挿入処理は、 insertを使わない方法(Paste)は、定義されている名前がある場合面倒そうです 削除処理は、 ご指摘のシートコピーを戻す方式を実際の処理に組み込んでテストしてみます
- 849 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:21:48 ]
- >>848
名前か。それは厄介だ 挿入に insert 使ってコピー書き戻すと名前付き範囲の内容書き変わるし insert だけでも 2回目は遅くなるし 後は、編集時にシートコピーしたシートを使っといて、deactivate されたら シートごと削除とかかなあ。イベントあるからいろいろめんどくなるんだよな、、、
- 850 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:26:26 ]
- シートのコピーから戻す方式を試したら更に時間が掛かる様になってしまった
- 851 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 18:16:20 ]
- >>850
データ量や数式、書式設定その他によってかなり違うだろうね オレのはあくまで>>827の条件で試しただけだし
- 852 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 21:52:40 ]
- >>847の処理における名前付き範囲は、挿入時に
range("namedarea").offset(20000).name = "namedarea" コピーバックの後に .offset(-20000) で、わりと簡単に対応できた 画期的なやり方は見つからんね。構成とか見直すしかないかも、、、
- 853 名前:851 mailto:sage [2008/11/14(金) 00:13:24 ]
- とりあえず、A2:Z3000 をテキトーな数式で埋めて試して見たけど、
やっぱ>>847のが早かった。calculation 切れば数式なしの時とあんま変わんない とにかく insert (特に 2回目)が遅いんで、insert とコピーバックの組み合わせでは 効果ないかも
- 854 名前:デフォルトの名無しさん [2008/11/14(金) 21:41:28 ]
- はじめまして、こんばんは。
今日はじめて本屋にて VBA の存在を知りました。 初心者質問ですみません、例えば、、、これができるようになるとなにができるようになるのですか? 詳しいかた教えてください。
- 855 名前:デフォルトの名無しさん [2008/11/14(金) 22:05:58 ]
- >>854
例えば野球データベース 選手名を入力すればその選手のプロでの全成績が一覧表示されるとか インベーダーゲーム作ってる人もいるよ とにかくExcelをVBAプログラムで自在に操れるって事
- 856 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:22:40 ]
- >>854
業務で言うと、データベースをexcelに展開して、 色んなチェックプログラムを掛けて品質保証したりとか。 ワークシートで使える関数を作って会社内に配布したり。 excel上に検索エンジン作ってる人もいるし、まぁ、何でもあり。
- 857 名前:無職カス [2008/11/16(日) 02:50:07 ]
- みなさん、こんばんは、 >>854 です。
>>855 >>856 さん 返答ありがとうございます。かなり使える機能ですね。 最近アルバイトをやめました。時間はたっぷりありますのでそこそこ使えるレベルまでもっていきます。 これからVBAを勉強していきます。 多々質問すると思いますが、みなさんよろしくおねがいします。
- 858 名前:デフォルトの名無しさん [2008/11/16(日) 03:45:10 ]
- 下に全員の成績表があって、
そこから各部門のトップ5を上の小さい表に抽出したいんだけど、 ランクとは違う気がするし行き詰っています。 どなたかご教授願えますでしょうか?
- 859 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 05:08:38 ]
- officexpのマクロと関数の処理順(と思われる事項)で知恵を貸していただきたく書き込みいたします。
セルAの値によってセルBの値が変わるよう関数を設定しているの状況で、 セルBの書式が自身の値によって変わるようにマクロを組もうとしています。 (書式は4種類以上なので条件付き書式は使えません) worksheet_changeで書式変更を自動実行するようにしたのですが、 マクロを実行してみるとAの値を変えてもBの書式が変わりません(Bの値は通常通り変わります) その状況で、まったく関係ないセルCの値を変更するとBの書式が変わったので、 マクロ自体には問題はないようです。 おそらく、A変更→マクロ自動実行→関数でBの値変更、という内部処理があるために マクロによる変化が見られない状況であると思っています。 (違っているなら根本から考え直さないといけないかもしれませんが) このような構成の場合、関数による値の変更が反映された後で 書式変更などのマクロが実行されるようにすることはできないのでしょうか? ご教示お願い申し上げます。
- 860 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:11:55 ]
- Calculate
- 861 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:51:08 ]
- >>860
ご回答ありがとうございます。 5分前にcalculate使えばいいと気づいて、自己解決した旨書きにきたら 既にお答えくださっていたのですね。 初歩的な事でお手を煩わせてしまい、申し訳ございませんでした。
- 862 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:13:30 ]
- >>857
基礎を勉強するには独学でも全然問題ないけど、 プログラム未経験で、かつ仕事に就いてないとなると、 プログラムの基本的な事を理解するまでに半年か1年かはかかると思う。 んで、そこから先は明確な目標が無いと無理。 やれる事が多いんだけど、ぶっちゃけた話、特化したプログラムには敵わない。 例えば>>855でゲームの話が出てたけど、確かに作る事は出来る。 けど、VBAからAPI呼び出してるに過ぎないし、更に言えば タイムラインって概念がある&ドローツールのFlashなんかには到底及ばない。 ExcelVBAはあくまでExcelの処理系統のプログラムだと俺は考えてる。 Excel上での処理に関してはVBAがぶっちぎり。当然だけどね。 何か目標持った方が良いよ。
- 863 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:15:00 ]
- >>859
calculate使う理由が分からん・・・。 VBAで処理してるなら、VBAでBの値も弾き出せば良いんじゃないか?
- 864 名前:独り言(ちら裏) mailto:sage [2008/11/17(月) 01:24:05 ]
- というか、条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に
問題ありかと... それがExcelのポリシーというのであれば、そういうアプリめいたものを Excelで作ることが間違いだったということになるか...
- 865 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 10:16:53 ]
- > 条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に
> 問題ありかと... という意見が多いので、2007で設定数が 3 から 無制限 に、 優先順位も設定を書き直さずに変更できるようになった。
- 866 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 14:02:59 ]
- ということで、Excel2007以降の購入をお勧め
- 867 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:07:26 ]
- てゆーか、条件によって変化するセルの書式の種類は3つに留めておく
というのが無難かと
- 868 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:50:10 ]
- >>864
selection changeイベントで好きなだけ設定しろ。 おまいのVBAは飾りもんか?
- 869 名前:デフォルトの名無しさん [2008/11/18(火) 17:07:45 ]
- これのFSO(FileSystemObject)使ってテキストデータの読み込みすると文字化けします。
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110.html strRECをUTF-8→SJISにエンコードするには、どう記述したらいいですか?
|

|