書式・関数
■マクロ作成適格者
  • 0.社会常識にたけた人
  • 1.真面目な人
  • 2.几帳面、緻密な人
  • 3.辛抱強い人
  • 4.理屈っぽい人
  • 5.仕事を簡素化したい人
  • 6.その仕事に精通している人
  • 6.コツコツ型の人
  • 7.集中力のある人
  • 9.歩きながら考えられる人
 ラベル印刷.xlsm 

(左クリックでGoogle Driveが開きます)

今回使用しているラベル:
パソコンプリンタ&ワープロ
 ラベルシール[プリンタ兼用]
東芝Rupo & TOSWORD
 シリーズタイプ
 10面用(角丸)/A4判
1片サイズ(mm) 96.5×44.5
 (マット紙ツヤなし・ホワイト)
A−one
 品番28173 / 合計200片
 (10面付・20シート入り)
 品番28174 / 合計1000片
 (10面付・100シート入り)

A-one
(A-one HPより)
A−one

amazon 28173
card


card
旅人よ
襟裳岬
津軽海峡冬景色
白い一日
途上
異邦人
酒よ

 まず、左側から見本ファイル [ラベル印刷.xlsm] をダウンロードして下さい。Google Drive で公開しています。名簿からラベル印刷をするマクロが組んであります。
 実は、名簿を整理するのに一番適しているソフトは microsoft ではアクセス(ACCESS)というソフトになります。私も自分の住所録管理に使っています。このアクセスは、プログラムを組んでソフトを動かすというより、アクセスというソフトを使いこなすと便利な機能が働いてくれる、という感じのものです。エクセルとアクセスでは根本的な思想が違いますので、両方同時には上達し難い構造になっています。
 また、ラベル印刷だけなら用紙メーカーのホームページからソフトをダウンロード出来る時代でもあります。
 とりあえずは、プログラミングの醍醐味が味わえるエクセル・マクロを使いこなせるようになって下さい、そして日常業務をもっと豊かなものにして下さい。

 この見本ファイルは EXCEL2010 で作りました。拡張子は .xlsm です。アイコンには「!」マークが付いていますが異常ではなく、マクロが含まれてますよという印らしいです。(EXCEL2003以前バージョンではうまく動かないでしょう)

 エクセル・マクロで使うプログラム言語はBisual Basic(ビジュアル・ベーシック)と呼ばれます。プログラム言語とは、言葉の英語、フランス語、スペイン語と同じようなものだと思えばいいでしょう。言語が違うだけで出来ることはそんなに変わりません。ただ得意な表現能力がちょっと違うので、ソフトにより使い分けられます。プログラム言語の基本は英語です。文章形式に近いのですが、英語+記号表現だと思えばいいでしょう。

 見本ファイルには44名の仮名前が入力されています。その名簿から [ラベル印刷1名10枚] [ラベル全員印刷] [ハガキ指定者印刷] [ハガキ全員印刷] [印刷名簿作成] というマクロを作成しました。5つのマクロがファイルの中央にある5つのアイコンに登録されていますので、それぞれをクリックして試して下さい。印刷プレビューまで自動で表示されますが、自動的に印刷されることはありません。プレビューを止めるか、右上×クリックで最初のシート [入力] 画面に戻ります。シートは [入力] [はがき] [ラベル印刷] [名簿] の4枚です。

 さて見本マクロ解説の前に、簡単なマクロを自分で作成し動かしてみましょう。いきなり他人の作ったマクロを説明されても、まだ何も理解できないでしょうし、簡単でもひとつ作ることが上達の第一歩になると信じていますから。

 新しいエクセルを開く→上部[ファイル][ホーム]・・と続く[開発]をクリック→最左側アイコン付き[Visual Basic]をクリック→すると別ウィンドーでマクロ画面が表示されます→左枠上段に VBAProject(Book1)以下の文字が見えます→最上部文字 [挿入]→[標準モジュール]とクリックするとマクロを書く白い画面になります。さっそくマクロを書きましょう。

 1行目 sub→スペース1個→ renshu → ( 【左カッコ】→ ) 【右カッコ】 と入力し、エンター・キーを押します。そうすると1行目は、Sub renshu() となり、2行目は空白行、3行目は自動的に End Sub という文字が現れます。1行目の renshu がマクロ名になります。自分で好きな名前を付けられます。ここに漢字、ひらがなを使うことも可能です。この Sub xxxx()、End Sub はマクロの規則です。Sub と End に囲まれた領域に命令語(マクロ)を書いていくことになります。
 マクロ編集をやめる時や中断する時は、上部2行目最左端のエクセルアイコンか右上の×をクリックします。そこまでに書かれた文字は、そのまま残ります。また [Visual Basic] を押して戻ります。エクセル本体を終了する時に、保存するのか保存しないのかでマクロに書かれた文字も連動します。

 さて2行目を書きましょう。2行目の左端にカーソルがある時、キーボードの [Tab] を押すとカーソルが右に移動します。その場所は1行目の S と3行目の E と同じ頭揃えになります。命令語はそこから書き始めます。今回は、そこに range("A1") = "これがマクロだ" と書いて下さい。r は自動的に R になります。マクロ画面に書かれた結果はこうなります。

1行目 Sub renshu() 2行目 Range("A1") = "これがマクロだ" 3行目 End Sub


 右上の×をクリックし、マクロ画面を閉じます。普段のエクセルシートが現れます。
 次に、今書いたマクロを実行してみます。
 左側、[Visual Basic]の右隣にある [マクロ] をクリック→どのマクロを実行するかの別ウィンドーが現れます→現在はマクロは1個だけしか書いていませんので、青線白文字ヌキの renshu が選ばれている状態で→[実行]ボタンをクリックします。すると、シートの左上 A1 セルに "これがマクロだ" という文字が表示されます。 これがマクロ作成、実行の第一歩です。

 さて、もう一つマクロを書いて見ましょう。1個目のマクロの End Sub の下の行にカーソルをもっていきます。そして、

Sub Test_1() h = 20 p = 50 Cells(3, 2).Value = h Cells(4, 2).Value = p Cells(5, 2).Value = h * p End Sub


 1つ目と2つめ目のマクロの間には、自動的に境界線が引かれます。
新しい書き方が出てきました。2行目、3行目にある h と p は変数といいます。ここでは、h は 20、p は 50 だと勝手に定義しています。5行目には計算式 h * p があります。* はかけ算の数式です。1つめ目のマクロでは Range というセルの表現を使いましたが、今回は Cells という見慣れない書き方をしています。シートにあるセルの上部は、ABCDEF・・・、左側は123456・・・と表示されているのが初期設定ですが、これを上部も数字で表示したい時は、ファイル→オプション→数式→数式の処理→□R1C1参照形式を使用するにチェックを入れると変更できます。列と行が両方数字になることによって、セルの位置を指定する時に変数が扱えることになります。例えば Cells(3, 2) = Range("B3") です。Cells(行,列)、Range("列行") と反対の表示になりますのでご注意。このあたりは見本ファイルに頻繁に使われています。この2つ目のマクロを実行すると、このマクロを書いた意味がお分かりになるでしょう。ここまで分かれば、あとは応用みたいなもの。こんなことでも完璧に理解することによって、次からの思考が確かなものになります。

Sub kesu() Cells.ClearContents End Sub


 このマクロを実行すると。シート上の文字が全部消えます。Cells の後に () がありません。シートの左最上部、数字もアルファベットもない場所をクリックしてシート全体を選んだ時と同じ状態です。ClearContents は文字だけ消します。書式(文字の大きさ、色、セル幅高さ、罫線)を全部削除して初期設定に戻す時は、Cells.Clear とやります。


(見本ファイルの解説)
 [ラベル印刷.xlsm] を開く→開発→Visual Basic のうち、2つ目 [ Sub Label_All() ] という名前のマクロを解説します。ずらずらと書かれている文字を見て、もうダメだとすぐに諦めないで下さい。マクロは1行ずつ命令が書かれています。それを上から下の行に読んでいって下さい。実行するのもこの上から下へと順番に動いていくのです。ここを理解すれば、マクロの入り口は入ったことになります。
 このマクロは、シート[入力]にあるデータをシート[ラベル印刷]A4用紙1枚に2列10枚のラベルを並べ替えるものです。登録アイコンは [全員のラベル印刷] 。[入力]シートのデータは上から読んでいき、名前が空白の場合データ終了とします。ラベル印刷用紙には左下段に名簿にふられたデータ番号を [No.xx〜xx] という形式で印字する。

 2行目 Application.ScreenUpdating = False
 マクロが実行される動きを見せる時は、True、動作を隠す時は False を使います。例えば別のシートに移動しても、False だと動きは見えません。

Sub Test_2() Application.ScreenUpdating = True Sheets("名簿").Select End Sub


 これで検証してみて下さい。将来的に、別のシートに移って戻ってくるマクロの時に、このことを注意しなければいけないことにぶつかります。

 3行目 Worksheets("ラベル印刷").PageSetup.PrintArea = Range("$A$1:$M$61").Address
 シート [ラベル印刷] の印刷範囲が消えないように毎回設定し直している。

 以下、シート [入力] のデータを10人ずつ読み込み、それをシート [ラベル印刷] に2列5行に配置し直す作業です。
 4行目 i = 4 変数 i は、1番目の人、初期値は4(行目)と言うことになる。
 5行目 j = 13 は、10人グループの最終人、初期値は13(行目)。
このふたつの変数を For 〜 Next 文という超有名な構文で使用します。

 6行目 Kurikaeshi: 文字位置が頭からで、最後に : (コロン)もあります。これは、マクロの流れの中でポイントとなる地点を指定しています。今回は [ラベル印刷] に送り出す10人ずつをこの繰り返し地点と42行目 GoTo Kurikaeshi との間で作業をしています。10人を読み、送り出したら、次の10人を読み、また送り出す、という作業を繰り返します。マクロは上から下に動作しますから、最初は通過するだけになります。GoTo Kurikaeshi ではじめて戻ります。

 7行目 Worksheets("ラベル印刷").Cells.ClearContents
 シート [ラベル印刷] にある文字をすべて消します。

 8行目 sw = 0 変数 sw は、ラベル印刷の左列を作業するのか右列を作業するのかのスイッチの役割をします。データを1名分コピーした時 sw に1を加えることによって、sw が5になれば、左列が終わったという判断をするわけです。

 9行目 m = 4 変数 m は、ラベル印刷の1枚ずつの一番左上のセル位置、行目を指定します。まず1人目のラベル位置は、[ラベル印刷] シートの4行目であることを示しています。

 10行目 n = 10 変数 n は、ラベル印刷の1枚ずつの一番左上のセル位置、列目を指定します。まず1人目のラベル位置は、[ラベル印刷] シートの10列目であることを示しています。

 11行目 For k = i To j を、 For 〜 Next 文と言います。意味は、変数 k が 変数 i から j までを繰り返し実行するということです。今回の上述の定義によれば最初は、k は 4 から 13 まで10回繰り返し実行をします。そしてこの変数 k は、[入力] シートの読み込みデータの行目を同時に示しています。
 12、13、14行目

If Cells(k, 3) = "" Then GoTo Owari Else


 初期値は cells(k, 3) は Cells(4, 3) すなわち Range("C4") を読み、そのセルが空白なら名前欄に名前が記入されていないということで、データはそのその前の行まででお仕舞いという判断をさせ、 GoTo Owari で Owari: 地点に飛ぶという意味になります。

 14行目の Else により、そのセルが空白でなかったら、誰かの名前が名簿に記入されているということなので、まず最初の人のデータが [入力シート] から[ラベル印刷シート] に内容がコピーされます。

 15行目 
 Worksheets("ラベル印刷").Cells(m, n) = "〒" & Cells(k, 4).Value
 シート [ラベル印刷] の Cells(4, 3) が初期値、これは Range("C4") セルのこと。コピーしてくるデータは = 以降の右側に書かれているデータ。シート名が書いていないということは、マクロがその [入力] シート上で実行されているからということになる。"〒" マークを最初に書いて、その後に郵便番号を書く。& は文字の足し算のことです。初期値は、シート [入力]の Cells(4, 4)、すなわち Range("D4") にある郵便番号をシート [ラベル印刷] にコピーするというマクロになります。.value というのは、そのセルが持っている値そのものの意味です。

 16行目 
 Worksheets("ラベル印刷").Cells(m + 1, n) = Cells(k, 5).Value
 同じように今度は住所1をコピーします。変数も足し算で1行下とかセルの1列右を指定しています。

 17行目 
 Worksheets("ラベル印刷").Cells(m + 2, n + 1) = Cells(k, 6).Value
 ここは住所2のコピー。

 18行目 
 Worksheets("ラベル印刷").Cells(m + 4, n - 1) = Cells(k, 3).Value & " 様"
最後は名前欄、名前の後に "様" を加えています。

 19行目 End If 、 If で始まる文は、必ず End if で終わらなければなりません。規則。

 20〜28行目までは、[ラベル印刷] 左下に印字する No.XX 〜 XX を作業しています。
 28行目 Z = "No. " & x & " 〜 " & y
 ここでは計算で印字文字を作っておいて、印刷命令の時に場所を指定しています。

 29行目 sw = sw + 1
 ここがこのマクロのキーポイントかもしれません。10人グループのラベル印刷へのコピーは左側5人をまず縦にコピーしその左側5人が終わったら、次の6人目からは右側に場所を設定し直さなければいけないということをこの sw で実行しています。1件コピーし終わる枚に1を加算し、その直後にこの sw が5になったかどうかで、次のコピー行目、列目を指定するというやり方です。

 30〜35行目 もしも sw が5になったら、n を10にして右列になるように指定します。m は4に戻してまた4行目からのコピーに指定し直します。sw が5ではない時は、単に行目を10下に下げます。それが m = m + 10 です。

 36行目 Next k
 11行目の For k = i to j に戻る(今回のマクロでは10回を繰り返す)。

 37行目 Worksheets("ラベル印刷").Range("$C$56").Value = Z
 20〜28行目で作った[ラベル印刷] 左下に印字する No. をコピーします。

 38行目 Worksheets("ラベル印刷").PrintPreview
 シート[ラベル印刷]の印刷プレビューをしています。ここから印刷も可能です。

 39行目 ' Worksheets("ラベル印刷").PrintOut
 文頭に ' をつけるとコメント行という呼び方で命令を保留する行になります。今回はこの行をコメント行とすることで、印刷をすぐに行わないという意味になります。このマクロにバグがなく、名簿も問題ないようなら、38行目をコメント行にし、この39行目のコメント行からの復帰をすれば、プレビューなしに自動的に全ページ印刷という作業をすることになります。

 40行目 i = i + 10 、41行目 j = j + 10
 今回のマクロでは、1回目は4(行目)から13(行目)、2回目は14(行目)から23(行目)、)、3回目は24(行目)から33(行目)、という風にデータ[入力シート]を読み、[ラベルシート]にコピーしていきます。そして、
 42行目 GoTo Kurikaeshi
 Kurikaeshi 地点に戻って、2枚目(次の10人)のラベル印刷作業にとりかかるという仕組みです。

 43行目 Owari:
 12行目で名前が "" すなわちスペース、空白セルだった場合は Goto Owari と指定してあるので、ここに飛んできます。名前がなくなり読み込むデータはなくなっても、もう既に読んでしまって処理が終わっていないデータがあることを忘れてはいけません。必ず最終処理という作業をします。

44行目、45行目、46行目は、38行目、39行目、40行目と同じ作業になります。これをしないと今回の場合なら最後の4人分が印刷されずに終わってしまいます。

 47行目
 Sheets("ラベル印刷").Select シート[ラベル印刷]を選択
 48行目、49行目
 Application.Goto reference:=Range("$A$1"), _
 Scroll:=True
 この2行は Range("A1") セルを選択するマクロです。
同じように、このあと、50行目、51行目、52行目で
シート[入力]の Range("A1") セルを選択してマクロ終了となります。
 53行目 End Sub でひとつのマクロが終わります。



このラベル印刷に使われるラベルは以下の通りです。
 パソコンプリンタ&ワープロラベルシール[プリンタ兼用]
 東芝Rupo & TOSWORD シリーズタイプ 10面用(角丸)/A4判
 1片サイズ(mm) 96.5×44.5 (マット紙ツヤなし・ホワイト)
 A-one 品番28173(10面付・20シート入り・合計200片)
 A-one 品番28174(10面付・100シート入り・合計1000片)

 マクロ(プログラム)は作る人によってその過程が違います。プログラムに著作権があるといういわれです。最終的に求められるのはバグがないことです。プロセスが簡潔でもバグがあっては何にもなりません。余計な作業をやったからといって、結果が100%正しいものであれば許容範囲でしょう。シンプルで間違いの起こらないプログラムが一番です。もしバグがあっても、予測しないデータが入ってきたらプログラムがそのまま走らないで止まってしまった方が正しい処理になります。

 昔はフローチャートというプログラムの流れ図を作ってからコーディングしました。今ではフローチャートを頭の中で考えながら、組んでいくのが普通のようです。プログラムの実行は上から順番に水の流れのように処理していくので、フローチャートにまとめやすいのが特徴です。サラリーマンの普通の仕事も、フローチャートに置き換えられるようになったら、一人前と言えるでしょう。

 エクセルの得意とするのは加減乗除のような計算です。今回の見本ファイルでは計算は一切していないので参考にならずに申し訳ありません。マクロを組まない人でもセルの関数を使って、上級者の如くエクセルを使い倒している人もいるでしょう。確かに関数をせいぜい20個も知っていれば、十分にエクセルを使いこなせます。

 この見本マクロには実は最初に作ったもうひとつのエクセル・ファイルがあります。特徴的なのは、[ラベル印刷]シートにある文字は、[入力]シートの10名分名前エリアを参照する数式を入れてあります。セル数式とマクロをうまく組み合わせたファイルです。
 ラベル印刷_V1.xlsm  比べてみるのもおもしろいでしょう。マクロを組まないで、ラベル印刷シートの文字がすべて入力シートを参照するファイルもおもしろいかもしれません。汎用性を持たせないなら、マクロがなくてもラベル印刷くらいなら出来るでしょう。

 マクロの最初に Dim x as integer のように変数の型を宣言することが、正確なやり方ですが、今回は省略しています。この integer なら整数型を、String は文字型を、などと明示することが意味のあるようになるのは、このマクロっていうやつを使いこなせるようになった時かもしれません。

 見本マクロでは小さな絵にマクロを登録し、そのアイコンをクリックすることでマクロを実行できるようにしています。そんなマクロの登録方法は?
 当該シートで、[挿入]→[図] から PC 上のディレクトリをたどり jpg ファイルなどを選択 [挿入] をクリックでシートに現れます。または、エクセルの持っている種々の図形を利用するのもいいでしょう。[挿入] → [図形] → 図形選択 → シート上にマウスを移すと + カーソルに変わるので、左クリック(ドラッグ)しながらその図形をシート上に描くことが出来ます。大きさは描いた後から直せます。正円は Shift を押しながら図形を描くと出来ます。
 その図・図形にマクロを登録するには、当該図・図形を右クリック → [マクロの登録] → 登録されているマクロが別ウィンドーで見えてくるので選択してOKで登録が出来ます。
 シート上の図・図形にマクロを登録した後にその図・図形を削除したい時 → マクロが登録されていなければマウスでその図・図形を選択して [Delete](削除)で消えますが、マクロが登録してあると、マウスで選択しようとすると、マクロがどうしても実行されてしまいます。そんな時は、[ホーム] → [検索と選択] → [オブジェクトの選択] をクリック、するとカーソルの形が変わります。その状態で削除したい図・図形の周りをドラッグしてマウスを離すと目的の図・図形が選択されますので、そこで削除して下さい。直接、図・図形を選択しても、図・図形は選択できません。 ** 注意■この作業が終わったら、[ホーム] → [検索と選択] → [オブジェクトの選択] をクリックを再度実行して、カーソル状態を元に戻さなければなりません。[オブジェクトの選択] の左アイコン状態で、選択中か否かを判定できます。

 中学生くらいが最も速く理解できるでしょう。それは、まだまだ素直な心が80%残っている状態に、これはちょっと違うなという反発・反抗心が芽生えてくる頃だからです。大人になって進歩のしない人の多くは、素直な気持ちが10%もなくなってしまっていることでしょう。プログラムだけではなく、人間の進歩には『素直』であることが最大の武器になります。そう言われて、「そんな馬鹿な」「そんなことはないよ」と言っている時点で、もうこの条件から外れていることは確かです。

 SE(エス・イー)です。職業はと問われてそう答える者は得意げ。そんなにたくさんのSEがいるとは思えないが、意外と多いのに驚く。かなり仕事に精通し、コンピューター知識も豊かでなければSEにはなれないはずだが。昔のような厳格な区別、SEとプログラマーの境目がなくなっているのかもしれない。まさしくシステムを設計するのがSE、その仕様書に従ってコーディングするのがプログラマーという図式は、ちょっと違ってきているのかもしれない。
 理工科系出身者が向いていると思われているSEだが、実は社会の仕組みや常識、仕事の効率化を考えられる文化系の人間の方が、そういうシステムを再構築するのには向いている、ということは経験をした人なら誰にでも分かること。プログラムを書くだけなら、女性の方が向いていることも実証されている。プログラム分野では意外と素直な能力を発揮するのが女性なので、他の社会生活とは別の面が見えたりもする。
 どこに才能が向いているのか、やってみなければ分からない。頭の悪い人には向いていない、と断言するマクロを組む人。そう言うと誰もが、じゃあ私は向いていないと言うだろうから、そんなに簡単に諦めてはいけない。もしかすると、向いているかもしれない、と何事にも挑戦する気持ちで人生の勝負は出来るよ。
 このページが、マクロ挑戦への入り口になってくれればいいな、と強く思っています。

ラベル印刷.xlsm ファイルの Label_All() マクロの説明でした。
 マクロはプロジェクト内のモジュールや、モジュール内のプロシージャという部分、よび方がありますが、このページでは面倒なので統一してマクロとよんでいます。


 見本ファイル ラベル印刷.xlsm マクロ Label_All() フローチャート を見てください。[ Owari: ] ポイント以下の2行、
 Worksheets("ラベル印刷").Range("$C$56").Value = Z
 Worksheets("ラベル印刷").PrintPreview
 これと同じものが、[Goto Kurikaeshi] の上にも見ることが出来ます。プログラマーとしては同じ事を別の2カ所に記述することは格好良くありません。そう考えた人への別の記述法。
まず、もうひとつマクロを書きます。例えば、名前を [Insatsu()] とします。

Sub Insatsu() Worksheets("ラベル印刷").Range("$C$56").Value = Z Worksheets("ラベル印刷").PrintPreview End Sub


 そうです、このダブっていた2行を別のマクロとして作っておくのです。
 その後は、上記2カ所の2行分を、
 Call Insatsu
 に差し替えてやります。
今回は同じ行が2行だからそのままでもさほど問題なさそうですが、同じ事を10行も20行もしなければいけない時は、このように別のところにまとめておいて、Call で呼び出してその部分だけを実行させるというやり方がプログラムらしくて格好良い作業になります。

 でも待てよ、Call Insatsu を2回書くのはやっぱり綺麗じゃないのでは? と思った人はもう上級者です。そうなんです。なんとかこの部分を1回で済ませられないだろうかと考えるのが、プログラマーの性だと思います。是非トライしてみて下さい。自分の作った流れをもう一度見直したものが、次の要約フローチャートになります。こんな風にマクロ弄っているのが楽しいと感じられる人が、プログラムを組むことに向いている人かもしれません。
 ラベル印刷2.xlsm  これが改良ファイルになります。

flowchart3

 このようにプログラムは書く人によって書き方が多少違うのは普通です。結果が正しいことを求められるのは当たりまえです。その過程は問われませんが、こうやってプログラムの中身が誰かに見られることを想定すれば、すっきりと整理されたプロセスをたどりたくなるでしょう。2行分を1行に差し替えたとしても、2カ所に同じ事を書くことも格好悪いと思えば、さらにこのマクロをブローアップすることも可能です。ただ、作業の流れが複雑になって、後から見直したい時に、自分でもよく分からなくなってしまったという状態になることもありますから、細心の注意を払いながら次なる一手を考えましょう。

 ごちゃごちゃとたくさん書いてきたが、まだまだ書き足りない。説明が上手くなければ記述も長くなる。今回のマクロの考え方のポイントになるのはどこだろうか。それは下図に示したように、シート[入力]を上から読んで行き、それをシート[ラベル印刷]のまず左側5人分、次に右側5人分に郵便番号・住所・名前をコピーするというところです。10人分が終わったら次の10人分という案配に繰り返すわけです。入力シートに記載されている人数は何人か分かりません。何人でも上手く出来なければいけません。このやり方だって別の方法があるかもしれません。それがマクロを組む人の個性になります。要は一番簡素で、一番確実な方法を考えることがマクロを組む人の能力と」いうことになります。

flowchart4


 この見本マクロがこのままではダメだという最大の欠点は? シート[ラベル印刷] の列行幅にあります。現在のラベル配置に適した列行幅は、なんかの拍子に変更になったら、まったくのおシャカになります。文字の大きさ、フォントも変わってしまうかもしれません。そういう欠点を補うためには、マクロの中に列行幅、文字の指定をしてやればいいのです。今回はちょっと面倒だという理由で書いていませんが、是非そこらにも挑戦して欲しいものです。そうすれば、何処に出しても恥ずかしくない汎用性のあるファイルになることでしょう。


 仕事を整理する時に、実は頭の中でフローチャートを書いている。頭のいい人は、それを意識することなく実践できるから凄い。普通の人々は頭の中で無意識に考えることなんか出来ないから、それを紙の上に書いた時にはじめてシステムの概要を理解する。そうすることによって、今自分がやっている仕事が見えてくる。どこに無駄があるのか、どこがダブっているのか、あるいはもしかするとどこか抜けているところはないのか、ということが見えてくるのだ。普通の人々に完璧を求めることは出来ない。頭のいい人だって完璧な考え方をシステム化することは出来ない。でもプログラムやマクロはとりあえず完璧を求めます。出来ないことを明確にシステム化するのも仕事のうちです。出来ないものを出来るが如く扱うことが、重大なミステイクであることを十分認識しながら仕事を楽しみましょう。


おまけ

 わざわざマクロを組まなくても、エクセルの持っている関数だけでも十分以上に役に立ちます。参考本を買ってきて一生懸命勉強する人も多いようですが、今やネットで勉強するだけでまったく問題ありません。しかも覚えて便利な関数は、せいぜい20個くらいで十分過ぎると思われます。
 自分の仕事に応じて、その都度必要に迫られて覚えるのが得策。実用性のない関数を知っていたって、それこそ無用の長物です。
 Excel2000 時代に作った古いファイルがあります。ダウンロードしてご利用ください。中身はまだまだ未完成で置きっ放しになっていましたので、ちょっと恥ずかしい限りですが、よくよく見るとまだまだ使えそうな関数が記載されています。
 どうぞ。 参考数式.xls 


おまけをもうひとつ

  Loto67.xlsm  昔作ったロト6予想マクロを改良しました。ロト6もロト7も単純予想は、ランダムに数字を発生させてそれを表示させているだけですから、予想になっていないのは明らか。
 それだけではおもしろくないので、前回の当選番号を入力し、その数字が出るまでランダム数字を発生させ、その次の数字を表示したのが「LOTO6 完全予想」、こんなもので当選するんだったら、こんな楽なことはない。
 「LOTO7 special」は、マクロを4つの部分に分け、それを呼び出すマクロを文字に登録しています。他人のマクロを解明出来たら、それはもう一人前以上の存在。このマクロを信じて宝くじに当選すれば、このマクロも売れるだろうが。『信じるか信じないかは、あなた次第』。