12 posts categorized "Excel"

Sep 01, 2008

Excel 翌月の指定日が土日・祝祭日だったら

Excelのdate関連の関数を駆使して、翌月の指定日が土日・祝祭日だった場合、
翌営業日の日付を返します。

--前提
A1 指定西暦(年)
B1 指定月(月)
C1 指定日(日)
E1 開始日から起算する日数
Holiday 祝祭日のテーブル(事前にマニュアル作成必須)
判定する日付をDATE(A1,B1,C1)とする

--関数
=IF(OR(WEEKDAY(DATE(A1,B1,C1),2)>=6,
NOT(ISERROR(VLOOKUP(DATE(A1,B1,C1),Holiday,1,FALSE)))),
WORKDAY(DATE(A1,B1,C1),E1,Holiday),
DATE(A1,B1,C1))

WEEKDAY(シリアル値,種類) 曜日を判別するために使います
例)WEEKDAY(DATE(A1,B1,C1),2)
DATE(A1,B1,C1)が月曜日だったら”1”、火曜日だったら”2” 以後、、、

DATE(年,月,日) 指定した日付を表すシリアル値を返します。

ISERROR(テストの対象) セルの内容がエラー値だったら"TRUE"を返す。

VLOOKUP(検索値,範囲,列番号,検索の型) 
テーブルの左端列を検索し、指定した列と同じ行にある値を返します。

WORKDAY(開始日,日数,祭日) 
開始日から起算して日数で指定した日数だけ前あるいは後の日付に対応する
シリアル値を計算します。

これらを組み合わせて、
1行目 もし、判定する日付が土曜日、日曜日
2行目 もしくは祝祭日テーブルに合致する

Yes
3行目 開始日から起算して日数で指定した日数だけ前あるいは後の日付

No
4行目 判定する日付をそのまま返す

ちょっと複雑になってしまったので、メンテナンスは行いにくいです。
翌月の振込み日(たとえば20日)の営業日の判別などに便利です。
場合によってはカレンダーを見たほうが早かったりしますが、、、


  ブログランキング

| | Comments (3) | TrackBack (1)

May 21, 2008

エクセルで自動印刷

エクセルシートにデータを貼り付けると(シートに変更があると)

自動印刷するVBAを作りました。

----------------

Private Sub Worksheet_Change(ByVal Target As Range)

    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
   
Application.EnableEvents = False

    Cells.Select
    Selection.ClearContents
    Range("A1").Select

Application.EnableEvents = True

----------------

考えたフローは、
1.印刷をする
2.イベントのチェックを止める
3.データのクリアー
4.イベントのチェックを始める

イベントのチェックを止めておかないと、”データクリアー”時に
イベントが発生してしまい、ループしてしまいます。
Worksheet_Changeを使用するときにはループしないよう、
Application.EnableEvents = False
処理
Application.EnableEvents = True

とするとよいようです。


  ブログランキング

| | Comments (0) | TrackBack (0)

Mar 28, 2008

ExcelとbatでDisk容量チェック

ExcelのVBAとDOSコマンド"dir"と"find"を駆使して、Windows Serverの
Disk空き容量を確認及び記録するシステムを作りました。

--ファイルPath
D:\disk_check.xls    このエクセルファイルから実行します。
D:\disk_check.bat    各サーバーの空き容量をdisk.txtへ書き出し
D:\disk.txt        出力ファイル

disk_check.bat
-----
@echo off

set USER-NAME=HogeUser
set PASSWD=hogehoge
set DRIVE=z:
set OUTFILE="D:\disk.txt"

set SERVER1=\\hoge_server01\group
set SERVER2=\\hoge_server02\group
set SERVER3=\\hoge_server03\group

if exist %DRIVE% net use /delete %DRIVE%

net use %DRIVE% %SERVER1% %PASSWD% /user:%USER%
dir %DRIVE% | find "バイトの空き領域" > %OUTFILE%
net use /delete %DRIVE%

net use %DRIVE% %SERVER2% %PASSWD% /user:%USER%
dir %DRIVE% | find "バイトの空き領域" >> %OUTFILE%
net use /delete %DRIVE%

net use %DRIVE% %SERVER3% %PASSWD% /user:%USER%
dir %DRIVE% | find "バイトの空き領域" >> %OUTFILE%
net use /delete %DRIVE%

echo. >> %OUTFILE%
time /t >> %OUTFILE%
date /t >> %OUTFILE%

exit
-----


disk_check.xls
-------------------------------
Private Sub CommandButton1_Click()

   Dim myID As Double
   myID = Shell("D:\disk_check.bat", vbNormalFocus)

End Sub
-------------------------------
Private Sub CommandButton2_Click()

    Worksheets("calc").Activate

    Workbooks.OpenText Filename:="D:\disk.txt", Origin:=932, StartRow:=1, _
        DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(11, 1), Array(16, 1) _
        , Array(33, 1), Array(49, 1)), TrailingMinusNumbers:=True
    Windows("disk.txt").Activate
    Worksheets("disk").Range("D1:D4").Select
    Selection.Copy
    Windows("disk_check.xls").Activate
    Range("B4").Select
    ActiveSheet.Paste
    Windows("disk.txt").Activate
    Worksheets("disk").Range("A6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("disk_check.xls").Activate
    Range("B2").Select
    ActiveSheet.Paste
    Windows("disk.txt").Activate
    Worksheets("disk").Range("A7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("disk_check.xls").Activate
    Range("B1").Select
    ActiveSheet.Paste
    Windows("disk.txt").Activate
    ActiveWindow.Close

    Windows("disk_check.xls").Activate
    Worksheets("Record").Activate

    With Worksheets("Record")
        .Range("A65536").End(xlUp).Offset(1, 0).Value = Worksheets("calc").Range("B1")
        .Range("A65536").End(xlUp).Offset(0, 1).Value = Worksheets("calc").Range("B2")
        .Range("A65536").End(xlUp).Offset(0, 2).Value = Worksheets("calc").Range("E4")
        .Range("A65536").End(xlUp).Offset(0, 4).Value = Worksheets("calc").Range("E5")
        .Range("A65536").End(xlUp).Offset(0, 6).Value = Worksheets("calc").Range("E6")
        .Range("A65536").End(xlUp).Offset(0, 8).Value = Worksheets("calc").Range("E7")
    End With

    Worksheets("calc").Activate

End Sub
-------------------------------


  ブログランキング

| | Comments (0) | TrackBack (0)

Sep 04, 2007

エクセルアナライザー

ExcelVBA用「エクセルアナライザー for AdIn」は、ご自分で作成した
重要なファイルのシートの保護及びブックの保護のパスワードを
紛失した場合を想定し、自動モード又は手動モードによりプロテクトの
解析を行うツールです。

--エクセルアナライザー
http://www7a.biglobe.ne.jp/~ShivaSoft/ShivaSoft-index3000/ShivaSoft3002.html
http://www.vector.co.jp/soft/win95/business/se354444.html

*保護されたドキュメントを作者に断り無くパスワード解析するのは、
絶対に止めましょう!


  ブログランキング

| | Comments (0) | TrackBack (0)

May 14, 2007

Excelのセルに設定されたハイパーリンクをまとめて解除する

ハイパーリンクが入力されたセルをまとめて選択し、何らかの演算を
実行すると一度にハイパーリンクを解除することができます。

1.どこか適当なセルを1つ選び、クリップボードへのコピーする
2.ハイパーリンクを解除したい複数のセルを選択
3.右クリックし、[形式を選択して貼り付け]
4.[演算]のオプションから「乗算」を選択し OK

すると複数のセルのハイパーリンクを一度に外すことができます。

--参考ページ
http://www.atmarkit.co.jp/fwin2k/win2ktips/870hyperlink02/hyperlink02.html


  ブログランキング

| | Comments (0) | TrackBack (0)

Jan 03, 2007

スケジュール表作成(1)

営業日を計算させるため、下記のようなシートを作成しました。

--Cell A1
1/1の日付 例)2007/1/1

--Cell B1    (何月かを判定)
=MONTH(A1)

--Cell C1    (土日と月末だったら"1"返す)
=IF(OR(WEEKDAY(A1,2)>=6,A1=EOMONTH(A1,0)),"1","")

--Cell D1    (祝祭日をマニュアルで、"1"を入力)

--Cell E1    (土日、月末、祝祭日でなければ日付を返す)
=IF(AND(C1="",D1=""),A1,"")

--Cell F1    (曜日を判定 第2引数を"2"にすると月曜日が"1")
=WEEKDAY(A1,2)

「Workday_calc.xls」をダウンロード

A1:F1を下のCellへハンドルすると1年間のスケジュールを
作成することができます。

--参考 日本国民の祝・祭日

  1. 元日                1/1
  2. 成人の日          1月第2月曜日
  3. 建国記念の日    2/11
  4. 春分の日          3/21
  5. 昭和の日          4/29
  6. 憲法記念日       5/3
  7. みどりの日        5/4
  8. こどもの日         5/5
  9. 海の日             7月の第3月曜日
  10. 敬老の日          9月の第3月曜日
  11. 秋分の日          9/23
  12. 体育の日          10月の第2月曜日
  13. 文化の日          11/3
  14. 勤労感謝の日    11/23
  15. 天皇誕生日       12/23

* Wikipediaを参照しました。

←クリック一票

| | Comments (0) | TrackBack (0)

Jul 04, 2006

エクセル Index サンプル

関数のひとつである"INDEX"の使用例です。
「Index_test_seet.xls」をダウンロード
Accessの入力フォームに似たものが作れそうです。

=INDEX(配列, 行番号, 列番号)
引数の指定は上記の通り

←クリック一票

| | Comments (0) | TrackBack (0)

Feb 01, 2006

財務計算 PPMT(ピーペイメント)

エクセルにて
返済金額の元金分を計算するためにPPMT関数を使います。

=PPMT(利率,期,期間,現在価値,将来価値,支払い期日)

「利率」が固定で、「期間」で示された回数だけ定額を支払うケースで、
「現在価値」を借りて最終的に「将来価値」の金額になる、「期」
回数目の返済金額のうちの「元金分」の金額を計算する。

例えば
金利:3.6%
返済期間:35年
借入金:3,000万円
期:12回目

=PPMT(0.036/12,12,35*12,30000000)

PMTとPPMT関数を組み合わせると返済金額の
割合(元金返済分:金利分)をグラフ化することができます。

サンプルのワークシートをアップします。
「Zaimu.xls」をダウンロード
青枠のセルの値を入力すると計算されます。

--参考図書
日経PC21 2006年2月号

←クリック一票

| | Comments (0) | TrackBack (0)

Jan 31, 2006

財務計算 PMT (ペイメント)

エクセルにて
ローンを組んだ場合の月々の返済額を
PMT関数を使って計算します

=PMT(利率,期間,現在価値,将来価値,支払期日)

「利率」が固定で、「期間」で示された回数だけ定額を支払うケースで、
「現在価値」が最終的に「将来価値」になるような毎回の支払い金額を
計算します。
「将来価値」が「0」の場合は省略できる。(完済)

下記のパラメータ時の計算式は
実質金利:4.0%
返済期間:35年
借入額:3,000万円

=PMT(0.04/12,35*12,30000000)
利率:実質金利/12 (一月あたりの金利)
期間:貯蓄期間*12 (貯蓄月数)

--参考図書
日経PC21 2006年2月号

←クリック一票

| | Comments (0) | TrackBack (0)

Jan 30, 2006

財務計算 FV (フューチャーバリュー)

エクセルにて
投資の「将来価値」を計算するためにFV関数を使います

=FV(利率,期間,定期支払額,現在価値,支払期日)

「利率」が固定で、「期間」で示された回数だけ「定期支払額」をやり取りする投資で、
「将来価値」の金額に対する現在価値を計算する。
ローンなど「将来価値」が「0」の場合は省略可。

下記のパラメータ時の計算式は
実質金利:1.0%
貯蓄期間:10年
毎月の貯蓄額:5万円

=FV(0.01/12,10*12,50000)
利率:実質金利/12 (一月あたりの金利)
期間:貯蓄期間*12 (貯蓄月数)

ボーナス(夏、冬 年2回)の計算は
=FV(0.01/2,10*2,200000)
ボーナス時 貯蓄金:20万円

併用の場合は上記2式の結果を加算する。

--参考図書
日経PC21 2006年2月号

←クリック一票

| | Comments (0) | TrackBack (0)

Jan 29, 2006

財務計算 PV (プレゼントバリュー)

エクセルにて
借入金を計算するためにPV関数を使います

=PV(利率, 期間, 定期支払額, 将来価値, 支払期日)

「利率」が固定で、「期間」で示された回数だけ「定期支払額」をやり取りする投資で、
「将来価値」の金額に対する現在価値を計算する。
ローンなど「将来価値」が「0」の場合は省略可。「支払期日」は
「期首」の場合は「1」、「期末」の場合は「0」または省略。

下記のパラメータ時の計算式は
実質金利:4.0%
返済期間:30年
定期支払額:10万円

=PV(0.04/12, 30*12, 100000)
利率:実質金利/12 (一月あたりの金利)
期間:返済期間*12 (支払い月数)

ボーナス(夏、冬 年2回)の計算は
=PV(0.04/2, 30*2, 200000)
ボーナス時 支払金:20万円

併用の場合は上記2式の結果を加算する。

--参考図書
日経PC21 2006年2月号

←クリック一票

| | Comments (0) | TrackBack (0)

Dec 06, 2004

Excel 1行置きセルの背景替え

メニュー [書式] - [条件付書式]
=MOD(ROW(),2)
上記を条件とし背景色を変更する。

| | Comments (1) | TrackBack (0)