[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 10/24 21:30 / Filesize : 261 KB / Number-of Response : 870
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part8



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)

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にエンコードするには、どう記述したらいいですか?







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<261KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef