• ベストアンサー

Excel VBAのわかりやすい教科書を探しています

仕事のルーチンワークをマクロにしたいのですが、何から初めてよいのかわかりません。 したい作業は、 1.顧客毎の点数を計算して得点が高いもの順にソートする 2.年齢層・性別別に上位10件を別表を作って表示する 3.その表を印刷する という具合です。 即効性があればよいのですが、最初から読み込んでいけばマクロの 基本から学べる良質の教科書があれば教えてください。

  • r2san
  • お礼率25% (1309/5228)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

もちろんVBAの教科書的な本を前もって読む必要があります。 しかし最良の先生はツールーマクロー「新しいマクロの記録」です。 (1)(3)は今すぐでもマクロの記録をとれば、どういうコードになるか分かります。 そして他の仕事の場合で、ソートや印刷に限ってとして、それらのニーズの場合は、どういう(言葉で言えば)箇所が代わり、コードのどの部分が変わるか試行してください。 ーーー (2)は私は「プログラム・ロジック」といってますが、VBAの教科書には網羅的には、載ってない可能性が強い。経験を積むしかない。 ーー 1つのやり方(仮にソート法と名づける)は 年齢層+性別別でソートする。 各行について、繰り返し下記処理を最下行まで行う。 終わりはデータ終わり最終行を取得する(色んな方法アリ)。 両者(年齢層+性別コード)を結合したキーが、直前行と同じなら、10個までカウントしながら、別シートに書き出す。 10を越えたら、結合キーが変わるまで、あとは読み飛ばし。 別シートへ書き出しは書き出し行数を示す変数を用意し、1行書いたら+1して置く。 -- VBAは個別ニーズへの対処の積み重ねです。相当経験を積んだら、自ずと、(VBAやプログラムについて)自分の中に湧き上がるものを感じるでしょう。 そうすれば読むべき本も考えられるようになります。

r2san
質問者

お礼

まず、やってみることが大切と言うことですね。 ロジックは誰かのマネをするのではなく、自分で作ると言うことが大切とわかりました。 早速、マクロの記録で試してみます。 大切なことは操作すれば自ずと見えるし一つ一つの積み重ねで大きな仕事をマクロでかけることを学びました。 ありがとうございました。

その他の回答 (1)

  • mohenjo
  • ベストアンサー率37% (125/335)
回答No.1
r2san
質問者

お礼

ご回答ありがとうございました。 早速、拝見させていただいております。 詳しい解説がされており読み進めていくだけで大変よくわかります。

関連するQ&A

  • COBOLで内部ソートをしたいです

    COBOLで内部ソートをしたいです 生徒一人ひとりの成績データから上位点数のものを3教科得点としたいです。 項目名 変数名 国語 wk-kok 算数 wk-san 社会 wk-sha 理科 wk-rik 体育 wk-tai 3教科合計 wk-3kei これで3教科の合計を点数が高い順に上位3教科で合計としたい場合、 単純に国語と算数を比べて、次は国語と社会を比べて・・・とそんなやり方しか思いつかないのですが 何か良い方法はないでしょうか。 使用しているのは富士通のNETCOBOLです。

  • excelでテストの成績処理をしたいのですが

    私は塾の講師をしているのですが、毎日、生徒に5教科の小テストを行っています。 それで、毎日、5教科のそれぞれの点数と合計点数を打ち込んで、壁に張り出しています。 そのデータは、一つのブックに日付けごとでシートを分けて保存してあります。 今回、その日付別の表のデータから、毎回の成績を生徒別の表に変えて、プリントにして生徒一人一人に配ろうかと考えています。ですが回数と人数がとても多いので、一人一人「コピー→貼り付け」を繰り返していたのでは時間がかかりすぎます。 なので、マクロで自動的にやりたいと考えたまではいいんですが、実際どういうプログラムにすればいいのか皆目検討がつきません。 表の形はすべて、A列に順位、B列に名前、C列からG列までが各教科の点数、H列にSUM関数で合計点数。最後の行に各教科と合計の平均点を関数で出している。という表です。 表はすべて名簿の順にソートしてあります。 これらの表から一人一人の毎回の点数を取り出して、自分の毎回の点数が縦に並んでいる別の表を作成したいのです。 どういうやり方をすればいいのでしょうか?

  • エクセルとワードの連携

    こんにちは いつもお世話になっています エクセル(2007)に成績表データがあります。人名、クラス、教科の項目です。 ここから、教科ごとにクラス別の上位3位までをワード(2007)のテキストボックス(複数)に入力して印刷用にレイアウト調整しています。 ここで漠然とした質問になりますがアイデアで構いませんのでお願いします。 エクセルの表から、特定データをレイアウト処理用にワードに持ってくる際の効率的な方法を教えてください。 現在の自動化部分はエクセルでのソートのマクロだけで、その後は手作業でワードの複数テキストボックスへの貼り付けをしています。 素人考えでは、例えばエクセルとワードを連携させてエクセルでソートしただけで、ワードに上位3位までを表示させ、その後レイアウト処理を手動でできないかと思っています。 関連情報でも構いません。よろしくお願いします。

  • EXCELで表を抽出する

    ・A列に日付、B列に件名を入力した表があります。 ・A列の日付は、ランダムに、繰り返し現れます。 この表から、たとえば7月だけの、A列に日付、B列に件名の表を抽出する場合、 手動でする場合は、最初の表を日付順にソートし、黙視で7月分をコピーし、別表に貼り付ける、というやり方でできますが、 数式や関数で自動的にやる方法はないでしょうか? マクロが必要になりますか?

  • エクセルでの成績処理

    こんにちは いつもお世話になっています。 エクセル2003です。 成績処理のマクロを教えてください。 以下の表があります。 NO.   名前   国   算   理   国語クラス  算数クラス  理科クラス 1     A   100   75   80    1       2   2 2     B   70    85   90    2       3   1 3     C   100   75   95    1       1   1 4     D   85    95   85    3       2   3 5     E   75    80   75    2       1   2 6     F   85    70   90    3       2   1 7     G   100   90   80    1       1   3 8     H   95    85   90    2       3   2 9     I   100   85   70    1       3   3 数字がずれてすみません。 A列に連番、B列に名前、C-E列に教科ごとの点数、F-H列に教科ごとの所属クラス 実際は150名分のデータでクラスも多いですが。 この表から各教科の点数の上位3位までのクラス別順位表を作りたいのです。 その際に、順位も名前の左側につけたいです。(同セル内でも、名前セルの左でもかまいません) 同順位であれば連番の昇順で。 つまり 国語1クラス 1 A 2 C 3 G 4 I 国語2クラス 1 H 2 E 3 B という具合に、できれば、別シートにマクロで出すコードを教えてください。 勝手ながら、人数が増えても応用しやすいものだと助かります。 現在はオートフィルでの手作業をしています。

  • 平均点上位5位を抽出

    いつもお世話になっております。 シートAに学生CD、名前、性別、国数社理英の点数とその5教科の合計と平均点からなるデータがあり、シートAをソートやランク関数を使わずにシートBに平均点の上位5名のデータを抽出したいのですが、方法がわかりません。ネットや書籍を見ましたが解決策は見つかりませんでした。方法をご存じの方ご教授お願いいたします。

  • エクセル 関数?マクロ?をご教示下さい。

    御指導宜しく御願いいたします。 ★現状下記のように処理しています。 ●入力状況 Q6:Q125に会員番号 S6:S125に氏名 T6:P125に1回戦の得点 V6:V125に2回戦の得点 Y6:Y125に3回戦の得点 AB6:AB125に4回戦の得点 AE6:AE125に5回戦の得点 AH6:AH125に6回戦の得点 AI6:AI125に1回戦から6回戦の合計得点数 P6:P125にAI列の合計得点を基にRANK関数で順位を表示させています 「=IF(AI6="","",RANK(AI6,$AI$6:$AI$125))」 ●更新マクロで1位から125位まで並べ替えています 同点の場合、現在は会員番号順(昇順)に並べています ★御指導いただき事 合計得点が同点の場合の処理方法 1・Q6の人(会員番号10のA氏)とQ7の人(会員番号20のK氏)が同点の場合  現在は、A氏・K氏と並びP6とP7にはいずれも 1(位)と表示されていますが これを各人の1回戦から6回戦の最高得点を比較し高得点の人を上位としたい。 例 A氏の最高得点 → 3回戦の30000点  K氏の最高得点 → 5回戦の31000点       P列  Q列   S列        1   20    K        2   10     A 2・途中、6行から125行まで同点があれば、同様処理をしたい 3.尚、このワークシートは初期化し次回も使用したい。

  • エクセルVBAで重複する名前に(2)、(3)等をつける方法は?

    こんにちは。お世話になります。 以下のようなデータ(約1500件)があります。 データは分類と名称でソート済みです。 同じ分類のなかで同じ「名称」があった場合、B列の名称の直後に同一セル内で(2)や(3)を順に振っていくマクロを教えていただきたいのです。(1)は不要です。 下記の例では、ううう(2)、ううう(3)といった具合です。 よろしくお願いします。 A列 B列 C列 分類 名称 データ1 aaa あああ a aaa いいい b aaa ううう a aaa ううう a aaa ううう a aaa えええ b bbb かかか a bbb かかか a bbb ききき a bbb くくく b ccc さささ a ccc ししし b ccc すすす a ccc すすす a ccc すすす a ccc すすす a ccc せせせ a

  • Excelで2つの表を1つにまとめるには?

    下図のように、2種類の表があります。 これを、1つの表にまとめ、日付順に並ばせたいのですが マクロを使わないで数式だけで行うにはどうしたらよいでしょうか。 データを手で打ち直すことは考えていません。(実際にはもっと項目が横に長い表です。) 「コピー→貼り付け→並び替え」という作業も考えていません。 ・下図では、データが「A組」では4つ、「B組」では5つとなっていますが、  実際には20個程度のデータ(数は不定)が入ります。 ・また、文字データ(名前、教科)と数値データ(得点)とが混在しています。 ・項目に当たる部分は両方の表とも同じものが入ります。 ・日付、名前は重複する場合があります。

  • Microsoft Visual Studio 2008で質問があるの

    Microsoft Visual Studio 2008で質問があるのですが… 課題で、テキストファイルに各生徒(架空の人物)の学籍番号、各教科の点数書いたファイルを作成し、そのファイルを読み取り、教科ごとと各生徒ごとの平均点、生徒ごとの平均点の高い順から降順に並べたものを画面に出力する(windows¥system~とかいうやつです)プログラムを作ったのですが、そこからさらにまた各生徒の得点分布(ヒストグラム)・偏差値を出力するプログラムの作り方がわかりません。生徒数は10人、教科は5教科としています。 私はあまりこのソフトのことをわかってないので、伝わりにくい文章だったと思いますが、どうか得点分布・偏差値を求めるプログラムの作り方を教えていただけませんでしょうか…?

専門家に質問してみよう