- ベストアンサー
Excel VBAのプロシージャについて
- Excel VBAのプロシージャについての質問です。VBAの記述方法について詳しい方からのご教授をお願いします。
- Excel VBAを使用して、指定した日付とランダムな数字を検索して、該当する氏名を表示するプログラムを作成しています。他の記述方法についても教えてください。
- Excel VBAのプロシージャにおいて、指定した日付とランダムな数字を検索する方法について詳しく教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一例です。 慣れていませんがずぼらなコードです。 Set pos = Columns(Cells(1, "AH") + 1).Find(Cells(1, "AI")) If pos Is Nothing Then MsgBox "not found": Exit Sub MsgBox Cells(pos.Row, "A")
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
こういう、どう考えて処理するかのは、わたしは「ロジック」といっている。色々やり方がある場合が多い。そのロジックが、良いとするのは、コード行数が少なく、エラーが起こりにくいもの(自作したものはこの点不安有り)、変更への対応性がよいなどでしょう。 本件ですが、 (1)3日の文字を第1行目で、検索して、4列目が割り出せる。これも3+1とする人も居てもおかしくない。休日の日付がない場合はこれは使えない。 (2)第3列で25の行を捜せば、第3行が見つかる (3)(2)の行の第1列目のデータを持ってくればしまい。 このやり方だと、わたしなら、(1)(2)でFindメソッドを使う。見つからない場合のとらえ方や、第2番目のものを見つけるFindNextが難しいと思うので、初心者には勧めない。 ーー (1)(2)とも、最終行や最右列までFor Nextで繰り回し、該当のセルを見つけるのが、初心者には、一番思いつきやすく、やりやすいと思う。 ーー エクセルの機能のフィルター利用を考えた、というのも在り得るでしょう。 ーー 毎度質問するわけにも行かず(本当は先輩がそばに居ないと始は進歩しないと思う)、自分で本を読んだり、WEB照会したり、質問回答を見たりして、経験を積むしかない。こんなところへこの質問をしても、他の場合では、また別のことを考えないといけないので、効果は少ない。 ーー だだし、代表的なアルゴリズムというのはある。いつもそれで解決できるようなものではないが、商売でVBAやプログラムをしてたり、よく趣味でプログラムしてたりすれば、役立つ場面があると期待できる。 VBAぐらいなら、ここで質問が出るレベルのことなら、ほぼいつも使える考え方、方法はある。 専業を対称にする場合が多いので上の、行から全行繰り返しのロジックは有効。 ー 初心者のうちは、処理スピードなどは、2の次にして良いでしょう。色んな作業の中で実行時間など知れているから。 しかし行数が百万位もなってくると、処理考えざるを得ないけれど。 経験を積むと別のロジックでやろうとしたり、思いついたりする。 自分の組んだコードがイヤで、何日も寝てもさめても(ややオバーだが)、良いのが無いか、考えたときも在る。 今も引っかかっている(小)テーマは在る。 好きで経験を増やすしかないですよ。
- MARU4812
- ベストアンサー率43% (196/452)
VB6.0 の時代から VB(VBA) をやってます。 Excel はアプリケーションとして多機能な為、たくさんメモリを食い、 そのオブジェクトを操作するコストが高い(=重い)です。 ですから、私がプログラムするときに考えるのは、Excel のオブジェクト にアクセスする回数を極力減らす事です。 質問文の内容であれば、(データ量が多いなら更に細かな調整をしますが) 全データを配列に読み込んだ後、配列上でデータを探すようにします。
お礼
こんばんは、早速のご回答ありがとうございます。 配列に関してご回答いただきました。私は全然気がつきませんでした。 よろしければ、もう少し詳しく教えていただけませんでしょうか? よろしくお願いします。
お礼
大変参考になりました。ありがとうございました。