|
ハガキ印刷になると、はがき用のレイアウトを
考えないといけないよねぇ〜
ワードのように、幅、長さの調整がmm単位で
調整することができないのがネックですね!!
一応幅は 「標準」スタイルのフォントの "0"が何文字入るかを示して
います。そしてセルの高さの単位はポイントで示しています。
1 ポイントは 1/72 インチ、約 0.35 mm になります。
え〜と、芳坂 和行(ほうさか かずゆき)さんが作成している、
実はとても便利なツールがあります
紹介しておきますね、(オススメです!!)
「ものさしマクロ」っていうんですけどアドレスは↓
http://homepage2.nifty.com/housaka/index.html
ここでDLするといいでしょう!!
単位のことも、詳しく書かれていますので、参考にするといいですねぇ
たこちゅーは、オートシェイプの直線を使って、長さを調整したりもします
印刷と画面の表示の長さとは必ず一致するものではありませんが
ある程度なれてくると比率などでカバーできます。
要は、これも慣れで、ある程度までは感で合わす事ができるように
なるもんです。
え〜と、余談ですが、作成したエクセルファイルは最後にDLできるように
します。(∩_∩)ゞ
さて、話は元にもどります。
とりあえず、下のようなレイアウトで作成してみました
印刷範囲は、このハガキサイズ分だけに設定しておきます
印刷範囲を設定して、ファイル→印刷範囲の設定
これでOK!! (^・^)

●VLOOKUP関数 (初級編でも説明していますよ!!q(^◎^*)p)
これは、もちろん、皆さん知ってますよねぇ、
これを知っていないと前に進めません!!
でも、簡単に説明しておきますね、
=VLOOKUP($O$2,表,5)
↑の式で説明しますね、
郵便番号(この場合「543」のセルですが)欄にこの式が入力されています。
O2は横にある番号の数字のあるセル(5の入ったセル)のことです。
$は絶対値を表します。(これをコピーすると、どこに貼り付けても
絶対値は変わらないので、便利なんです。)
次は、「表」ですが、これは、名簿のデータ範囲に名前をつけました。
つまり一番左がこの「表」の一番左の数字に対応します。
$O$2=5 つまり5に対応します
そして、右側の数字は表の5列目、名簿、郵便番号の列に対応するわけですね
「五丁目六番一号」の欄は、数式に工夫を凝らしています
=" " & IF(VLOOKUP($O$2,表,14)="" , "" , VLOOKUP($O$2,表,14 )
& "丁目") & IF(VLOOKUP($O$2,表,15)="" , "" , VLOOKUP($O$2,表,15)
& "番") & IF(VLOOKUP($O$2,表,16)="","",VLOOKUP($O$2,表,16)&"号")
例えば、最初の" "は少し空けることによって、少し真中にくるように設定しています
次のIF分ですが、丁目に対応するセルが空白だったら空白、それ以外だったら
&"丁目"がありますので 対応する文字と丁目が組合わせられることになります
つまり↑の例では 五丁目となるわけです。
番、号も同じです。そして、それぞれを&で組合わせています。
スクロールバーをつけて、プロパティでリンク先を【番号】の数字セルO2
に合わせておいてください。あとは、入力でしたスクロールバーの
プロパティ設定でいいでしょう!!
さぁ、これで。スクロールバーを動かすと、次々名簿に対応して替わって
いくのがわかります。
●コンボボックスを作ってみよう!!

コントロールルールボックスから↑のように
コンボボックスを選択、図のようにコンボボックスを作成する
1 プロパティを見てみよう!!
プロパティでFontは少し大きめに、たこちゅーは20Ptに設定

IMEMode は4のひらがなモードに設定
LinkedCell R2
ListFillRange A30:A34
と設定してみてください!!A30:34という記述はだめです。
まぁ、そう入れても受付けてくれませんけどね!!ゞ( ̄∇ ̄;)
え〜と、その範囲にはこのようなデータを入力しておきます

そうすると、コンボボックスは、このように表示されました

コンボボックスに直接、文字を入力し、【Enter】キーを押せば
その文字も入力されます。
●印刷ボタンを作ろう!!
1 ボタン作成

↑のように、【現印刷】ボタン、【連続印刷】ボタンを作ってみよう!!
方法は同じように、コントロールツールボックスでコマンドボタンを押下し
任意の大きさのボタンを作成する。
ボタンは【CommandButton1】、【CommandButton2】と表示されているはずだ!!
名前を【現印刷】と【連続印刷】に替えるには、直接ボタンから文字を編集する
方法は、 コマンドボタンを選択して右クリック、コマンドボタンオブジェクトを選択
編集が出てくるのでそれを選択すれば、編集可能になる
間接的な方法は、コントロールツールボックスでプロパティを選択後
Captionのところで文字編集したのち、Fontで文字の大きさや書式を選択すればよい!!
数字を入力するさい、今回の場合にはセルの幅、高さにとらわれしまって
入力する場所がうまく作れない。そこで、ついでに
テキストボックスという、旨い小道具がツールボックスにあるので、
それを、使って入力できる箱を作ってみようと思う!!
要領は、簡単だ!!

このボタンを押せば、テキストボックスが作成される。
先ほどと同じように、プロパティで文字の書式、大きさなどを設定しておく
ここは数字だけの入力になるので、とくにIMEModeは2のfmIMEModeOff
これでここでは必ず、日本語Offの半角しか入らない状態になる。
背景の色は、BackColor で変更できる
文字の色はForeColorだ!!
文字だけの表示 (今回の場合は、開始、終了)
ではラベルを使ってみよう!!
ラベルはこのアイコンだ!!
設定は、テキストボックスと同じだが、テキストボックスとおおきな違いは
Value つまり値の収得ができないのである。プロパティを見ればわかります!!
2 コード作成
次に、↑の右クリックで、【コードの表示】を選択してみよう!!
コントロールツールボックスで選択してもいいし、ボックスを選択状態で
ダブルクリックでも、【コードの表示】は可能だ!!
そうすると↓のように
コードが自動的に挿入されたはずだよ!!
Private Sub CommandButton1_Click() '印刷
End Sub
Private Sub CommandButton2_Click() '連続印刷
End Sub |
(1)現印刷
印刷は、PrintOutメソッドを使います!!
PrintOutメソッドは、引数全て省略可能できす。
シートモジュールで記述する場合、指定しなければ
そのシートが対象ですので、あとは、シートの印刷範囲だけを
エクセル上で先に指定しておけば
PrintOut この1行だけでOK!!です
つまり、
Private Sub CommandButton1_Click() '印刷
PrintOut
End Sub
(2)連続印刷
これはテキストボックス2つを使用します
開始のテキストボックスを TextBox1
終了のテキストボックスを TextBox2
とします。
変数を入れておきましょう!!
Dim N1 As Integer ,N2 As Integer ,No As Integer 'と宣言しておいて
N1 = Val(TextBox1)
N2 = Val(TextBox2)
TextBoxは、言葉どおりテキストが主になっています
たとえば、数字の1は 文字として"1"と認識されてしまいます
これを、そのまま変数に代入してやると、N1は文字と認識
N1は整数と宣言しているわけですから、ここでエラーになってしまいます
そこで*1Val関数を使います。
Val関数は文字で表された半角数字を、数字に変換してくれる便利な関数です
半角数字以外の文字は無視されます。(以降、半角数字は数字)
途中数字以外の文字ががあるとそこでSTOPして以降無視されます
つまり、先頭に数字以外のある文字があれば、無視つまり0です
そして先頭に数字文字があれば、数字の最後まで読み込み、
途中数字以外の文字があれば、そこまで読んでくれるということです
スペースは無視されます
番号の入っているセルにForを使って、開始から終了までの数値を代入します
For No = N1 To N2
Range("O2") = No '番号が入力されているセルの位置
PrintOut
Next No
でも、これだと開始と終了の大きさが逆になるとFor・・がエラーになるので
IF関数を入れて制御させておきましょう!!
つまり
Dim Q as Integer
If N1>N2 Then
'MsgBox関数 *2(ヘルプをそのまま記述:MsgBox.text)
Q=MsgBox("開始設定値が終了値より大きいです" & Chr(13) & _
"終了値を開始設定値に合わせて、印刷を実行しますか?",52,"印刷ページ設定")
If Q=7 Then
MsgBox "印刷中止しました!!"
Exit Sub
End If
N1 = N2
End If
プログラム記述
Private Sub CommandButton2_Click() '連続印刷
Dim N1 As Integer, N2 As Integer, No As Integer 'と宣言しておいて
N1 = Val(TextBox1)
N2 = Val(TextBox2)
If N1 > N2 Then
Q = MsgBox("開始設定値が終了値より大きいです" & Chr(13)
& _
"終了値を開始設定値に合わせて、印刷を実行しますか?", 52,
"印刷ページ設定")
If Q = 7 Then
MsgBox "印刷中止しました!!"
Exit Sub
End If
N1 = N2
End If
For No = N1 To N2
Range("O2") = No
PrintOut
Next No
End Sub |
●今回使ったエクセルファイル
what_vba01.xls (90KByte) ←DLできます!!
Val関数 【*1へ戻る】
Val関数は文字で表された数字を、数字に変換してくれる便利な関数です
数字以外の文字は無視、
途中数字以外の文字ががあるとそこでSTOPして以降無視する
つまり、先頭に数字以外のある文字があれば、無視つまり0です
そして先頭に数字文字があれば、数字の最後まで読み込み、
途中数字以外の文字があれば、そこまで読んでくれるということです
スペースは無視されます
例(□はスペースをあらわす)
あ1→ 0 、 11あ→11 1□1あ1→11
単純に考えれば次のようにすればいいでしょう
MsgBox関数 【*2へ戻る】 ちょっと解説しますねぇ!!q(^◎^*)p
MsgBox( "文字を入れます1000文字ぐらいまで可" , スタイルを設定, "タイトル名" )
スタイル設定ですが、ここは整数でも可ですので、たこちゅーは整数をよく使います
そして、下の数値で第1グループと第2グループの数値を加算したものを使います
文字、スタイル、タイトル名は省略できます。すべて省略すれば 0 となり
第1グループの vbOKOnlyが選択されます、つまり【OK】ボタンだけの表示となります
第1グループ(ボタンの型を選択します)
vbOKOnly 0 [OK] ボタンのみを表示します。
vbOKCancel 1 [OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore 2 [中止]、[再試行]、および [無視] の 3 つのボタンを表示し
ます。
vbYesNoCancel 3 [はい]、[いいえ]、および [キャンセル] の 3 つのボタンを
表示します。
vbYesNo 4 [はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel 5 [再試行] ボタンと [キャンセル] ボタンを表示します。
第2グループ (メッセージのアイコン選択します)
vbCritical 16 警告メッセージ アイコンを表示します。
vbQuestion 32 問い合わせメッセージ アイコンを表示します。
vbExclamation 48 注意メッセージ アイコンを表示します。
vbInformation 64 情報メッセージ アイコンを表示します。
そして、MsgBoxの戻り値は、整数で返されることに注目します!!
定数 値 説明
vbOK 1 [OK]
vbCancel 2 [キャンセル]
vbAbort 3 [中止]
vbRetry 4 [再試行]
vbIgnore 5 [無視]
vbYes 6 [はい]
vbNo 7 [いいえ]
MsgBoxのボタンを押すことにより、この数値が返ってくるということです!!
ですから、、これも、定数で書いてもOK(定数は変数として割り当てられている)
ですが、値で書いた方が楽ちんなので、たこちゅーは値を使っています!!
PrintOutメソッド
使いかた
通常は
Sheets("名簿").PrintOut From:=1, To:=2, Copies:=1 というような使いかたを
します。
Sheets("名簿").PrintOut(1, 2,1)というような使いかたはしません
ヘルプではPrintOut メソッドの使用例としてActiveSheet.PrintOut
としか書かれていません!!メチャ不親切!!だと思いませんか?ゞ( ̄∇ ̄;) |
|