HOME >> バックナンバー
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
□□□□□□□□□□ □□□□□ □□□□ □□□ □□ □
「Go! Go! エクセルマクロをはじめよう! 」
2008/08/08号 ― No. 106 ―
面倒くさ〜いルーチンワークを撃退させるソーラーマガジン
◇ ◇◇ ◇◇◇ ◇◇◇◇ ◇◇◇◇◇ ◇◇◇◇◇◇◇◇◇◇
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
みなさんこんにちは、三太郎です。
マクロを使うと、
これまで何時間も掛けてやっていた大量のデータ処理作業が
あっと言う間に終わります。
~~~~~~~~~~~~~~~~~~~~~~~~~~
目にも止まらぬ速さで、一瞬で完了します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
おまけに、
一度完成したマクロは、決して人間のような集計ミスはしません。
なので、面倒な確認作業も、データの検算も一切
必要はありません。
~~~~~~~~~~~~~~~~~~
■□ 今日のもくじ――――――――――――――――――――――――――
□■
◇リクエスト紹介
◇今日の講座
<複数シートを検索して行の一覧を表示させるマクロ>
◇次回の予告
◇編集後記
<あぁ〜なーつ休み!?>
―――――――――――――――――――――――――――――――――――
◆リクエスト紹介
―――――――――――――――――――――――――――――――――――
今回は、下記のリクエストをご紹介しています。
投稿者:さくらさん
> あるデータベース状のシート(複数あり)の中から、
> 指定の文字列にヒットしたセルのある行データ(全て)を
> 一覧表示させるマクロを作りたいのですが。。。
> 可能でしょうか?
さくらさん、リクエストありがとうございます。
―――――――――――――――――――――――――――――――――――
◆今日の講座
―――――――――――――――――――――――――――――――――――
┏━━▼ Lesson 106 --- 「リクエストガンガン特集」 ---
┃
┃ ・複数シートを検索して行の一覧を表示させるマクロ(その2)
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━▲
前回は、プログラムの中で指定した行のデータを別のシート上に行コピーをし
て貼りつける。というところまでを作りました。
今回はその続き、データの検索部分を作っていきます。
それでは、前回作成したエクセルマクロ"gogo105.xls"をご用意ください。
※今回からはじめてご登録いただいた皆さんへ
下記のホームページにこのメルマガのバックナンバー(No105)を公開しています
ので、まずはそちらから学習してみてください。(今回はその続きからの内容
になっています。)
◆Go!Go!ホームページ http://www.wat3d.com/gogo/
1)
まずはじめに、プログラムの中身の確認です。
――――――――――――――――――――――――――――+
1."gogo105.xls"を開きます。(セキュリティ確認画面が表示された
場合には、[マクロを有効にする]を選んでください。)
2.マクロプログラムを表示します。
[ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]
3.この画面の左上半分の[−標準モジュール]という所の下の
[Module1]をダブルクリックします。
――――――――――――――――――――――――――――+
++++++++++++++++++++++++++++―
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
++++++++++++++++++++++++++++―
これは、前回作成した「プログラムの中で指定した行のデータを別のシート上
に行コピーをして貼りつける。」ということをやっているマクロのプログラム
です。
この場合は、4行目を行コピーして、シートの"Sheet2"の一番下に貼り付けて
います。
これを見る限り、4行目というところはどう見ても不自然ですので、この未完
成な部分(最初の行の Rows("4:4").Select )に修正を加えなければならないこ
とは誰が見ても明白ですよね。(すなわち、検索の結果によって何行目を行
コピーするかは、当然可変的な数字となりますので、4のような固定の数字の
ままではいけないということです。)
なので、今回は以下にこの部分に関した修正を行なっていきたいと思います。
2)
それでは、このプログラムに手を加えていきます。
――――――――――――――――――――――――――――+
1.まず、この講座ではもうおなじみとなった下記の「ループ処理の基本形」
を用いて、このプログラムを繰り返し処理にするために、ループの中に
当てはめて入れます。
下記の「ある処理」の部分にこのプログラムの中身の部分のすべて
( Rows("4:4").Select の行から ActiveSheet.Paste の行まで)
を、字下げをした上でそっくり挿入してください。
「ループ処理の基本形」
For i = 1 To 10
ある処理
Next i
――――――――――――――――――――――――――――+
修正した後のプログラムはつぎの様になります。
++++++++++++++++++++++++++++―
Sub Macro1()
'
For i = 1 To 10
Rows("4:4").Select
Selection.Copy
Sheets("Sheet2").Select
n = Cells(Rows.Count, "A").End(xlUp).Row + 1
Rows(n & ":" & n).Select
ActiveSheet.Paste
Next i
End Sub
++++++++++++++++++++++++++++―
3)
続けて、もう少しこのプログラムに手を加えていきます。
――――――――――――――――――――――――――――+
1.今度はまず、分岐処理の基本形を用いて、先ほどと同様に
下記の「ある処理」の部分にこのプログラムの中身の部分
( Rows("4:4").Select の行から ActiveSheet.Paste の行まで)
を、再び字下げをしてそっくり挿入してください。
「分岐処理の基本形」
If a = "みかん" Then
ある処理
End If
2.次に、For文といま追加したIf文との間に、下記の2行を追加します。
Range("A" & i).Select
a = ActiveCell.Value
3.最後に、そのIf文の下の
Rows("4:4").Select
という1行を、下記に修正します。
Rows(i & ":" & i).Select
( n と & との間には半角のブランク文字が必要です。)
――――――――――――――――――――――――――――+
修正した後のプログラムはつぎの様になります。
++++++++++++++++++++++++++++―
Sub Macro1()
'
For i = 1 To 10
Range("A" & i).Select
a = ActiveCell.Value
If a = "みかん" Then
Rows(i & ":" & i).Select
Selection.Copy
Sheets("Sheet2").Select
n = Cells(Rows.Count, "A").End(xlUp).Row + 1
Rows(n & ":" & n).Select
ActiveSheet.Paste
End If
Next i
End Sub
++++++++++++++++++++++++++++―
いま行なった1.の追加修正は、前回作ったマクロの処理をIF文ではさみ込む
ことによって、ある条件に一致した場合だけその処理を行なうようなプログラ
ムに修正したということになります。("みかん"としたのは単に仮にです。)
次の2.の追加修正は、もう幾度となくこの講座では行なっている、あるセルの
データを変数 a に入れておくための基本の構文です。
最後の3.の修正では、カッコの中の書き方が少々ややこしいのですが、
Rows("4:4").Select の4の部分を、この場合のように変数 i に置き換える
という際には、("i:i") ←これでは×(変数は、" "の中に入れてはいけま
せん。)というのがマクロプログラムの書き方のいわゆるルールです。
4)
それでは、実行してみましょう。
――――――――――――――――――――――――――――+
1.まず、エクセルの画面に戻って、シート[Sheet1]を開いてください。
2.次に、実行する前にまず、テスト用のデータを入力します。
以下のテキスト(10行)をコピーして、[Sheet1]のセルA1の位置に
そのまま貼り付けてください。(今あるデータに上書きしてください。)
くだもの名
りんご
みかん
ぶどう
バナナ
メロン
いちご
みかん
すいか
あんず
3.次に、結果が分かりやすくなるように、このテストデータに番号を
振っておきます。
以下のテキスト(10行)をコピーして、セルB1の位置にそのまま
貼り付けてください。
NO
1
2
3
4
5
6
7
8
9
4.では、実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま[実行]をクリック。
――――――――――――――――――――――――――――+
実行した結果、どうなったでしょうか??
[Sheet2]の結果を見ると、Noが2番の"みかん"の行がずらずらと並んでしまっ
ていることと思います。
これでは、見るからにうまく処理ができているとは言えませんよね。
正しい結果は、2と7の2つの"みかん"の行が[Sheet2]に追加されるはずです。
さて、ではここで今日の問題です。
Q.このプログラムを正しく動かすために必要な追加すべき処理とは
いったい何でしょうか?
ヒントは、何かの処理を1行追加します。
ヒント2、それはシートの操作に関するものです。
今日の問題はけっこう難しいレベルであるとは思いますが、この答えが分かっ
た方は、もう立派に初心者返上のレベルに達していると言えると思いますし、
今回のリクエストでここが最も重要なポイントでもありますので、ちょっと頭
をひねって考えてみてください。
この答え合わせは、また次回に行ないます。
今回はこれで終了です。
今日作ったマクロプログラムは次回もこの続きでまた使いますので、大切に
保管しておいてください。(ファイル名 "gogo106.xls" )
―――――――――――――――――――――――――――――――――――
◆次回の予告
―――――――――――――――――――――――――――――――――――
┏━━▼ Lesson 107 --- 「リクエストガンガン特集」 ---
┃
┃ ・複数シートを検索して行の一覧を表示させるマクロ(その3)
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━▲
―――――――――――――――――――――――――――――――――――
◆編集後記
―――――――――――――――――――――――――――――――――――
今回も最後までお付き合いいただきまして、ありがとうございます。
私、来週一週間お休みを頂くことになりましたので、すみませんが
この講座も次週はお休みとさせていただきます。
いよいよ今日から北京オリンピックも開幕しますし、
ガソリン代も高いのであまり遠出もできませんし、
今年の夏休みは自宅でゆっくりテレビ観戦でもしようかな!と
思っていたのですが、ここへ来てどうにも持ち帰りの仕事が
たくさん出てきてしまったので結局、
自宅でその処理に追われそうな夏休みとなりそうな予感です。^^;
まぁ、今年の夏は、仕事→五輪→仕事→高校野球→仕事→五輪→仕事・・・
みたいな感じで終わりそうなのですが、
中でも私の一番の注目は、女子マラソンの野口選手ですね。
じみーに(!?)、でも確実に、マラソンで史上初の五輪連覇の偉業
を成し遂げてくれることを期待しています。
皆さんの夏のご予定はいかがなものでしょうか?
猛暑続きの折ですので、くれぐれもお体にだけは気をつけてくださいね。
三太郎でした。
―――――――――――――――――――――――――――――――――――
◆筆者プロフィール
―――――――――――――――――――――――――――――――――――
1962年埼玉県生まれ
中央大学卒後、大手情報処理会社に就職し、プログラマー、SE、プロジェク
トマネージャーなどを経て、ITコンサルタントとして独立し、現在は、主に
エクセルを活用したITシステムの導入指導からシステム開発に至るまで幅広
く行なう、IT業界歴20年以上の大ベテランです。
その一方で、IT教育、人材育成にも力を入れ、富士通のSE育成研修メイン
講師、中小企業大学のC言語実習講師、CSKの研修講師などを歴任するIT
教育者の一人でもあります。IT業界の各方面に散らばる教え子の数は、かれ
これもうざっと6百人近くに達しています。訪れた客先やセミナーで「あら、
先生っ!」なんて教え子に声を掛けられることもしばしばです。^^;
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
このメルマガ講座「Go! Go! エクセルマクロをはじめよう!」
のご登録(無料)は、こちらから
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
戻る