ドリンクバーゲン会場

ホームページで文字のスクロール2008年11月15日 09時56分21秒

サーバー移行を行うことになり、その告知をしていかなければならないのですが、トップページの新着情報だけでは見逃す可能性が高く、もっとわかりやすく表示する必要が出てきました。

しかし、トップページにはスペース的に余裕がなく、表示する方法を考えた結果、文字をスクロールして表示することにしました。

今回は、MARQUEEタグを使って実行させたいと思います。
このタグはインターネットエクスプローラーの独自タグなので、一部のブラウザでは対応していないのですが、設定自体が手軽なので今回はこのタグでいきます。

<MARQUEE>スクロールさせる文字</MARQUEE>

一番簡単な方法です。
属性を変更すれば速度を変えたり、方向を変えたりもできます。
通常は右から左に移動するのですが、左から右に変える場合には下記のように設定します。

<MARQUEE direction="right">スクロールさせる文字</MARQUEE>

これで文字が左から右にスクロールします。
他にも設定項目はあるのですが、今回はそれほど凝ったことは必要ないので、簡単に済ませたいと思います。

入力規則の設定2008年11月06日 14時30分30秒

データの入力規則
エクセルで表作成をしていると、日本語やアルファベット、数字などを切り替えて入力することになると思います。
例えば、エクセルで住所録などを作る場合、氏名や住所などは日本語、電話番号などは半角英数字を使うと思いますが、セルを移動するたびに設定を変更するのは面倒だと思います。

住所録などの場合、A列に氏名、B列に郵便番号、C列に住所というように列単位に入力する内容がある程度決まってくるので、このようなときには、列単位で入力規則の設定を行います。
エクセル2007で入力規則の設定を行うには、「データ」タブより「データの入力規則」を選択します。
A列を日本語入力の状態にしたい場合は、A列を選択した状態で、「データの入力規則」を選択し、表示された画面から「日本語入力」タブを選択してください。
プルダウンメニューから、「ひらがな」を選んで「OK」で登録すると、A列にカーソルが来た場合には、日本語入力の状態になっています。
郵便番号や電話番号の設定のときは、「オフ」や「無効」を選択します。

他にも、カタカナや全角英数字など入力する内容に応じて設定を追加することで、日本語入力を切り替える手間を省くことができます。
入力や変更の数が多い時には便利なので、ぜひ覚えておいてください。

アクセスのラベル印刷22008年08月05日 10時28分31秒

前回、アクセスでラベル印刷をするときに、開始位置を指定できるように設定を追加したのですが、この追加で新たに問題が発生しました。
と言うのも、プレビュー画面を表示させる時に、2回表示が出てくるのです。
しかも、そこから印刷する際にも開始位置を聞いてくるようになり、合計3回も開始位置を聞いてくるようになってしまいました。

これでは実用には耐えませんので、1度で済むように前回の内容を修正する必要が出てきました。

まず、なぜ3回も開始位置を聞いてくるのかですが、
フォームから、印刷プレビューできるようにボタンを配置しています。 そのボタンの中では、レポートを呼び出し、その後データのフィルター処理を行っています。
*************************
i = 0
k = inputbox("開始位置")
*************************
レポートを呼び出す時と、フィルター処理するときの両方に上の処理が呼び出されるようになっていました。
さらにプレビュー画面がら印刷する際にも呼び出されているため、合計3回も開始位置を聞いてくるようになってしまいました。

そこで、フィルター処理の時だけ、上の処理が動くように修正したいと思います。

まず、レポートに印刷フラグとして使うラベルを追加します。
「flg」と名前をつけて、「Caption」に「0」を入れておきます。
このままだと、印刷時に「0」が見えてしまうので、プロパティで「可視」を「いいえ」に変更して印刷されないようにしておきます。
*************************
Dim stDocName As String

stDocName = "label_print"
DoCmd.OpenReport stDocName, acPreview

Reports!label_print.Filter = Me.Filter
Reports!label_print.FilterOn = True
*************************
上はフォーム上のボタンで使われているプログラムです。
「label_print」というレポートをプレビューで開き、フォーム上で指定した、フィルター処理を行っています。
*************************
Dim stDocName As String

stDocName = "label_print"
DoCmd.OpenReport stDocName, acPreview

Reports!label_print.flg.Caption = "1"
Reports!label_print.Filter = Me.Filter
Reports!label_print.FilterOn = True
*************************
このプログラムに1行追加しました。 フィルター処理を実行する前に、レポートの「flg」の「Caption」を”1”に変更しています。
これで、レポートを開いた時とフィルターを処理するときのフラグの内容が変わるので、このフラグが”1”のときだけ開始位置用のinputboxを表示させます。

*************************
i = 0
k = inputbox("開始位置")
*************************
上の処理に追加していきます。
*************************
i = 0
If Me.flg.Caption = "1" Then
k = InputBox("開始位置")
Me.flg.Caption = "2"
Else
If Me.flg.Caption = "0" Then
k = 0
End If
End If
*************************
「flg」が”0”のときは、”k”に”0”をセットしています。 これは、レポートの詳細で登録したプログラム上でのエラーを回避するためです。
次に、「flg」が”1”のときに、開始位置を入力する用inputboxを登録しています。
その下で「flg」を”2”に変更していますが、これはプレビュー画面がら印刷した時に開始位置の登録をしなくて済むようにフラグの値を更新しています。

以上で3回表示されていた開始位置の指定を1度にすることができると思います。
もっとスマートな方法もあると思うのですが、とりあえずこれで現在は動かしています。

アクセスのラベル印刷2008年07月31日 10時06分35秒

先日、事務のほうからアクセスでラベル印刷をするので、開始位置を調整できるようにしてほしいと依頼がありました。

アクセスのレポート機能を使い、ラベル印刷を行っているのですが、いつも先頭から印刷できるわけではないので、当然の要求ですね!

しかし、今まで行ったことがなく、ネットで調べてみました。 マイクロソフトのサポートサイトに情報が載っていたので、それを参考に作りました。
サイトに乗っていた情報はおそらくアクセス2003のものだと思うのですが、現在使っている2007でも同じようにできるようです。

ます、ラベルを印刷するフォームはすでにあるので、そのフォームに開始を指定する機能を追加していきます。

レポートのデザインを開きます。初期設定では、「レポートヘッダー/フッター」が非表示になっているのですが、表示させる必要があります。
アクセス2007で表示させる方法ですが、「配置」タブの「表示/非表示」の項目の中に、「レポートヘッダー/フッター」のボタンがあります。 一番右端にあると思いますので、クリックします。

クリックすると、デザイン画面の上下に「レポートヘッダー」と「レポートフッター」が表示されると思います。

まず最初に、「レポートヘッダー」をクリックして選択し、プロパティを開きます。
プロパティの「イベント」タブの、「フォーマット時」に「イベントプロシージャ」を指定し、VBAエディターを開きます。

まず最初に変数を登録します。
この変数は、共通でつかうので、「General」に登録します。
要は開いた画面の先頭に登録すればよいです。
*************************
Option Explicit
Dim i, k As Integer
*************************

登録したら、フォーマットのところにも登録します。
上で登録した、「i」と「k」の変数を設定します。
*************************
i = 0
k = inputbox("開始位置")
*************************
以上のように入力します。

これでレポートを印刷するときに開始位置を入力するための 画面が表示されます。

次はデザイン画面の「詳細」を選択し、プロパティを開いてください。
「詳細」のプロパティでも「フォーマット時」に「イベントプロシージャ」を選択し、VBAエディターを起動してください。
*************************
If i < k - 1 Then
Me.MoveLayout = True
Me.NextRecord = False
Me.PrintSection = False
i = i + 1
End If
*************************
以上のように入力します。

これで設定は完了です。
印刷プレビューで画面を開くと、最初にインプットボックスが開き、開始位置を入力するように促されますので、開始したい数値入力して、「OK」を押してください。

正しく設定されていれば、指定した場所から表示されていると思います。
今回はインプットボックスから入力しましたが、フォームに項目を作成し、前もって設定しておくことも可能なので、状況に応じて利用してみてください。

曜日の自動設定2008年04月07日 10時32分30秒

4月になり、新しい年度で仕事が始まります。
派遣という立場で仕事をしていると、会社用と派遣先用の2種類の勤務表が存在し、締日が違うので別々に管理する必要があります。

私は合計や残業などの計算にエクセルを使っています。
1か月1シートで12枚のシートで1年分を1ファイルにしているのですが、年度が替わる際曜日を修正するのが結構面倒です。
月単位であれば、1日の曜日を入れてドラッグしてやればできますが、
この手間を省くために2つの関数を組み合わせています。

1つ目の関数は「TEXT」関数です。
TEXT関数は数値を文字列に変換してくれる関数で、
=TEXT(数値、文字列)
と言う式になります。
日付から曜日を表示させる場合には、
=TEXT(日付、"aaa")
となります。
"aaa"という指定で曜日を表示してくれるようになります。

「2008/4/1」などのようにセルに年月日がすべては言っている場合は、
そのセルを指定するだけですみます。
例えばA2のセルに年月日の情報が入っている場合には、
=TEXT(A2,"aaa")
で曜日がでますが、勤務表などの場合シートには日のみで月や年などの情報は入れないと思います。

そこで、2つ目の関数である「DATE」関数を使い、日付の情報を生成します。
=DATE(年、月、日)
という式になります。
年、月、日には、それぞれ数値をいれます。
勤務表では、日にちの指定は入っていますし、月単位でシートを作っているので、月の値は直接指定します。
年のデータは年度を指定するためのシートを追加し、そこに年のデータを登録します。

年のデータを”年度”シートのA1セルに2008を登録し、1日のデータが4月シートのA2に登録されている場合の2008年4月1日を求める場合の式です。
=DATE(年度!A1,4,A2)これで日付の情報として扱うことができるようになります。
5月の場合は月を”5”に変更するだけで5月の日付に変換できます。

TEXT関数の日付の項目にDATE関数を指定してやることで、
曜日を表示させることができます。

=TEXT(DATE(年度!$A$1,4,A2),"aaa")
年度には絶対値の指定を入れています。
これを各月のシート12枚にすべて設定していきます。

年度が変わった場合、年度シートの年を打ち変えるだけで1年分の曜日がすべて変わります。

注意点としては、4月始まりの場合、1月~3月は+1した値を入れることと、2月のうるう年をチェックし、29日が必要な場合に自動的に表示するように、設定を入れることです。

1月から3月は、年度の情報に1を足してください。
下記の式は1月のシートに設定する関数式です。
=TEXT(DATE(年度!$A$1+1,1,A2),"aaa")

うるう年は4年毎に来ますので、年のデータを4で割り、割り切れた年がうるう年になりますので、29日を表示します。
「MOD」関数を使い余りを求め、余りが0の時には29を表示し、
曜日も表示します。
=IF(MOD(年度!A1+1,4)=0,29,"")
=IF(A30=29,TEXT(DATE(年度!A1+1,2,A30),"aaa"),"")

上の式が閏年のチェックをし、うるう年の場合に29を表示させる式
下の式は、29が表示されているときに曜日を表示する式になります。

これで年度が変わるときに、年だけを変更するだけで1年分の曜日が
自動で修正されるようになります。
エクセルで曜日を多く扱う場合には試してみてください。