HOME >> バックナンバー

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
□□□□□□□□□□  □□□□□  □□□□  □□□  □□  □

  「Go! Go! エクセルマクロをはじめよう! 」
                    2008/07/30号 ― No. 105 ―

  面倒くさ〜いルーチンワークを撃退させるソーラーマガジン

◇  ◇◇  ◇◇◇  ◇◇◇◇  ◇◇◇◇◇  ◇◇◇◇◇◇◇◇◇◇
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


みなさんこんにちは、三太郎です。


マクロを使うと、

これまで何時間も掛けてやっていた大量のデータ処理作業が
あっと言う間に終わります。
~~~~~~~~~~~~~~~~~~~~~~~~~~
目にも止まらぬ速さで、一瞬で完了します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

おまけに、

一度完成したマクロは、決して人間のような集計ミスはしません。
なので、面倒な確認作業も、データの検算も一切
必要はありません。
~~~~~~~~~~~~~~~~~~




■□ 今日のもくじ――――――――――――――――――――――――――
□■

  ◇リクエスト紹介
  ◇今日の講座
    <複数シートを検索して行の一覧を表示させるマクロ>
  ◇次回の予告
  ◇編集後記
    <熱中症?>



―――――――――――――――――――――――――――――――――――
◆リクエスト紹介
―――――――――――――――――――――――――――――――――――

今回は、下記のリクエストをご紹介します。


投稿者:さくらさん

 >  あるデータベース状のシート(複数あり)の中から、
 >  指定の文字列にヒットしたセルのある行データ(全て)を
 >  一覧表示させるマクロを作りたいのですが。。。
 >  可能でしょうか?


さくらさん、リクエストありがとうございます。




―――――――――――――――――――――――――――――――――――
◆今日の講座
―――――――――――――――――――――――――――――――――――

┏━━▼ Lesson 105   --- 「リクエストガンガン特集」 ---
┃
┃   ・複数シートを検索して行の一覧を表示させるマクロ(その1)
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━▲


今回のリクエストも、以前作った検索マクロの応用的な内容のリクエストです
が、今回のポイントは以下の3つです。

 (1) 複数のシートから検索すること。
 (2) ヒットしたセルのある行の全てのデータを対象とすること。
 (3) その検索結果を一覧表示させること。

これらのポイントを押さえつつ、今回もより簡単な方法にてマクロ作りを進め
ていきたいと思います。



1)
まずはじめに、いつものようにマクロの記録を使ってその基となる
プログラム作りから始めていきます。
――――――――――――――――――――――――――――+
1.エクセルを起動させます。(空のエクセルを立ち上げてください)

2.まず、マクロの記録を開始する前に下準備として、
 以下のテキスト(5行)をコピーして、[Sheet1]のセルA1の位置に
 そのまま貼り付けてください。

りんご
みかん
ぶどう
バナナ
メロン

3.次に、マクロの記録を開始します。
 [ツール(T)] → [マクロ(M)] → [●新しいマクロの記録(R)...]
 → マクロの記録画面が出るのでそのまま[OK]をクリック。

4.ここで、まず行のコピーを行ないます。
 2行目の左サイドの行番号(みかんの右の数字の部分)の2を右クリック
 →メニューの2番目の[コピー(C)]をクリック。

5.下方のシートタブで[Sheet2]を開いてください。

6.先ほどコピーした行を[Sheet2]の1行目に貼り付けます。
 [Sheet2]の1行目の左サイドの行番号の1の部分を右クリック
 →メニューの3番目の[貼り付け(P)]をクリック。

7.最後に、マクロの記録を終了します。
 [ツール(T)] → [マクロ(M)] → [■記録終了(R)]とやって、マクロの記録
 を終了させます。(小っさな画面の■をクリックしても同じです)
――――――――――――――――――――――――――――+



2)
では、いま作ったプログラムの中身をのぞいてみます。
――――――――――――――――――――――――――――+
1.まず、いつもの様にプログラム用の画面を表示させます。
 [ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]

2.この画面の左上半分の[+標準モジュール]という所の+の部分をクリック
 すると、そのすぐ下に[Module1]と表示されるので、その[Module1]をダブル
 クリックします。
――――――――――――――――――――――――――――+

++++++++++++++++++++++++++++―
Sub Macro1()
'
    Rows("2:2").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Rows("1:1").Select
    ActiveSheet.Paste
End Sub
++++++++++++++++++++++++++++―

これは、シートの2行目を行コピーして、[Sheet2]の1行目に貼り付ける
ということを行なうプログラムです。

先に述べた今回のポイント

 (2) ヒットしたセルのある行の全てのデータを対象とすること。
 (3) その検索結果を一覧表示させること。

を踏まえて、

 (2) 行の全てのデータを → すなわち、行コピーし、
 (3) 結果を一覧表示 → 別のシート(Sheet2)に貼り付けていく

といった具合に、まずはマクロの記録でプログラムの基となる部分を
作ったことになります。


さて、それではここで今日の問題です。


Q.
このプログラムを、今度は[Sheet1]のバナナ(4行目)の行全部を[Sheet2]の
2行目に貼り付けるとするためには、どう修正すればいいでしょうか?


ヒント.
至って簡単な問題なのでヒントはありません。(というのがヒントです)



3)
それでは、その答え合わせを兼ねてプログラムの修正をします。
――――――――――――――――――――――――――――+
1.このプログラムの最初の
    Rows("2:2").Select
 という行を、下記に書き変えます。
    Rows("4:4").Select
 (ただ 2 → 4 に変えるだけです。)

2.同様に、
    Rows("1:1").Select
 という行を、下記に書き変えます。
    Rows("2:2").Select
 (ただ 1 → 2 に変えるだけです。)
――――――――――――――――――――――――――――+

修正した後のプログラムは下記の様になります。

++++++++++++++++++++++++++++―
Sub Macro1()
'
    Rows("4:4").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Rows("2:2").Select
    ActiveSheet.Paste
End Sub
++++++++++++++++++++++++++++―



4)
それでは、実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、シートは[Sheet1]を開いてください。

2.では、さっそく実行します。
 [ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
 そのまま[実行]をクリック。
――――――――――――――――――――――――――――+

実行した結果、[Sheet2]の2行目に「バナナ」の行がコピーされていればOK
です。(ここまでは至って簡単な話ですね。)



5)
それでは、もう少しプログラムの修正をします。
――――――――――――――――――――――――――――+
1.このプログラムの中ほどの
    Sheets("Sheet2").Select
 という行の下に、下記の1行を追加します。
    n = Cells(Rows.Count, "A").End(xlUp).Row + 1

2.次に、その下の行(先ほど2)の2.で修正した行)
    Rows("2:2").Select
 を、下記に書き変えます。
    Rows(n & ":" & n).Select
 ( n と & との間には半角のブランク文字が必要です。)
――――――――――――――――――――――――――――+

修正した後のプログラムは下記の様になります。

++++++++++++++++++++++++++++―
Sub Macro1()
'
    Rows("4:4").Select
    Selection.Copy
    Sheets("Sheet2").Select
    n = Cells(Rows.Count, "A").End(xlUp).Row + 1
    Rows(n & ":" & n).Select
    ActiveSheet.Paste
End Sub
++++++++++++++++++++++++++++―

いま最初に追加した

Cells(Rows.Count, "A").End(xlUp).Row

というのは、もうこの講座では度々使用しているのでお馴染みの
「指定列の最後のデータがある行の行番号を求める」というもの
です。

で、今回はこれに

n = Cells(Rows.Count, "A").End(xlUp).Row + 1

というように、+1 をつけていますので、この変数 n の中には
A列の最後のデータのある行の次ぎ(1つ下の行)の行番号が格納
させることになります。



6)
それでは、再び実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、シートは[Sheet1]を開いてください。

2.では、実行します。
 [ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
 そのまま[実行]をクリック。
――――――――――――――――――――――――――――+

実行した結果、今度は[Sheet2]の3行目にまた、[Sheet1]の「バナナ」の行が
コピーされていればOKということになります。



今回はこれで終了です。
今日作ったマクロプログラムは次回もこの続きでまた使いますので、大切に
保管しておいてください。(ファイル名 "gogo105.xls" )




―――――――――――――――――――――――――――――――――――
◆次回の予告
―――――――――――――――――――――――――――――――――――

┏━━▼ Lesson 106   --- 「リクエストガンガン特集」 ---
┃
┃   ・複数シートを検索して行の一覧を表示させるマクロ(その2)
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━▲



―――――――――――――――――――――――――――――――――――
◆編集後記
―――――――――――――――――――――――――――――――――――


今回も最後までお付き合いいただきまして、ありがとうございます。

先ほどもちょっと言いましたけど、最近私、暑さボケみたいなのに
襲われていまして、溜まった仕事がなかなかさばけないで困っています。

と言うのも、
先日、気温35度の炎天下の中、高校野球の県大会を見に行って、
勝てば甲子園、負ければ終わり、の白熱した投手戦だったんですが、

後半にやっと1点奪った時のランナーが、それは何と言ったらいいか
ほんと、アカデミー賞の授賞式で自分の名前が呼ばれた瞬間の主演女優
みたいな感じで、その選手の姿に妙に心打たれてしまったんです。

言葉で表現すると、
「えっー、信じられない!、やった!、ほんとに?、うぇ〜、最高!」
みたいな・・・。
そんな気持ちを体いっぱいに表現したガッツポーズをしながら
ホームを走る高校球児をバックナット裏から見ていて、
「やっぱ高校野球ほど心洗われる競技ってないなぁ〜。」

なんて関心しきりで、炎天下にもかかわらずずっと試合に見入ってしまって
いたら、帰る頃にはそうも軽い熱中症みたいな感じになってしまって。。。、
それ以来、気温が上がってくるとなんか頭フラフラしてしまって
なかなか仕事がはかどりません今日この頃です。

皆さんも熱中症にはくれぐれもご注意くださいね。
三太郎でした。



―――――――――――――――――――――――――――――――――――
◆筆者プロフィール
―――――――――――――――――――――――――――――――――――

1962年埼玉県生まれ
中央大学卒後、大手情報処理会社に就職し、プログラマー、SE、プロジェク
トマネージャーなどを経て、ITコンサルタントとして独立し、現在は、主に
エクセルを活用したITシステムの導入指導からシステム開発に至るまで幅広
く行なう、IT業界歴20年以上の大ベテランです。
その一方で、IT教育、人材育成にも力を入れ、富士通のSE育成研修メイン
講師、中小企業大学のC言語実習講師、CSKの研修講師などを歴任するIT
教育者の一人でもあります。IT業界の各方面に散らばる教え子の数は、かれ
これもうざっと6百人近くに達しています。訪れた客先やセミナーで「あら、
先生っ!」なんて教え子に声を掛けられることもしばしばです。^^; 




◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

   このメルマガ講座「Go! Go! エクセルマクロをはじめよう!」
   のご登録(無料)は、こちらから

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■




戻る