dポイントプレゼントキャンペーン実施中!

 エクセルに興味を持っています。。
既成(だれか先輩?)の表では
     A        B
1  平成13年    庚辰

2  大正6年     丁巳

3  昭和24年    【=えと】


    A列の年号はシリアル値で入力されています。
      右側セルに【=えと】と表示すると干支が表示されます。
    BVAであることが分かりました。
    どんな式が隠されているのか興味があります。

 どなたか教えてください。  m(__)m
        

A 回答 (7件)

平成13年は「庚辰」ではなく「辛巳」では?



前の部分(庚や丁)は十干と言い10年周期、後半(辰や巳)は馴染み深い十二支で12年周期です。
手抜き版ですが作って見ました(=えと(A1) の様に使います)。

Function えと(target As Range) As String
  Dim jikkan, jyuunisi, targetY
  targetY = Year(target)
  jikkan = Array("庚", "辛", "壬", "葵", "甲", "乙", "丙", "丁", "戊", "己")
  jyuunisi = Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥")
  えと = jikkan(targetY Mod 10) & jyuunisi((targetY - 4) Mod 12)
End Function

この回答への補足

 ありがとうございます。
 提示いただいた式を使って
  使用法を試行錯誤しています。

補足日時:2011/11/11 12:30
    • good
    • 0
この回答へのお礼

ありがとうございます
>平成13年は「庚辰」ではなく「辛巳」では?
 <(_ _)> そうですね…。
        がんばります。

お礼日時:2011/11/12 02:33

こんばんは!


以前、関数で同じような質問に回答をした記憶があるのですが・・・
今回はVBAをご希望だというコトなので、一例です。

方法はいくつかあると思います。
(1)1900年からの干支をすべて表にしておいて、それを表示させる!
(2)すべての表を作成するのは大変ですので、1900年が「庚子(かのえね)」というコトを利用して12行程度の表だけを作成しておく。

(1)・(2)ともVLOOKUP関数で対応できます。

↓の画像のようにSheet2の干支の表を作成しておきます。
「五干(ごかん)」の方は「庚(かのえ)」から、「十二支(じゅうにし)」の方は「子(ね)」から始まる表です。

これを利用してSheet1のB列セルをダブルクリックするとA列年の「干支」が表示されるようにしてみました。

画像と同じ配置でSheet2に表を作成しておきます。

画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
↓のコードをコピー&ペーストしてB列セルをダブルクリックしてみてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim i As Long
Dim ws As Worksheet
Set ws = Worksheets("sheet2")
If Intersect(Target, Columns(2)) Is Nothing Then Exit Sub
i = Target.Row
If Cells(i, 1) <> "" Then
Target = WorksheetFunction.VLookup((Year(Cells(i, 1)) - 1900) Mod 10, _
ws.Range("A2:B11"), 2, False) & _
WorksheetFunction.VLookup((Year(Cells(i, 1)) - 1900) Mod 12, _
ws.Range("A2:D13"), 4, False)
End If
Cancel = True
End Sub

※ わざわざVBAにしなくても関数で表示した方が簡単です。
この程度で参考になるでしょうか?m(_ _)m
「Excel 干支を表示する VBA?」の回答画像7
    • good
    • 0
この回答へのお礼

ありがとうございます。 
>わざわざVBAにしなくても関数で表示した方が簡単です…

まだ、上手くできません。
でも、、BVAに挑戦したいのです。 <m(__)m>

お礼日時:2011/12/18 20:23

>No.1さんのコード、"癸"(みずのと)が"葵"(あおい)になっていますよ。



あれ?本当だ。はずかしーーーー
フォローありがとうございます。
    • good
    • 0
この回答へのお礼

母の生家の紋が葵なので…

連係プレー有難うございます。

お礼日時:2011/11/12 02:16

No.2、3です。


一つ言い忘れました。

No.1さんのコード、"癸"(みずのと)が"葵"(あおい)になっていますよ。
    • good
    • 0
この回答へのお礼

母の生家の紋が葵なので…

連係プレー有難うございます。

お礼日時:2011/11/12 02:15

ANo.1です。



>  提示いただいた式を使って
>   使用法を試行錯誤しています。

試行錯誤って……もしかしてExcel触りたてでマクロを何処に書くかも判らないって話しでしょうか?
もし、そうでしたらリンク先を参考にVBEを起動して「標準モジュール」を挿入し、そこに先の回答で提示したコードをコピーしてください。
その後でExcelシートに戻り、A1セルに適当な日付を入れ、別なセルに =えと(A1) と、入れてみてください。

参考URL:http://officetanaka.net/excel/vba/beginner/10.htm
    • good
    • 0
この回答へのお礼

ありがとうございます。
ロータス3.1からExcelは2000からです。
 上り坂・下り坂で苦労しました。
   今回は一番難しい『 まさかのド初心者 』です。

マクロの知識は有りません。  (^_^;)
「NEC6001マークII搭載のNベーシックで表を作り、並び替えを行った知識がマクロに似ているかな」と言うくらいで、ド素人です。
 自分の作業をマクロに記録して、それをボタンに記載して作業を早めるだけで、まれにバグを拾ったり、二つのマクロを連結したり、色や形を試行錯誤で、所期の目的に近づけることができるだけです。 <(_ _)>

お礼日時:2011/11/11 20:57

> 今回は、VBAを学びたいのです。



No.2にも書きましたが、基本的な考え方は関数でもVBAでも同じです。
No.2の関数で処理した内容をVBAで書くと以下のようになります。

Function えと(Target As Range) As String
 Dim 西暦年 As Integer
 Const 十干 = "庚辛壬癸甲乙丙丁戊己"
 Const 十二支 = "子丑寅卯辰巳午未申酉戌亥"
 西暦年 = Year(IIf(Target.Value <= 60, Target.Value + 1, Target.Value))
 えと = Mid(十干, (西暦年 Mod 10) + 1, 1) & Mid(十二支, ((西暦年 - 4) Mod 12) + 1, 1)
End Function

厳密には、関数の場合と一つだけ違いがあります。
ワークシートとVBAでは1900/3/1より前の日付に1日のズレがあります。
本来は閏年ではない1900年を閏年として扱うExcelの仕様によるものです。
シリアル値の60は、ワークシート上では1900/2/29として扱われるのに対し
VBAでは、これが正しく1900/2/28として扱われるため、ズレが起きます。
ですので、対象セルの値がシリアル値の60以下の場合に+1しています。
実際は、これで影響があるのは1900/1/1だけなんですけど…
    • good
    • 0
この回答へのお礼

ありがとうございます。 
 現在試行中です。

お礼日時:2011/12/18 20:26

単純に年の干支だけでいいなら


・十干が「庚辛壬癸甲乙丙丁戊己」が10年サイクル
・十二支が「子丑寅卯辰巳午未申酉戌亥」が12年サイクル
なので、VBAを使わなくても

=MID("庚辛壬癸甲乙丙丁戊己",MOD(YEAR(A1),10)+1,1)&MID("子丑寅卯辰巳午未申酉戌亥",MOD(YEAR(A1)-4,12)+1,1)

このような式で出せると思います。

VBAでやるにしても、考え方は同じです。
庚辛壬癸甲乙丙丁戊己の10文字から、西暦年を10で割った余りを元に1文字を抽出する。
同じく、子丑寅卯辰巳午未申酉戌亥の12文字から、西暦年を12で割った余りを元に1文字を抽出する。
この二つを繋げる。

※西暦1900年は「庚子」なので、微調整は必要です。
(上記の関数式では、十二支の方で-4をしているのがそれです)
    • good
    • 0
この回答へのお礼

ありがとうございます。 
>VBAを使わなくても…
 今回は、VBAを学びたいのです。

お礼日時:2011/11/11 12:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!