5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
受講生さんの投稿
(投稿ID: 2811)
最大値が複数存在した場合についてのコードを投稿します。
よろしくお願いします。
【課題を以下の通り、設定しています。】
問題[1] 一番得点の高い人が複数いた場合でも抽出可能にする
問題[2] 残業時間が一番多い人が複数いた場合でも抽出可能にする
問題[3] 残業時間が一番多い人が複数いた場合でも抽出可能にする
ゲストさんのコメント
(コメントID: 4269)
拝見しました。
まずは、ご自身でコードの内容について評価いただけますか。
それを読んだ上でコメントしたいと思います。
>小川先生
>
>最大値が複数存在した場合についてのコードを投稿します。
>よろしくお願いします。
>
>【課題を以下の通り、設定しています。】
> 問題[1] 一番得点の高い人が複数いた場合でも抽出可能にする
> 問題[2] 残業時間が一番多い人が複数いた場合でも抽出可能にする
> 問題[3] 残業時間が一番多い人が複数いた場合でも抽出可能にする
>
>
>
受講生さんのコメント
(コメントID: 4273)
構成としては、2つのパート(「処理1」と「処理2」)に分けて
コードを書きました。
「処理1」は、データの先頭行から最大値を調べる。
「処理2」は、「最大値が見つかった行」を含めて、最大値含む行を調べる。
これにより、最大値が複数あった場合でも、最大値含む行の抽出にも対応可能
です。
だだ、処理2に関しては、データの先頭行から調べているため、
無駄だな~と思ったため、本日、もう一度、コードを見直ししました。
問題[1]と問題[2]のコードは、「処理2」for next構文の開始値を
「最大値が見つかった行(変数kati)」に変更して、動作確認をしました。
変更前
変更後
問題[3]ですが、for next構文の開始値の見直しを保留としました。
難しそうです・・・
以上、よろしくお願いします。
ゲストさんのコメント
(コメントID: 4275)
この程度のデータ件数であればたいした時間の差になりません。
なので、僕なら、単純に、「処理1」では、最大値を取得してそれを変数に格納することだけを目指すかと思います。
「処理2」では、改めて全件調査して、その値と一致した場合のみリストに追記します。
では、データ数が多い場合はどうするか?ということになりますが...。
以下の2つですね。
[a] 「時間はかかるもの」と割り切ってじっと待つ
[b] 澤崎さんがしたようななんらかの工夫をする(パフォーマンス向上目的なら、もっと他にやり方ありそうです)
[c] 「処理2」では、発展編1で紹介する ForEach構文や.Findメソッドを利用し、効率的に該当セルを見つけるようにする。
[a]は、最初に「僕なら...」と言って示したやり方。基礎編ですし、「できないよりはいいじゃん」ということで。
[b]は、基礎編レベルの知識で無理やりパフォーマンス向上を目指すなら、ということで。煩雑になるのは避けられませんが、やりきれれば腕力はつくでしょう。
[c]は、「腕力でなく技で勝つなら」という感じかな。
よろしければ[a]の方法のマクロを書いてまたここにアップしてください。
受講生さんのコメント
(コメントID: 4276)
コメント有難うございます。[a]の方法のマクロを投稿します。
最大値を変数(Most)に入れようにしました。
最初に投稿したものよりは、シンプルなコードになったような気が
します。
以上、よろしくお願いします。
ゲストさんのコメント
(コメントID: 4279)
とてもよいと思います。
基礎編レベルの技術で書くならこれがベストかと v(^^
一点だけあえて言うなら、僕が基礎編、発展編1レベルの知識しかない受講生だったとしたら、変数名は「Most」にはしません。
英単語1語の言葉って、エクセルVBAの予約語で使われている可能性が高いからです。
SortとかLeftとか、Midとか、そうですね。
初心者の方が、
なんていうプロシージャ名のプログラムを書いて、ハマる例をよく見かけます。
その状態でLeft関数を呼び出そうとすると想定外の挙動をする可能性大。
ということで、僕なら、 Saidai とかそういう名前にするかな。
発展編1まで受講済で「ハンガリアン記法」を学んでいらっしゃるなら、 dMax とかそんな名前もいいかも。先頭のdは As Double の意味。
>小川先生
>
>コメント有難うございます。[a]の方法のマクロを投稿します。
>最大値を変数(Most)に入れようにしました。
>最初に投稿したものよりは、シンプルなコードになったような気が
>します。