• ベストアンサー

データを抽出して更新するアルゴリズムについて

基本情報の勉強をすこしかじっているのですが、ソートや検索といったものの基本的なアルゴリズムはならったのですが、いまいち応用が出来ません。例えば、エクセルなどで、値の書き換えの必要となるあるデータの集まりを抽出し、一度必要な更新(データの置換)を行ったものはもう更新の対象としない、あるいは、元のデータの群れに戻すというような場合、どのような処理手順を書くのが理想的でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

やり方は何通りもあります。何が「理想的」かは難しいので、それは 後で述べます。 サンプル手順 (1)原データがシート1、作業場所をシート2とする。 (2)シート2をクリアし、シート名を「作業中」にする。 (3)シート1のある行をシート2へコピーする。 (4)コピーした行が更新対象条件に一致していたら(5)を行う。 (5)更新条件に従って、該当行のデータを更新する。 (6)最終行に達するまで(3)~(5)を繰り返す。 (7)終了後、シート2の名前を「更新済」にする。 検証(サンプル) (1)再実行性  プログラムのエラー、不慮の事故などで、更新が途中で停止しても、  中断箇所、あるいは最初からやり直すことで、処理を完成できるか? (2)分かり易さ  処理手順が簡明か、冗長性はないか? (3)保守性  例えば、抽出条件、更新条件はハードコーディングではなく、何処か  別のシートで指定できるか? 処理手順を上記検証項目に照らし合わせてみて、評価します。 検証項目はサンプルで、他にも色々な観点があります。 検証の結果、高い評価を受けたものが「理想」に近いものと言えます。 >いまいち応用が出来ません 気にしなくて良いです。ただ、発想力は必要です。 「方法Aでやってみたがダメだった。」のあと、直ぐに方法Bを考え つくかどうか、言葉を変えると「押してもダメなら引いてみな」という 感覚です。実務について2年くらい経たないと、難しいでしょう。 未だ、頭の中の「引き出し」が少ないですからね。

gayaldy
質問者

お礼

ご丁寧に有難うございます。やはり試行錯誤しかないですね。

その他の回答 (2)

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.3

>>エクセルでは難しいでしょうか? 難しいという意味は、覚える・理解するのが難しいという意味ではありません。 例えば、厚さ1cm、幅50cmの板を2つに切るとき、普通は、ノコギリを使います。この板の切断作業をノミあるいは電気ドリルでやろうとするような難しさです。 つまりは、質問者さんがやりたいことに対して、エクセルが不適切なプログラム(道具)だということです。 >>まだVBAを使いこなす技量がありません。 AccessだとVBAを使わないでも、可能になりますよ。そのかわりにAccessのマクロやSQL言語などを覚えないといけないかもしれません。もちろん、使いやすいプログラムにしたい場合は、AccessVBAを覚える必要があります。 まあ、プログラミングの学習は、大工や料理人、つまりは職人をめざすようなところがあります。それなりの修業期間と努力を継続しないと、技量は上がりません。そして、誰でも最初は技量は無いものですよ。

gayaldy
質問者

お礼

励ましのお言葉有難う御座います。ただ向き不向きもかなりあるような気もしますが・・・ある程度までやってみないと分からないですよね?

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

通常、質問者さんのやりたいちょっと複雑な処理は、エクセルでは困難です。 例えば、画面のフォームでちょっとしたデータを入力して計算するプログラムなら、VBやC#がいいけど、ハードウエアを制御したいときは、CやC++が向いているように、向き・不向きがあります。 質問された処理は、ExcelVBAを使えば、ある程度は対処できるでしょうが、やはり、Access等のデータベースにAccessVBAを使うなど、「データベース+プログラム言語」で考えられたほうがいいと思います。

gayaldy
質問者

お礼

エクセルでは難しいでしょうか?まだVBAを使いこなす技量がありません。いろいろ本とか見てこれも慣れでしょうか?

関連するQ&A

  • VB6で、抽出したデータのソートについて

    はじめまして。 どうしても分からないので、どなたかご教授頂けたらと思います。 VB6で、抽出したデータのソートを行いたいと思います。 大まかな流れは以下の通りです。 Dim objDb As Database Dim objTbl As Recordset   'mdbファイルからデータを抽出   Set objTbl = objDb.OpenRecordset(データ抽出条件式) (1)レコードセットした、objTblにフィールドを1つ追加したい。 (2)その追加したフィールドにデータを入れる。 (3)入れたデータで降順にソートしたい。 どうしても出来ないので、元のmdbから任意のフィールドを取得してきて、 そこに必要なデータを入れてソートしようとしたら、 .updateでmdb自体のデータを更新しないと出来ませんでした・・・ (mdbファイルは更新・変更等の操作を行ってはダメなファイルです。) この後の処理があるので、レコードセットしたobjTbl (もしくはそのコピーでもいいのですが・・・)を使った形で、出来ると良いのですが・・・ どうぞ、よろしくお願いいたします。

  • クエリ上でのデータ更新

    Accessのクエリで、クエリ実行した画面の抽出されたデータ上で、データの書き換え・更新ができるクエリと、「このレコードセットは更新できません」と左下に記載されてしまい更新できないクエリがありますが、この2つにはどんな違いがあるのでしょうか? おそらく、元になっているテーブルの何かの設定が違うのだろうかと思うのですが、それがよくわかりませんので投稿しました。 よろしくお願いいたします。

  • VB2005 データセットの内容をDBに更新

    VB2005Expressにて開発を行っています。 ・DBから条件を指定して抽出した値をデータセットにセット ・データセット内の値を編集(追加、更新、削除) ・データセットの値をDBへ更新 という処理を行った場合、DB側では 1.データセットの値だけが更新される  (抽出されてないデータは残っている) 2.データセットの値に更新されるので、データセットの値のみになる  (抽出されてないデータは消えてしまう) のどちらなのでしょうか。 どなたかご存知でしたら教えてください。

  • プログラマにとって「アルゴリズム」や「データ構造」の知識は必須ですか?

    最近の、いわゆるパッケージソフトウェアや、Webアプリケーションの開発においては、 必要なコンポーネントをインポートして部品を組み立てていくイメージで コードを書いていくというのが主流だと思います。 ほとんどのプログラミング言語には、すでに便利な関数やパッケージが用意されており、「アルゴリズム」や「データ構造」といった知識はあまり必要になりません。 例えば、データをソートしたい場合、クイックソートなどで自分で実装しなくても、すでにソート関数が用意されているので、その関数を使用すれば良いわけです。 そのような環境においても、プログラマにとって「アルゴリズム」や「データ構造」の知識はやはり必須ですか? 時々、 ・「優先順位付き待ち行列」くらいは、スラスラ実装できなければ、プログラマとしては半人前 ・「離散数学」をしっかり理解していないと、プログラマとしては致命的 などという話も聞くのですが、皆さんの意見を聞かせてください。

    • ベストアンサー
    • Java
  • クイックソートしながら重複要素削除アルゴリズム

    アルゴリズムが苦手な上、アルゴリズム解説自体C言語ベースで書かれ ている物が多く処理のイメージが沸かずクイックソートもコピペや既存 の関数で処理していて、満足に理解出来ていないのですが。 以下の問題を、お解かりになるかた教えて頂けませんでしょうか? ■問題 2万件位の数値データの中から重複要素を削除しながら昇順または降順で、 ソートするアルゴリズム(※1) ■条件 BASIC的(※2)な記述やプログラム中のコメントなどの形式でも構いま せん出来るだけ簡単に示して頂けると助かります。 補足 (※1)ソートする際、重複要素を消すともっと処理が早くなるのではと 思ったので。 目的は、処理の速さを求める事と、次回から応用が聞くよ うにソート自体を理解したいのでクイックソートで無くても構いません。 (※2)実際に動かなくても構いません、イメージが掴みやすい方が良いと    いう意味でとって下さい。

  • エクセルのデータ抽出について

    エクセルのデータ抽出(?)について質問なのですが、 例えばシートで○○店、▲▲店、××店というように分かれていて、それぞれのシートの中に、同じような表があり、    A      B 1  氏名    更新日 2  鈴木太郎  2008/12/20 3  佐藤花子  2009/03/15 といったように、更新が必要な人だけがBのセルに更新日が入るとします。(更新不要の人は空白です。) この更新日が入力されている人の行を、抽出するような感じで別シートへ自動で出来るのでしょうか?(更新必要なくなって、更新日を空白にしたら、抽出したほうも自動で消えるような)

  • Excel データの抽出について

    年始のお忙しいところ失礼いたします。 Excelにおけるデータ抽出についてお尋ねいたします。 抽出元データは左から1番目のシートのA列から順に、日付、部門名、商品名、数量0、記号、数量1、記号、数量2、記号、数量3、記号、残り数量となっています。 残り数量の列には、『=数量0-数量1-数量2-数量3』 という数式が記述してあります。 今回は、左から3番目のシートに、商品名、数量0、残り数量の3列の条件式を入力する場所と条件式に合致するデータを表示する場所を作成して、条件式に合致するデータを抽出することを検討しています。 条件式 商品名列:商品名の中から1つの商品を抽出 数量0:数量0=40、数量0<=10など数量0の値が入力した任意の数量と=またはは、以下(<=)を抽出 残り数量:残り数量<>0、残り数量<=20など残り数量の値が0以外か、入力した任意の数量以下を抽出 条件式を書き換える(抽出条件を変更する)ことが多いため、書き換える(条件を変更する)たびに、表示されるデータが更新されるようにしたいです

  • マクロでのデータ抽出

    毎月の売上データの一覧から必要なデータのみ抽出して、伝票を作成します。 伝票は明細単位で抽出します。 マクロを組もうとしているのですが、1、2行目のように1案件につき明細が2つある場合があるので、どのようなコードになるのかがわかりません。 コードの中で明細をカウントして、その分だけコピーするような手順になるのでしょうか? また伝票は「分類」ごとに作成します。 こちらは分類ごとにシートを作成し、フィルタにかけたデータをコピーしようと思っています。 マクロは初心者で説明不足な部分がありましたら申し訳ありません。 よろしくお願い致します。

  • エクセル 重複データの抽出方法を教えてください。

    複数のセルの値が同じである重複データを抽出する方法を教えてください。 (A)伝票No.、(B)勘定科目CD、(C)金額、(D)取引先CDとなっている場合で、(B)(C)(D)のすべての値が同じデータ(重複データ)のみを抽出したいのです。 例: (A)伝票No.、(B)勘定科目CD、(C)金額、(D)取引先CD 12120 005 10,000 1234 ※ 12121 005 20,000 1234 12122 004 20,000 1235 12123 003 20,000 1236 12124 005 10,000 1234 ※ 12125 003 20,000 1237 12126 006 10,000 1237 ※印の2つの行が重複データとなり、この行のみを表示または色や印を付けてわかる状態にしたいのです。 重複しているデータは双方わかるようにしたいのですが可能でしょうか? (伝票No.12120と12124の両方が解る状態) データ件数が5000件ちょっとあるのでソートしただけでは時間がかかってしまいます。解る方おられましたら教えてください。(*- -)(*_ _)ペコリ

  • アルゴリズムプログラミング

    アルゴリズムにおいて以下のような課題が出たのですかその実行結果を出すためのソースプログラム、または実行結果をどなたか教えてください! (1)バブルソート、選択ソート、挿入ソートプログラムに対して、実行時間(小数点以下2桁まで)、比較回数、代入回数をデータ数50000、100000、150000、200000の4つの場合でそれぞれ測定せよ。ただし対象データはランダム関数SFMTを利用して作成するものとする。 (2) ヒープソート、クイックソートとマージソートプログラムの実行時間(小数点以下2桁まで)、比較回数、代入回数をデータ数50000、100000、150000、200000の4つの場合でそれぞれ測定せよ。ただし対象データはランダム関数SFMTを利用して作成するものとする。 SFMTは以下のサイトからSFMT-srcー1.3.3.zipをダウンロードして解凍する。 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html#SFMT そのうち必要なファイルは sfmt.h sfmt.c sfmt-params.h sfmt-params19937.h を使用する。 どうぞよろしくお願いします。