シリアル値
エクセルで経過日数を求めるには日付同士を単純に引き算すれば求められます。
エクセルではシリアル値という値を使って日付を管理しているからです。シリアル値は1900年1月1日を「1」、2日を「2」として延々と日数を数えた値です。
例えば、2001年2月18日から2004年1月1日までの経過日数を求めてみます。
2001年2月18日のシリアル値は「36940」で
2004年1月1日のシリアル値は「37987」ですので、引き算して
37987-36940=1047(日)となります。
なお1900年は閏年ではないのですが、Excelでは閏年として設計されていますので、1900年2月29日が存在する前提で計算されることに注意する必要があります。
JavaScriptにおける日付は1970年1月1日午前0時からの経過ミリ秒で管理されています。
したがって、Excelと同様、日付同士を引き算して、24*60*60*1000で割れば経過日数が求められます。
修正ユリウス日
困るのはExcelでは1900年より前の場合、JavaScriptでは1970年より前の場合です。それぞれのシステムの中では経過日数を計算することができません。
ここで使われるのがユリウス日というものです。これは紀元前4713年1月1日正午からの経過日数を表します。ただしこれを使うととても数値が大きくなるので現代では修正したものを使うのが一般的です。これを修正ユリウス日(MJDと略されます)と言います。1858年11月18日では修正ユリウス日は「1」になります。
この修正ユリウス日には公式があります。
VBA、JavaScriptで書いてみると次の通りです。
VBA
Function MJD(y, m, d)
If m < 3 Then
m = m + 12
y = y - 1
End If
MJD = Int(365.25 * y) + Int(y / 400) - Int(y / 100) + Int(30.59 * (m - 2)) + d - 678912
End Function
JavaScript
function mjd(y,m,d){
if(m<3){
m+=12;
y--;
}
return(Math.floor(365.25*y)+Math.floor(y/400)-Math.floor(y/100)+Math.floor(30.59*(m-2))+d-678912);
}
詳しい説明は省きますが、これを使うとExcelやJavaScriptの制限なしに経過日数を計算することができます。
Excelのヘルプ
Excel2007のヘルプにこんなのがあります。
ユリウス日は、現在の年と 1 月 1 日からの通算日数とを組み合わせて日付を表示するときに使用される場合があります。たとえば、2007 年 1 月 1 日は 2007001 と表され、2007 年 12 月 31 日は 2007365 と表されます。この形式はユリウス暦に基づいているわけではないことに注意してください。
Excelでは「2010年3月10日」は「2010069」をユリウス日と呼ぶそうです。何のために使うのでしょうか。わざわざ説明があるということは使う人がいるのでしょう。
また次のようなことも書かれています。
これとは別に、天文学上で一般的に使用されるユリウス暦の日付もあります。これは、紀元前 4713 年 1 月 1 日を起算点とした通日で表す日付システムです。
こちらの方が一般的だと思います。
まとめ
ユリウス日(ユリウス通日)と修正ユリウス日とExcelのシリアル値の関係をまとめておきます。
- ユリウス日=修正ユリウス日+2400000.5
- ユリウス日=シリアル値+2415018.5
- 修正ユリウス日=シリアル値+15018
iPhoneのAppで久しぶりに楽しいゲームを見つけました。
Strimko Lite
数独のようなゲームです。
ルールは三つ。
- 縦に同じ数字は入らない。
- 横に同じ数字は入らない。
- 線で結ばれたグループに同じ数字は入らない。
この手のパズルの面白さは一箇所が解けるとパラパラと別の部分が解ける部分にあると思っていますが、このゲームにはそれがあって気持ちがいいです。

妻と娘の会話についていけないのでこんなリストを作ってみました。
TOKIO
- 城島茂 (1970年11月17日生、39歳)
- 山口達也 (1972年1月10日生、38歳)
- 国分太一 (1974年9月2日生、35歳)
- 松岡昌宏 (1977年1月11日生、33歳)
- 長瀬智也 (1978年11月7日生、31歳)
SMAP
- 中居正広 (1972年8月18日生、37歳)
- 木村拓哉 (1972年11月13日生、37歳)
- 稲垣吾郎 (1973年12月8日生、36歳)
- 草彅剛 (1974年7月9日生、35歳)
- 香取慎吾 (1977年1月31日生、33歳)
嵐
- 大野智 (1980年11月26日生、29歳)
- 櫻井翔 (1981年1月25日生、29歳)
- 相葉雅紀 (1982年12月24日生、27歳)
- 二宮和也 (1983年6月17日生、26歳)
- 松本潤 (1983年8月30日生、26歳)
ブックマークレットで、取得した何らかの結果を表示させるにはアラートまたはプロンプトを使う。
javascript:(function(){alert(’sample’);})()
javascript:(function(){a=window.prompt(‘title’,’sample’);})()
promptを使った場合は、IEならば、文字列がテキストボックスに出力され、選択状態になるので、コピーが簡単である。
ExcelのVBAでテキストファイルを出力する方法を考える。
次はアクティブシートのセルA1からA10の内容を「出力結果.txt」というテキストファイルに出力する場合のコードである。
この例ではセルの中身を単純にそのまま書き出しているが、実際には何らかの変換を施して使うのであろう。
Sub テキストとして出力()
fnsave = “出力結果.txt”
numff = FreeFile
Open fnsave For Output As #numff
For i = 1 To 10
temp = Cells(i, 1)
Print #numff, temp
Next i
Close #numff
End Sub
次のコードは出力する内容を変数にため込み、一気に書き込む方法である。
セルの順番を入れ替えたり、セル同士を結合したり、上の例より柔軟に処理ができるかもしれない。
ただし、上と違って、自動的に改行が入らないことに注意する。もし改行を入れるならば「temp = temp & Cells(i, 1)」のところを「temp = temp & Cells(i, 1) & Chr(13)」と書くとよい。
Sub テキストとして出力2()
fnsave = “出力結果.txt”
numff = FreeFile
Open fnsave For Output As #numff
temp = “”
For i = 1 To 10
temp = temp & Cells(i, 1)
Next i
Print #numff, temp
Close #numff
End Sub
ファイル名を変えたり、保存場所を変えたりしたい場合には、1行目の代わりに次のように書くとよい。
fnsave = Application.GetSaveAsFilename(“出力結果.txt”, “テキスト(*.txt),*.txt”)
If fnsave = False Then Exit Sub
ブックマークレットを使って特定のページを開く場合は次のような方法があります。
同じウィンドウで開く
javascript:(function(){document.location.href=URL})()
別のウィンドウで開く
javascript:(function(){window.open(URL)})()
マイクロソフトWord2007で表紙の次からページ番号を付ける方法は次の通り。
- 挿入-ページ番号-ページの下部-番号のみ。※既にページ番号を挿入してある時は、挿入-フッター-フッターの編集。
- このとき、ヘッダー/フッターツールが開く。
- ページ番号-ページ番号の書式設定-開始番号に「0」を入力。これで2ページ目に「1」と表示される。
- オプションの先頭ページのみ別指定にチェック。これで表紙のページ番号が消える。
ヘッダー/フッターツールを開くのがポイント。これが最初の状態では開かない。フッターの編集をしようとすると開く。印刷レイアウトで表示されている場合はフッターのあたりをダブルクリックしてもよい。
温暖化が叫ばれているのに、昔の暦をそのまま、今も使うのはおかしいと思って、調べてみました。
暦で最も寒い時期とされるのが大寒。2010年ならば1月20日です。
逆に最も暑い時期とされるのが大暑。7月22日です。
つまり暦では最も寒いのは1月、暑いのは7月。
では実際はどうか。
気象庁のサイトに日本各地の観測開始からの毎月のデータが載せられています。
次は東京の年月別の値の載ったページ。
気象庁|観測開始からの毎月の値(東京)
そして1900年代、1950年代、2000年代とそれぞれ10年ずつの平均をとってみます。
| 年 |
1900 |
1950 |
2009 |
| 1月 |
3.0 |
4.3 |
6.3 |
| 2月 |
3.4 |
5.0 |
7.0 |
| 3月 |
6.6 |
8.3 |
10.0 |
| 4月 |
12.4 |
13.8 |
15.1 |
| 5月 |
16.5 |
18.0 |
19.1 |
| 6月 |
20.1 |
21.0 |
22.7 |
| 7月 |
23.1 |
24.9 |
26.4 |
| 8月 |
24.8 |
26.3 |
27.4 |
| 9月 |
21.5 |
22.7 |
24.2 |
| 10月 |
15.9 |
16.9 |
18.8 |
| 11月 |
10.1 |
11.6 |
13.6 |
| 12月 |
5.3 |
6.8 |
8.7 |

これを見ると、100年前に比べると、どの月も約3度、気温が上昇しています。
一方、月別の変動はほとんど同じで、昔も今も最も寒いのは1月、最も暑いのは8月となります。
暦と比べると、大寒は合っていますが、大暑はずれています。もっとも、これは小学校で習ったとおりなのですが。
この程度ならば昔の暦がおかしいというのは言い過ぎかもしれません。
暦は太陽の動きから作られたもので、実際の気温を元にしてはいません。
夏至や冬至、春分や秋分は太陽の動きから割り出されているので、今も昔も変わりません。
しかし、その他の暦(二十四節気)は単純に等分したものなので、実際とずれるのは当然です。
例えば啓蟄(虫が穴から出てくる)や霜降(霜が降り始める)は昔と今では気温が違うのだから、ずれるでしょう。
啓蟄は3月ですが、100年前の3月の気温は現在の1月の最も寒い時期に相当します。
次のコードはマイクロソフトWordのマクロ(VBA)で文書内のすべての段落のインデントを10ポイントにする例である。
Sub インデントテスト()
For i = 1 To ActiveDocument.Paragraphs.Count
a = ActiveDocument.Paragraphs(i)
ActiveDocument.Paragraphs(i).Range.Select
With Selection.ParagraphFormat
.LeftIndent = 10
.FirstLineIndent = 0
End With
Next i
End Sub
段落の数を数え、それぞれの段落についてインデントを設定する。
LeftIndentにポイント数を入れ、左インデントを設定する。
FirstLineIndentは最初の行の左インデントを設定するためのもので、字下げやぶら下げをしない場合は「0」とする。
字下げやぶら下げをする場合は段落ダイアログを使う場合と違う挙動をするので注意を要する。
字下げをする場合は
LeftIndent = 10
FirstLineIndent = 10
とする。この場合、段落全体のインデントは10ポイントで、最初の行のインデントは20ポイントになる。
□□日本国民は、正当に選挙された国会におけ
□る代表者を通じて行動し、われらとわれらの
□子孫のために、
ぶら下げをする場合は
LeftIndent = 10
FirstLineIndent = -10
とする。この場合、最初の行のインデントは0ポイントで、二行目以降のインデントは10ポイントとなる。
つまり「LeftIndent」は二行目以降のインデントを表し、「FirstLineIndent」は最初の行のインデントと二行目以降とのインデントの差を表す。ぶら下げをする場合は、最初の行を「字上げ」すると考えると分かりやすい。
日本国民は、正当に選挙された国会における代
□表者を通じて行動し、われらとわれらの子孫
□のために、
実は、これだけならば、特にマクロを使う必要はない。
コードの3行目の「a = ActiveDocument.Paragraphs(i)」の部分を使えば、文字列の内容を判断してインデントの処理を振り分ける、というような使い方ができる。
なお、ここでは、インデントを直にセットする方法を書いたが、スタイルを使う方法もある。
マイクロソフトのWordでは、段落は「改行マークの次から改行マークまで」を指します。これをマクロ(VBA)で取得する基本的な方法は次の通りです。
なお、対象は現在の文書です。
| 内容 |
コード |
| 最初の段落 |
ActiveDocument.Paragraphs(1) |
| 最初の段落の範囲 |
ActiveDocument.Paragraphs(1).Range |
| 最初の段落の範囲の文字列 |
ActiveDocument.Paragraphs(1).Range.Text |
| 最初の段落の範囲の最初の文字 |
ActiveDocument.Paragraphs(1).Range.Characters(1) |
| 段落の数 |
ActiveDocument.Paragraphs.Count |
最近のコメント