[[20090619072025]] 『改題2 Sheet1の氏名、生年、没年 等身関係等をS』(はんにゃ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『改題2 Sheet1の氏名、生年、没年 等身関係等をSheet2の年軸表に記載』(はんにゃ)

 今シートBに データとして、A氏名、B生誕日(西暦か和暦かいずれか)、C男女別、D他の氏名との関係 などがある場合、
 もう一つシートAで、A列は和暦年号、B列は年、C、D以下 多数の列あり、右端IVに西暦年を一行毎順番に記載して(一種の年表の如く)あるシートに、
 シートBのB生誕日のデータによって、シートA上の所定の年の行上に、男女区別の三角記号を記載する方法があるでしょうか?
 また その横にA氏名を記載したい。
 なお、どの列かは Dの内容で決めるのすが 当面は手動で配置します。
 
 この質問する場合 サンプルのエクセルファイルを添付する方法があるでしょうか?


 >サンプルのエクセルファイルを添付する方法
 基本的には、どこかへファイルを載せて
 URLを載せておくと言った感じになります。

 面倒ですが、小さいサンプルで充分な物をエクセルで作成し
 こちらへ貼り付けても、有る程度分かります。
 シートB	[A]	[B]	[C]	[D]		
[1]	氏名	誕生日	性別	関係		
[2]						
[3]						
[4]						
[5]						
[6]						

 シートA	[A]	[B]	[C]	[D]	・・・・	[IV]
[1]	年号	年				西暦年
[2]						
[3]						
[4]						
[5]						
[6]						

 その際、文字数に依っては レイアウトが崩れるかもしれませんが
 Tab区切りになっている為ですので、そのまま投稿してもらうのが良いと思います。

 どんなデータがあって、「男女区別の三角記号」もなんの事か分からないですが
 「その横にA氏名を記載したい」って事はシートBの1行がシートAの1行と対応?
 そうでないなら、何をするにしても難易度は上がりそうですね。

 (HANA)

 ありがとうございます
 シートB

        [A]	[B]	[C]	[D]		
[1]	氏名	誕生日	性別	関係		
[2]    Na.Sho 1940.12.22 M Na.Masaの父						
[3]    [Wa]Toku 	 F Na.Masaの母					
[4]    Na.Masa 1960.10.01 F 					
[5]						
[6]						
 シートA	
     [A] [B]	[C]	[D]	・・・・[IV]
[1] 年号 年			     	西暦年
[2] 
[3]						
[4]						
[5]		|				
[6]昭和	15	△Na.Sho===[Wa]Toku	1940	
[7]		|	|			
[8]           |
[.]			|			
[.]			|			
[26]昭和35		▼ Na.Masa      1960	

 の如く シートBのデータから シートAの年表を作りたい。
 そうです。シートBのある行はシートAのある行と対応します。
 但し、シートAのその行にはシートBの他の行のデータが 同じ誕生年であれば
 置かれる可能性がある。
 もちろん その場合 異なる列に置かれる(記載)される。
=== は婚姻関係を表すが 当面手操作で記載し、最終的には関係ータから自動判断記載したい。
よろしく ご助言願います。
 hannya


 エクセルが使える状態でしたら
 エクセルで各セルに配置した物を作成し
 こちらへ貼り付けて下さい。
 (その際、上の投稿はそのままで
  下に載せて下さい。)

 但し、お伺いしても良い案が思いつくとは限りませんので
 その辺りはご理解の上、投稿していただければと思います。

 (HANA)

 1家族程度なら、こんな感じで出来ると思いますが。
	[A]	[B]	[C]	[D]	[E]	[F]	[G]	[H]	[I]	[J]	[K]	[L]	[M]	[N]	[O]	[P]	[Q]
[1]	氏名	誕生日	性別	関係	SA1	SA2		年号	年		父		母		子		西暦
[2]	Na.Sho	S15.12.22	M	父	1940	1940父		昭和	11								1936
[3]	[Wa]Toku		F	母	1940	1940母											1937
[4]	Na.Sam	S33.3.10	M	子	1958	1958子											1938
[5]	Na.Masa	S35.10.1	F	子	1960	1960子											1939
[6]								昭和	15	△	Na.Sho	====	[Wa]Toku				1940
[7]												|					1941
[8]												|					1942
[9]												|					1943
[10]												|					1944
[11]												|					1945
[12]												|					1946
[13]												|					1947
[14]												|					1948
[15]												|					1949
[16]												|					1950
[17]												|					1951
[18]												|					1952
[19]												|					1953
[20]												|					1954
[21]												|					1955
[22]												|					1956
[23]												|					1957
[24]												|	−−−−	△	Na.Sam		1958
[25]												|					1959
[26]								昭和	35			|	−−−−		Na.Masa		1960
[27]																	1961
[28]																	1962
[29]																	1963
[30]																	1964
[31]																	1965
[32]																	1966
[33]																	1967
[34]																	1968
 B列はシリアル値で入力された状態にします。
 (セルの表示に関わらず数式バーに 1940/12/22  の様に表示された状態。)

 E2セルに
=IF(A2="","",YEAR(IF(D2="母",SUMIF($D$1:$D$10,"父",$B$1:$B$10),B2)))
 F2セルに
=IF(A2="","",E2&D2)
 J2セルに
=IF(K2="","","△")
 K2セルに
=IF(ISNA(MATCH($Q2&"父",$F$1:$F$10,0)),"",INDEX($A$1:$A$10,MATCH($Q2&"父",$F$1:$F$10,0)))
 L2セルに
=IF(AND(K2<>"",M2<>""),"====",IF(COUNTIF($L$1:L1,"===="),IF(COUNTIF($M$1:M1,"−−−−")<COUNTIF($D$1:$D$10,"子"),"|",""),""))
 M2セルに
=IF(ISNA(MATCH($Q2&"母",$F$1:$F$10,0)),IF(ISNA(MATCH($Q2&"子",$F$1:$F$10,0)),"","−−−−"),INDEX($A$1:$A$10,MATCH($Q2&"母",$F$1:$F$10,0)))
 N2セルに
=IF(ISNA(MATCH($Q2&"子",$F$1:$F$10,0)),"",IF(INDEX($C$1:$C$10,MATCH($Q2&"子",$F$1:$F$10,0))="M","△",""))
 O2セルに
=IF(ISNA(MATCH($Q2&"子",$F$1:$F$10,0)),"",INDEX($A$1:$A$10,MATCH($Q2&"子",$F$1:$F$10,0)))

 (HANA)

 書き忘れてましたが
 双子ちゃん以上は表示出来ません。

 一つのセルに二つ名前を入れて下さい。
 性別が違うと、これまた問題ですが。。。.

 まぁ、手直しせずに使える程に完璧な物ではないので
 有る程度配置して、別の場所へ値貼り付けした後で
 好きに変更してもらうのが良いと思います。

 (HANA)

 大変ありがとうございました。
 通常の(Excelでもある)系図と異なり、年表系図とでも言うものです。
 一家族ではないので 初めからシートを別にしたいと思います。
 エクセルで各セルに配置した物を作成して 領域指定して こちらへ貼り付けようとするのですが
 行番 列名などがコピーされません。
 とりあえず、以下のようにしたいのですが どのように記述するのでしょうか?

 シート2 (データは全部の欄が埋まらないでも可能にしたい)
 A氏名	B誕生日 	C性別	D関係1親子
 Na.Sho  1940/12/22	M	Na.Masaの父 
 [Wa]Toku 		F 	Na.Masaの母 
 Na.Masa 1960/10/1	F	
 Na.Mao  1961/10/1	M	Na.Shoの子

 Wa Toku 1942/10/9	F	Wa.Miの子
 Wa.Mi	?	        M	

 シート1 シート2より可能な限り自動生成したい。
 あらかじめ決まっているのは年表部分です。同じ両親をもつ子は一つの線上で表す。
 この線をどこの列にするかは手動できめないといけないでしょう。
 その両親は===で表す。年表の氏名とその男女の記号は生まれ年を表す。生まれ日は氏名の上か下に記載。
	9				△Wa.Mi===		1934
	10					|		1935
	11					|		1936
	12					|		1937
昭和	13		|			|		1938
 	14		|			|		1939
	15		△Na.Sho===[Wa]Toku 	|		1940
	16		|1940.12.22	 	|	        1941
	17		|	|		▼ Wa Toku	1942
	18		|	|		|1942.10.9	1943
	19			|		|		1944
	20			|		|		1945
	21			|		|		1946
	22			|		|		1947
	23			|		|		1948
	24			|		|		1949
	25			|		|		1950
	26			|				1951
	27			|				1952
	28			|				1953
	29			|				1954
	30			|				1955
	31			|				1956
	32			|				1957
	33			|				1958
	34			▼ Na.Masa 			1959
	35			|1960.10.01			1960
	36			△ Na.Masa 			1961
	37			|1961.10.01 			1962


 先に載せた方法で、基本的には出来そうですが
 ご覧頂けていますか?

 H列以降を別シートにするかどうかはご自由にどうぞ。
 数式の参照にシート名を含むことになるので
 数式が長くなるだけです。

 上記サンプルでは、
 A1:F10 と J:O を一家族にしています。
 もう一家族増やしたければ
 A11:F20 と P〜 の様にして頂ければ良いと思います。

 「一家族」と言う言葉が悪かったと思いますが
 これは、父・母・子 のまとまりの意味で使用しました。
 祖父・祖母や、子の連れ合い、孫 等が含まれない
 と言う意味です。
 ですから、「二家族目」はA:F列は下方向へ
 J列以降は、右方向へ増やして頂ければと思います。

 (HANA)

 ありがとうございます 
 Excelを使うことも十分でなく 拝見しましたが 質問させてください

 1:E、F列”SA”は なんの略号でしょうか 参考までのおしえてください 追加の意味かな?
 2:E列数値は誕生日和暦を西暦に単に置き換えたものでしょうか?
 [Wa]Toku の 誕生日空欄で 
=IF(A3="","",YEAR(IF(E3="母",SUMIF($E$1:$E$10,"父",$B$1:$B$10),B3)))
 が 1900になるのですが どうしてでしょうか?
 
 3:F列は単にD+E値でしょうか 
  その後の見方がなかなか解読できなくて F値のどういう役割をするのでしょうか?

 子の記号を系列線の上と同列Lに置くにはどうするのでしょうか?

 こまかなことをたずねて すみませんがよろしく お願いします

  


 >1:E、F列”SA”は なんの略号でしょうか

 「SA」は、仰るように「追加しました」が分かりやすいように
 勝手に付けた項目名です。
 一応「作業列」の頭を取って「SA」にしました。

 >2:E列数値は誕生日和暦を西暦に単に置き換えたものでしょうか?

 今回は年でデータを振り分けるのでこの情報が重要です。
 基本的には、誕生日の年を取りだした物ですが
 「母」は、父の誕生年に一緒にするのでSA1は
 父の誕生年と同じにしておく必要が有ります。

 その後の書き込みを見ると「?」の方も居られる様ですので
 SA1用の式を書きましたが、手作業で入力してもらうのが
 良いのかもしれません。

 > [Wa]Toku の 誕生日空欄で・・・
 まずは、私が載せたサンプルデータと同じデータを使って
 構成を確認してもらうのが良いのですが

 >SUMIF($E$1:$E$10,"父",$B$1:$B$10)
 そちらで使用中のサンプルデータには
 E1:E10の中に「父」と言う文字が無いのではないかと思います。
 (セルの値は Na.Masaの父 ではなく 父 で有る必要があります。)

 或いは、$B$1:$B$10が 文字列で入力されている。

 結果が得られる数式が出来ないなら
 A列の名前を表示したい年を入力して下さい。
 どの様なイレギュラーが有るか分からない状態で
 それを含んだ数式をこちらで作るのは難しいですので。

 >3:F列は単にD+E値でしょうか
 そうです。

 上で載せたサンプルシートは
 K列を父を表示する列と決め、「Q列の年&父」と言う文字を
 SA2から探し、見つかったA列の名前をK列に表示しています。

 同様に、今回は M列を母、O列を子と決めて
 列を分ける事で、数式が簡単で済むように工夫をしています。

 >子の記号を系列線の上と同列Lに置くにはどうするのでしょうか?
 性別のマークの事でしょうか?
 L2セルの数式の"|"が返される部分に
 IF関数を更に追加する事に成ると思います。

 簡単に考えると
 N2セルの式の最初の""を"|"に変えて
 L2セルの"|"部分に入れてしまえば良さそうに思います。
=IF(AND(K2<>"",M2<>""),"====",IF(COUNTIF($L$1:L1,"===="),
IF(COUNTIF($M$1:M1,"−−−−")<COUNTIF($D$1:$D$10,"子"),IF(ISNA(MATCH($Q2&"子",$F$1:$F$10,0)),"|",
IF(INDEX($C$1:$C$10,MATCH($Q2&"子",$F$1:$F$10,0))="M","△","▼")),""),""))
 ↑テキトウに改行しましたが、3行で一つの式です。
  確認は取っていないので、動く保証は有りませんが。。。

 (HANA)

 コードを作成してみました。
 データの整合性のチェックを含め
 エラー処理はしていませんので
 御使用に成られる場合は、ルールに則ったデータを
 用意しておいてもらう必要が有ります。

 一覧表が有るシートをSheet1
 年表系図を出すシートをSheet2
 にしています。

 Sheet1は、1行目に見出し 2行目からデータを入れて下さい。
 データは1家族毎にまとめ 家族と家族の間には
 1行以上の空白を入れてください。

 また、父・母 は、D列に明記が必要です。
 御提示のサンプルの2番目の家族は

 Wa Toku 1942/10/9	F	Wa.Miの子
 Wa.Mi	?	        M	

 と成って居ますので、
 D列に何も入力が有りませんが
 Wa.Miが「父」で有ることは分かります。
 しかし、コード内ではその様なチェックはしていませんので
 Wa.Miがその家族での父に成るのならD列に「父」
 と言う文字を含む文字を入力しておく必要があります。

 これがない場合は、子と見なします。
 母の場合も同様です。

 Sheet2はIV列の1行目から年を入力して下さい。
 その後、一行を1年とします。

 Sheet2は一家族に、4列を使用します。
 二家族目は、一列空けて 次の列から書き出します。

 一家族の子を見たとき、同年で表示できるのは一人です。

 また、子が2年連続した場合は、下側の子の生年月日を
 上側へ表示しますが、3年以上連続した場合は
 2人目以降は下側へ表示します。

 あくまでも「完璧な物」ではありませんので
 必要な所は書き出した後で、手直しをしてください。

 以下がコードです。
 (作業用の列は不要です。)

 '------
Sub Hannnya()
    Dim tbl1, tbl2, x
    Dim xc As Long, xr As Long
    Dim i As Long, ii As Long
    Dim fyi As Long, yi As Long, cyi As Long, mcy As Long, scy As Long, my
    Dim mn As String, sb As String
With Sheets("Sheet1")
    tbl1 = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 4)
End With
With Sheets("Sheet2")
    tbl2 = .Range("IV1").Resize(.Range("IV" & Rows.Count).End(xlUp).Row, 1)
    ReDim x(1 To UBound(tbl2, 1) + 1, 1 To Columns.Count)
    xc = 2
    For i = 2 To UBound(tbl1, 1)
        If tbl1(i, 1) = "" Then
            If tbl1(i - 1, 1) <> "" Then
                If fyi <> 0 Then
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = x(xr, xc) & "===" & mn
                    If x(xr + 1, xc + 1) = "?" Or x(xr + 1, xc + 1) = "?" Then
                        x(xr + 1, xc + 2) = "|"
                    End If
                ElseIf my = "?" Or my = "?" Then
                    fyi = tbl2(1, 1)
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△    ===" & mn
                    x(xr + 1, xc + 1) = "      " & my
                ElseIf my <> "" Then
                    fyi = Year(my)
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△    ===" & mn
                    x(xr + 1, xc + 1) = "     " & Format(my, "yyyy.mm.dd")
                ElseIf my = "" Then
                    fyi = tbl2(1, 1)
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△    ==="
                    x(xr + 1, xc + 2) = "|"
                End If

                If xr > 1 Then
                    x(xr - 1, xc) = "|"
                End If
                If xr <> 0 Then
                    x(xr + 1, xc) = "|"
                    x(xr + 2, xc) = "|"
                End If

                If xr < mcy Then
                    For ii = xr + 2 To mcy + 1
                        If x(ii, xc + 2) = "" Then
                            x(ii, xc + 2) = "|"
                        End If
                    Next
                End If

                xc = xc + 5
                fyi = 0: cyi = 0
                my = "": mn = ""
                scy = UBound(tbl2, 1) + 1: mcy = 0
            End If
        Else
            If tbl1(i, 4) Like "*父*" Then
                If tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "" Then
                    fyi = tbl2(1, 1)
                Else
                    fyi = Year(tbl1(i, 2))
                End If
                xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△" & tbl1(i, 1)
                    x(xr + 1, xc + 1) = Format(tbl1(i, 2), "yyyy.mm.dd")
            ElseIf tbl1(i, 4) Like "*母*" Then
                mn = tbl1(i, 1)
                my = tbl1(i, 2)
            Else
                If tbl1(i, 2) = "" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Then
                    MsgBox "誕生日が未入力です。" & vbLf & tbl1(i, 1)
                Else
                    cyi = Year(tbl1(i, 2))
                    xr = cyi - tbl2(1, 1) + 1
                    If tbl1(i, 3) = "M" Then
                        sb = "△"
                    ElseIf tbl1(i, 3) = "F" Then
                        sb = "▼"
                    Else
                        sb = ""
                    End If
                    If x(xr, xc + 3) <> "" And x(xr - 2, xc + 3) = "" Then
                        x(xr - 2, xc + 3) = x(xr, xc + 3)
                        x(xr, xc + 3) = ""
                    End If
                    x(xr, xc + 2) = sb & tbl1(i, 1)
                    x(xr + 1, xc + 3) = Format(tbl1(i, 2), "yyyy.mm.dd")
                    scy = Application.Min(xr, scy)
                    mcy = Application.Max(xr, mcy)
                End If
            End If
        End If
    Next
    .Range("C:IU").ClearContents
    .Range("C1").Resize(UBound(tbl2, 1) + 1, xc + 3) = x
End With
End Sub
 '------

 (HANA)

 動作確認をしたデータを載せておきます。

 こちらからコピーして貼り付けた後
 メニュー・データ→区切り位置
 で、各列に区切って頂ければと思います。

 父・母は誕生日の入力が無い場合は
 最初の年に表示します。
 (?の入力も不要です)
 子の誕生日は、必ず入力して下さい。

 Sheet1
           [A]         [B]        [C]       [D]
  [1]      氏名       誕生日      性別      関係
  [2]   Na.Sho      1940/12/22     M    Na.Masaの父
  [3]   [Wa]Toku    1942/10/9      F    Na.Masaの母
  [4]   Na.Masa     1960/10/1      F
  [5]   Na.Mao      1961/10/1      M    Na.Shoの子
  [6]
  [7]
  [8]   WaToku      1942/10/9      F    Wa.Miの子
  [9]   Wa.Mi           ?         M    WaTokuの父
  [10]
  [11]  Me.Kuna      1947/3/1      F
  [12]  Me.Tana      1950/5/3      M
  [13]  Ta.Kei      1940/12/2           Me.Kunaの母

 Sheet2の方は、IV1に「1934」
 以降、1ずつ増加して、29行目「1962」まで設定しておきました。

 Sheet2
	[A]	[B]	・・・	[IV]
[1]		9		1934
[2]		10		1935
 :		 :		 :
[29]		37		1962
[30]				

 誕生年より少ないと、結果から漏れますので注意してください。

 (HANA)

 ありがとうございました。
 難しい課題を質問してしまいました。

 まず Sheet1は コピーして貼り付けた後 メニュー・データ→区切り位置で、各列に区切って
 表すことができました。
 しかし、Sheet2は いくつかやったのですが このWebページにでているようなものしかでません。
 A列に昭和、Bが和暦 そして人の記号名前など出ることを期待したのですが。
 貴結果のIV1に「1934」
 当面 X列あたりに西暦を置きたいのですが どこを直すと良いでしょうか?
 3.....28行間の表示がでないのですが 
 同様に列C〜IV間を出すには?

 それと 肝心のコードですが これは先の関数とことなる設定ですが
 どのようにしてExcelでつかうのでしょうか?
 こんな事をしらないことでは! とお叱りをうけるのですが、Helpでみてもわからないので
 教えてください。


 コードを使用するための設定手順を書いてみます。
 不明な点があれば、どこまでは出来たのかと合わせて
 再度お尋ねください。

 まず、新規ブックを用意してください。
 新規ブックでは、Sheet1とSheet2を使います。
 無い場合は、シートを挿入して作成してください。

 Sheet1に
 >コピーして貼り付けた後 メニュー・データ→区切り位置で、各列に区切って表すことができました。
 この様にして、データを配置してください。

 Sheet2は
 IV1に「1934」を入力して29行目まで一つずつ値を増加して行ってください。

 >Sheet2は いくつかやったのですが このWebページにでているようなものしかでません。
 IV列に西暦を作ってもらうだけなので、このWebページには 参考に
 抜粋したものしか載せていません。
 IV1が「1934」から始まる連番を、そちらで作成してください。

 また、必要であれば、A,B列もそちらで作成してもらうことになります。

 Alt + F11 で、VBEを立ち上げます。
 新しいウィンドウが開きます。開いた画面が、VBEです。
 そのメニューで 挿入(I)→標準モジュール(M)として
 標準モジュールを追加してください。

 右側に白い画面が現れるので、そこへコードを貼り付けます。

 貼り付けたらエクセルに戻ります。
 (エクセルをアクティブにして下さい。)

 Alt + F8 を押すと マクロダイアログが開きますので
 その中から「Hannnya」を選び [実行(R)]を押します。

 マクロを実行すると、マクロはその間の列に年表系図を書き出します。

 >当面 X列あたりに西暦を置きたいのですが
 どうせ移動させるなら、先頭列に移動させるのが良いと思いますが。。。
 たとえば、A列と(和歴はB,C列にして)全家族を書き出した最後の列と
 2か所に表示するのでは駄目でしょうか?
 (この方がコードが簡単になるのですが。)

 まずは、西暦をIV列において
 コードの動きを確認して頂ければと思います。

 (HANA)

 ありがとうございました。教えられたようにマクロを(初めて)作成しました。
 およそ希望のようにでました。
 出来たばかりで感心しています。
 実は 70歳代の身内が寛延元年 1748から現在までのExcel年表にすべて直に手入力で作図したのを
 見て、これは大変と自動化を試みたのですが なんともならず こちらの助言指導を仰いだしだいです。
 このような系譜は小生自身はなく、大変わかりやすいものと評価をしています。
 以後コードを勉強しながら、出来上がりをみたいとおもいます。
 また ご指導を仰ぎます。

 その前に 先の関数で引っ掛っています、
      [A]         [B]      [C][D]     [E]
 [1] 氏名	和暦誕生日性別親子  補助西暦	 
 [2] Na.Sho  S15.12.22  M	父 	1940	 
 [3] [Wa]Toku 	       F 	母	1900	 
 [3] Na.Masa	S35.10.1  F	子	1960	 
 [5] Na.Mao	S36.10.1  M	子	1961	 
 の=IF(A3="","",YEAR(IF(D3="母",SUMIF($D$1:$D$9,"父",$B$1:$B$9),B3)))
 が1900になるのがわからないのです。
 どうして1900になるのでしょうか?
 関数の記述の意味はわかります。1940になるはずですが?


 開いているエクセルがあれば、一度すべて閉じて
 新しく開いてください。

 以下をコピーして、
 形式を選択して貼り付け→テキスト で貼り付け
	[A]	[B]	[C]	[D]	[E]
[1]	氏名	和暦誕生日	性別	親子	補助西暦
[2]	Na.Sho	S15.12.22	M	父	
[3]	[Wa]Toku		F	母	
[4]	Na.Masa	S35.10.1	F	子	
[5]	Na.Mao	S36.10.1	M	子	
 見出し行列を削除。

 E2セルに
=IF(A2="","",YEAR(IF(D2="母",SUMIF($D$1:$D$9,"父",$B$1:$B$9),B2)))
 として、フィルドラッグ。

 ご希望の結果が得られると思います。

 元のデータで
=D2="父"
=TYPE(B2)
 の戻り値を確認してください。

 ちなみに、今回載せたサンプルは Web上では正しく見えませんが
 エクセルへテキスト形式で貼り付けると
 正しい配置に戻ると思います。

 >その際、文字数に依っては レイアウトが崩れるかもしれませんが
 >そのまま投稿してもらうのが良いと思います。
 と書いた理由です。

 (HANA)

 ありがとうございました
 確かに 新しいのをコピーしたら 期待する 結果がでました 1900ー>1940
 前のも 新しいのも 戻り値Type(B2)は1ですが、Type(D2)は2です。
 ちなみにTType(D3)も2でした。
 ひとまず、この関数は問題なかったようです。コピーの仕方が問題だっとのでしょう。

 先のマクロを使う方法に切り替えます。
 婚姻関係は(難しいケースを除き)男女関係ですので、==あとには女三角をつけることにしました。
 もっとも左男==右女と決めると 女子供との婚姻関係を繋げるときに どうするか 課題になります。

 それもあるのですが、子が婚姻をしたときに ==を重ならないように ======と広げて
 その下にさらに子を記載したいのですが ====の間隔をどう 自動的に調整したらよいか
 なやんでいます。
 貴サンプルを改修して その事例を作り 後で送り、相談します。
 よろしく おねがいします。


 私が作った物は1家族限定です。
 先にも書きましたが
 >祖父・祖母や、子の連れ合い、孫 等が含まれない
 場合です。

 >その下にさらに子を記載
 と言うのは、この部分の事ですよね?
 (子の連れ合いや、孫)

 ご想像以上に困難な事だと思います。

  年子の子が双方結婚をしたら?同時期に子供を産んだら?
   「===」の数も、子供の数に依って変わって来ます。
   しかし、結婚しなかったり、していない子供も居るでしょう。
   他の人と重ならないかの注意も必要に成ってきます。
  誰が誰の嫁で、誰が誰の婿?どれが誰の子?
  一家族分は、結局何列要るの?
 これらをVBAが判断しそれだけのスペースを確保し
 所定の位置に記述して行く必要がでて来ます。

 生年月日などが一覧に成っているシート(現在のSheet1)
 家族毎に年表にするシート(現在のSheet2)
 それを組み合わせてより分かりやすくするシート(新しく作成Sheet3)
 の3シートを使い、
 Sheet3の作成は、Sheet2からコピーし 配置換えをして
 手作業でおこなわないと、難しいと思います。

 「父」が主体に成っていますので、男子の婚姻は同じ行の別の列に表示されます。
 よっぽど年の離れた夫の婚姻で無ければ、女子の場合でも同じ位の行には成ると思います。
 見つけたら、行を揃え 重複する名前を削除し 「=」で繋げる。
 上の子の系列は右側に、下の子の系列は左側に配置
 なんて「臨機応変」な事も 人がやれば簡単です。
 コードにやらせようとすると、大変です。

 完璧な物を作ろうと思って居られるのなら止めはしませんが
 コードの方は、もっと気合いを入れて作成が必要に成ると思いますし
 全く作り直さなければ成らなくなりそうに思います。

 ××となって居たら○○としたい
 と言ったマイナーチェンジで有れば
 お伺い出来るかとは思いますが。。。。

 (HANA)


はなさん
ありがとうございました。初めから完璧に、というか 最終形態がDNAのTreeにようにするのか、婚姻活計を優先した家系図か などなどいろいろの状態を考えると決まりません。
そこで(とりあえず)親子(系譜複数群)関係データ(Sheet1)を 複数縦線(Sheet2)に自動表示して
それをコピーした上(Sheet2−2))で 新たな婚姻関係は手によるカット&こぴーで作図するということにします。

すみませんが 
1:西暦を右端VI列はそのまま残し、C列にも入れるということは コードをどのようにあすれば良いでしょうか。以後1列ずらす。
2:今==の男女記号は左の男性は入るのですが、女性は入らない場合がある。
  これを改め、すべての名前を表示するときに その名前の前に男女記号をつけると
  するには コードをどのようにあすれば良いでしょうか。
3:上のように子の婚姻は手でするとして、現行は父親から始まりますが、もう一つ新たな系譜として夫るいは妻の==を自動作図するのを追加できませんでしょうか

 
[10] Na.Mao S36.10.1 M
[11] [Ki]AzuNa S38.10.1 F Na.Maoの妻
のようなデータ群

現行の父からでなく 夫から始めた方が子供が無い場合も一緒に1つの系譜としてマクロが記載できるのであれば それでも良いです。夫婦から子供の直線が一つに系譜として表す。
データには 夫または妻として 子は〜の子と明示する。

また 手書きで==をExcel上で 描くのは どうするのでしょうか?
メニューで探すのですが 見つけられず 
Microsoft office 2003版です

よろしくおねがいします

 


 ◆1:西暦を右端VI列はそのまま残し、C列にも入れる

 最後の
    .Range("C:IU").ClearContents
    .Range("C1").Resize(UBound(tbl2, 1) + 1, xc + 3) = x
 の2行を、一つずつずらして
    .Range("D:IU").ClearContents
    .Range("D1").Resize(UBound(tbl2, 1) + 1, xc + 3) = x
 にしてみるのはどうでしょう?

 でも、C列に入れるなら tbl2に取り込む範囲をC列にしてもらうと
 IV列の入力は不要ですが。。。。?

 イメージがちょっと良く分からなくなりました。

 ◆2:今==の男女記号は左の男性は入るのですが、女性は入らない場合がある。

 上の方に「===」が4箇所有りますが、全て「===▼」に変えるとか
 好きなところだけ(笑)変えて下さい。

 ◆3:新たな系譜

 子供が居ない場合は「父=母」に成らず「夫=妻」と書くって事ですか?
 でしたら、入力を「夫=妻」でしてもらうことにして
    tbl1(i, 4) Like "*父*" → tbl1(i, 4) Like "*夫*"   
    tbl1(i, 4) Like "*母*" → tbl1(i, 4) Like "*妻*"
 としてもらうのが良いかもしれません?

 或いは、「父=母」「夫=妻」を使い分けながら入力するなら
    tbl1(i, 4) Like "*[父,夫]*"
 等やってみるとか。

 ◆手書きで==をExcel上で 描く

 ・・・マクロが書いている「===」の事でしたら
 半角のイコールですが。。。?

 (HANA)

ご多忙のところありがとうございます。

◆1C列に西暦を挿入する
 C1をD1に変えました。C列が空白になり、作図はD列からになりました。
 但し、子の系譜線が氏名の下から出て、===の下からでるようにしたい。
 コードは x(xr + 1, xc + 2) = "|" あたりを変えるのでしょうか?

 その西暦を書き込んでいるコードはどこでしょうか 
 それでC列に西暦を入れたい。
 VI列に残す意図は 横幅が広がって右を見る場合 年号を併せてみたいためです。
 ですから本当はVIという固定端ではなく、作図使用範囲の余裕をとった右端に記載したいところです。
◆2:今==の男女記号は左の男性は入るのですが、女性は入らない場合がある。
上の方に「===」が4箇所有りますが、全て「===▼」に変えて 確かに女性の記号が入りました。
しかし、系譜上の娘に 娘娘▼==△彼彼のごとく接続(多分これは後でカット&コピーで)する
つもりですので、名前を記載するときに合わせて記号を前に自動的に追加できないかと思慮しています。

 ◆3 夫婦の記載でも上手く出ました。"*[父,夫]*"をつかいました

ありがとうございます。 


 >但し、子の系譜線が氏名の下から出て、===の下からでるようにしたい。
 但し・・・?

 >◆1C列に西暦を挿入する
 の関連のお話ですか?
 この変更では書き出し場所を変えただけなので
 他は変わらないと思いますが。。。

 >その西暦を書き込んでいるコードはどこでしょうか
 済みません、御質問の意味が分かりません。
 事前に、IV列をコピーしてC列に貼り付けておいてもらえれば良いですが。。。。

 >横幅が広がって右を見る場合 年号を併せてみたいためです。
 でしたら、
    .Range("D:IU").ClearContents
    .Range("D1").Resize(UBound(tbl2, 1) + 1, xc + 3) = x
 の下に
    .Range("IV:IV").Copy .Range("D1").Cells(1, xc + 5)
 を追加とか・・・。

 >名前を記載するときに合わせて記号を前に自動的に追加できないかと思慮しています。
 済みません、意味が分かりません。

 場合によって付けたい時と付けたくない時が有るのなら
 上の方に「===」が4箇所有りますが例えば上から順に
 「===●」「===■」「===◆」「===★」等として
 付けたくない所の記号は消し、付けたい所の記号は▼にして下さい。

 ・・・って事で良いのかな?

 ちなみに、一家族4列使っていますが
  1.両親の名前
  2.父(父が無い場合は母)の生年月日
  3.「|」と、子の名前
  4.子の生年月日
 と分けているのは、父の名前に依って「===」の位置が変わるので
 1,2列目の幅を調整して「===」の下に「|」が来るように
 変更してもらえば良いと思っているからです。

 列幅を調節してもらえれば、以下のように見せる事が出来ます。
12   34     5  
|
△Na.Sho====[Wa]Toku
|1940.12.22
|       |
         |
〜〜〜〜〜〜〜〜〜〜〜〜
         |
         ▼Na.Masa
         |1960.10.01
         △Na.masa
         |1961.10.01

 1列目は、一文字分の幅
 2列目は「====」の下に3列目の「|」が来る幅
 3列目は、一文字分の幅
 4列目は、生年月日が納まる幅

 (HANA)


ありがとうございます。
小生が勝手にいじっている内にエラです。
エラー(9)Indexが範囲以外
x(xr, xc) = "△" & tbl1(i, 1)

西暦の記載ですが 質問がまずくてすみません。
したいのは
A列和暦年号(縦書き 10年毎 今は手入力)
B列和暦年数
C列西暦
それと使用範囲+5列目に再度西暦
この年数記載範囲をどこで指定したらよいでしょうか?
例えばSheet1のデータで自動的に決まるのか、Sheet2に手で入力するのか?
下は今の2009までですが、上はExcelではどこまで古い和暦を書けるのでしょう(1900までかな?)

なんべんもありがとうございます

ーーーーーーーーー
' コメント これは年表系譜のソフトです
Sub nenpyokeifu()

    Dim tbl1, tbl2, x
    Dim xc As Long, xr As Long
    Dim i As Long, ii As Long
    Dim fyi As Long, yi As Long, cyi As Long, mcy As Long, scy As Long, my
    Dim mn As String, sb As String
With Sheets("Sheet1")
    tbl1 = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 4)
End With
With Sheets("Sheet2")
    tbl2 = .Range("IV1").Resize(.Range("IV" & Rows.Count).End(xlUp).Row, 1)
    ReDim x(1 To UBound(tbl2, 1) + 1, 1 To Columns.Count)
    xc = 1 '作図の左端D列から
    'xc = 3

    For i = 2 To UBound(tbl1, 1)
        If tbl1(i, 1) = "" Then
            If tbl1(i - 1, 1) <> "" Then
                If fyi <> 0 Then
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = x(xr, xc) & "===▼" & mn
                        ' コメント ▼は名前の前にするようにしたい 以下同じ

                    If x(xr + 1, xc + 1) = "?" Or x(xr + 1, xc + 1) = "?" Then
                        x(xr + 1, xc + 2) = "|"
                    End If
                ElseIf my = "?" Or my = "?" Then
                    fyi = tbl2(1, 1)
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△    ===▼" & mn
                    x(xr + 1, xc + 1) = "      " & my
                ElseIf my <> "" Then
                    fyi = Year(my)
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△    ===▼" & mn
                    x(xr + 1, xc + 1) = "     " & Format(my, "yyyy.mm.dd")
                ElseIf my = "" Then
                    fyi = tbl2(1, 1)
                    xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△    ===▼"
                    x(xr + 1, xc + 2) = "|"
                End If
                If xr > 1 Then
                    x(xr - 1, xc) = "|"
                End If
                If xr <> 0 Then
                    x(xr + 1, xc) = "|"
                    x(xr + 2, xc) = "|"
                End If
                If xr < mcy Then
                    For ii = xr + 2 To mcy + 1
                        If x(ii, xc + 2) = "" Then
                            x(ii, xc + 2) = "|"
                        End If
                    Next
                End If
                'xc = xc + 5 ' コメント この追加数字が系譜幅
                xc = xc + 8
                fyi = 0: cyi = 0
                my = "": mn = ""
                scy = UBound(tbl2, 1) + 1: mcy = 0
            End If
        Else
            If tbl1(i, 4) Like "*[父,夫]*" Then
                If tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "" Then
                    fyi = tbl2(1, 1)
                Else
                    fyi = Year(tbl1(i, 2))
                End If
                xr = fyi - tbl2(1, 1) + 1
                    x(xr, xc) = "△" & tbl1(i, 1) 'エラー箇所です
                    x(xr + 1, xc + 1) = Format(tbl1(i, 2), "yyyy.mm.dd")
            ElseIf tbl1(i, 4) Like "*[母,妻]*" Then
                mn = tbl1(i, 1)
                my = tbl1(i, 2)
            Else
                If tbl1(i, 2) = "" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Then
                    MsgBox "誕生日が未入力です。" & vbLf & tbl1(i, 1)
                Else
                    cyi = Year(tbl1(i, 2))
                    xr = cyi - tbl2(1, 1) + 1
                    If tbl1(i, 3) = "M" Then
                        sb = "△"
                    ElseIf tbl1(i, 3) = "F" Then
                        sb = "▼"
                    Else
                        sb = ""
                    End If
                    If x(xr, xc + 3) <> "" And x(xr - 2, xc + 3) = "" Then
                        x(xr - 2, xc + 3) = x(xr, xc + 3)
                        x(xr, xc + 3) = ""
                    End If
                    x(xr, xc + 2) = sb & tbl1(i, 1)
                    x(xr + 1, xc + 3) = Format(tbl1(i, 2), "yyyy.mm.dd")
                    scy = Application.Min(xr, scy)
                    mcy = Application.Max(xr, mcy)
                End If
            End If
        End If
    Next
    .Range("C:IU").ClearContents
    .Range("D1").Resize(UBound(tbl2, 1) + 1, xc + 3) = x
    ' C列に西暦を入れるためC1→D1に
    .Range("IV:IV").Copy .Range("D1").Cells(1, xc + 5)
End With
End Sub

Sheet1 (コピーで行列番号を得るにはどうすのでしょうか?)
氏名 親子毎 誕生日 性 同一系譜では父母 あるいは夫婦いずれか 無記載は子とみなす 

 湘南始	       1940/12/22	M	湘南太郎の父
 [藤沢]乙女	1942/10/9	F	湘南太郎の母
 湘南藍子	1960/10/1	F	
 湘南太郎	1961/10/1	M	湘南始の子

 湘南太郎	1961/10/1	M	米子組の夫
 [米子]組	1947/3/1	F	湘南太郎の妻

 湘南藍子	1960/10/1	F	米子 大山の妻
 [米子]大山	1950/5/3	M	湘南藍子の夫

 清水 富士	?	       M	清水乙女の父
 清水 乙女	1942/10/9	F	清水富士の子

 米子?	       ?	       M	米子 組の父
 [鳥]娘	       1940/12/2	F	米子 組の母
 米子 組	1947/3/1	F	
 米子 大山	1950/5/3	M	鳥 娘の子


 まず最初に、この掲示板に付いてですが
 文頭に半角スペースを入れると 改行出来ます。
_←ここに半角スペース。

 それから、
 >(コピーで行列番号を得るにはどうすのでしょうか?)
 に関しては、私が載せている [A] [B] [C]・・・
 等の事じゃないかと思いますが、これは
 ワークシート上で行列を追加して書き込んだ物を
 コピーして貼り付けています。
 例えば
      [A]     [B]      [C]
 [1]  A1セル
 [2]
 [3]
 この様な表は、A1セルに「A1セル」と
 入っている事を表したいですが、
 実際にワークシート上では B2セルに「A1セル」と入っています。
 1行目は[A][B][C]、A列には[1][2][3] が入っていますので。

 >エラー(9)Indexが範囲以外
 >x(xr, xc) = "△" & tbl1(i, 1)
 ご提示のデータで動かしてみましたが、エラーは出ませんでした。
 IV列に入力してある年より大きい誕生日の人が居ませんか?
 IV列の年を多めに記入してみてはどうでしょう。

 エラーが出る時の、IV列の年の入力範囲
 Sheet1のデータを、合わせて教えて頂ければと思います。

 VBEメニュー・表示(V)で、ローカルウィンドウを表示し
 エラーで止まった時の、xr,xc,iの値を確認するのも
 問題解決に導くと思います。

 >それと使用範囲+5列目に再度西暦
 ご提示のデータと、コードではAW列に西暦を
 コピーしています。
 空白列数を変更したい場合は
     .Range("IV:IV").Copy .Range("D1").Cells(1, xc + 5)
 この最後の「+5」を変更して下さい。

 >A列和暦年号(縦書き 10年毎 今は手入力)
 >B列和暦年数
 >C列西暦
 IV列の年から算出して、この3列も勝手に入って欲しいって事ですか?

 >この年数記載範囲をどこで指定したらよいでしょうか?
 もしかして、IV列の西暦も、勝手に入って欲しいって事かな。。。?

 因みに「使用範囲+5列目に西暦」が有れば、一番最後の列に
 西暦が有る必要は無いんですよね?

 >上はExcelではどこまで古い和暦を書けるのでしょう(1900までかな?)
 そうですね。
 ただ、特に計算が有るわけではないので
 それより古い日付も入れたければ・・・
 まぁ、出来ないことも無いとは思います。

 (HANA)

度々 ありがとうございます。
先のコードで、IVの数値を拡張したら とおりました。

 >「使用範囲+5列目に西暦」が有れば、
 > 最後の列に 西暦が有る必要は無いんですよね?
はい そうです。AW列に入っているのに、これまで、気づきませんでした。
すみません。
その上で、
 >A列和暦年号(縦書き 10年毎 現行は手入力)
 >B列和暦年数
 >C列西暦
の3列にもが 勝手に入ってほしいです。

 A	B	C	D	E	F	G	  略	I			
 	14	1940	△湘南始===▼[藤沢]乙女			1940					
  	15	1941	|	1940.12.22			1941				
  	16	1942	|	|				1942		
 	17	1943		|				1943		
 	18	1944						1944			
 	19	1945						1945			
 昭	20	1946						1946			
 和	21	1947						1947			
             略
 平   
 成   21      2009                                            2009
の如く。 
そして 年数行もデータの内最古-1年からH21,2009まで自動的に記載したいです。
よろしく ご教授おねがいします


 > 最後の列に 西暦が有る必要は無いんですよね?
はい  それを消すのは どのようにするのでしょうか?

With Sheets("Sheet2")

    tbl2 = .Range("IV1").Resize(.Range("IV" & Rows.Count).End(xlUp).Row, 1) '西暦を入れている?
    ReDim x(1 To UBound(tbl2, 1) + 1, 1 To Columns.Count)    '西暦を入れている?
に関係していそうですが。
また 追加した
    .Range("IV:IV").Copy .Range("D1").Cells(1, xc + 5) '西暦VI列からD列にコピー
はIVをコピーしているので、コピーではなく、直接書きたい。

現在 A列手に入力の年号、B列 手入力の和暦 C列 空白 AW列自動記載西暦 VI列 手入力の西暦となっています。

どうか よろしくおねがいします。

今 試しに年を”日付”で入れ、1901/1/1 = M34/1/1 より遡ると 再び年が下り、おかしくなる。年は”数値”で操作します。
  


 >1901/1/1 = M34/1/1 より遡ると 再び年が下り、おかしくなる。
 そうですね、1900迄大丈夫かと思いましたが
 1901が限度の様です。

 >の3列にもが 勝手に入ってほしいです。
 勝手に入るように変更しました。

 '------
Sub nenpyokeifu_1()
    Dim tbl1, tbl2, x, y
    Dim xc As Long, xr As Long, nn As Long
    Dim i As Long, ii As Long
    Dim fyi As Long, yi As Long, cyi As Long, mcy As Long, scy As Long, my
    Dim mn As String, sb As String
With Sheets("Sheet1")
    tbl1 = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 4)
    nn = Year(Application.Min(.Range("B:B"))) - 1
End With
ReDim y(1 To Year(Date) - nn + 1, 1 To 3)
        y(1, 3) = nn
        y(1, 1) = Format(y(1, 3) & "/1/1", "ggg")
        y(1, 2) = Format(y(1, 3) & "/1/1", "e")
For i = 2 To UBound(y, 1)
        y(i, 3) = y(i - 1, 3) + 1
        y(i, 2) = Format(y(i, 3) & "/1/1", "e")
    If y(i, 2) < y(i - 1, 2) Or y(i, 2) Mod 10 = 0 Then
        y(i, 1) = Format(y(i, 3) & "/1/1", "ggg")
    End If
Next
With Sheets("Sheet2")
    ReDim x(1 To UBound(y, 1), 1 To Columns.Count)
    xc = 1 '作図の左端D列から
    'xc = 3

    For i = 2 To UBound(tbl1, 1)
        If tbl1(i, 1) = "" Then
            If tbl1(i - 1, 1) <> "" Then
                If fyi <> 0 Then
                    xr = fyi - nn + 1
                    x(xr, xc) = x(xr, xc) & "===▼" & mn
                        ' コメント ▼は名前の前にするようにしたい 以下同じ

                    If x(xr + 1, xc + 1) = "?" Or x(xr + 1, xc + 1) = "?" Then
                        x(xr + 1, xc + 2) = "|"
                    End If
                ElseIf my = "?" Or my = "?" Then
                    fyi = nn
                    xr = fyi - nn + 1
                    x(xr, xc) = "△    ===▼" & mn
                    x(xr + 1, xc + 1) = "      " & my
                ElseIf my <> "" Then
                    fyi = Year(my)
                    xr = fyi - nn + 1
                    x(xr, xc) = "△    ===▼" & mn
                    x(xr + 1, xc + 1) = "     " & Format(my, "yyyy.mm.dd")
                ElseIf my = "" Then
                    fyi = nn
                    xr = fyi - nn + 1
                    x(xr, xc) = "△    ===▼"
                    x(xr + 1, xc + 2) = "|"
                End If
                If xr > 1 Then
                    x(xr - 1, xc) = "|"
                End If
                If xr <> 0 Then
                    x(xr + 1, xc) = "|"
                    x(xr + 2, xc) = "|"
                End If
                If xr < mcy Then
                    For ii = xr + 2 To mcy + 1
                        If x(ii, xc + 2) = "" Then
                            x(ii, xc + 2) = "|"
                        End If
                    Next
                End If
                'xc = xc + 5 ' コメント この追加数字が系譜幅
                xc = xc + 8
                fyi = 0: cyi = 0
                my = "": mn = ""
                scy = UBound(y, 1) + 1: mcy = 0
            End If
        Else
            If tbl1(i, 4) Like "*[父,夫]*" Then
                If tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "" Then
                    fyi = nn
                Else
                    fyi = Year(tbl1(i, 2))
                End If
                xr = fyi - nn + 1
                    x(xr, xc) = "△" & tbl1(i, 1)
                    x(xr + 1, xc + 1) = Format(tbl1(i, 2), "yyyy.mm.dd")
            ElseIf tbl1(i, 4) Like "*[母,妻]*" Then
                mn = tbl1(i, 1)
                my = tbl1(i, 2)
            Else
                If tbl1(i, 2) = "" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Then
                    MsgBox "誕生日が未入力です。" & vbLf & tbl1(i, 1)
                Else
                    cyi = Year(tbl1(i, 2))
                    xr = cyi - nn + 1
                    If tbl1(i, 3) = "M" Then
                        sb = "△"
                    ElseIf tbl1(i, 3) = "F" Then
                        sb = "▼"
                    Else
                        sb = ""
                    End If
                    If x(xr, xc + 3) <> "" And x(xr - 2, xc + 3) = "" Then
                        x(xr - 2, xc + 3) = x(xr, xc + 3)
                        x(xr, xc + 3) = ""
                    End If
                    x(xr, xc + 2) = sb & tbl1(i, 1)
                    x(xr + 1, xc + 3) = Format(tbl1(i, 2), "yyyy.mm.dd")
                    scy = Application.Min(xr, scy)
                    mcy = Application.Max(xr, mcy)
                End If
            End If
        End If
    Next
    .Cells.ClearContents
    .Range("A1").Resize(UBound(y, 1), 3) = y
    .Range("D1").Resize(UBound(y, 1), xc + 3) = x
    ' C列に西暦を入れるためC1→D1に
    .Range("C1").Resize(UBound(y, 1), 1).Copy .Range("D1").Cells(1, xc + 5)
End With
End Sub
 '------

 (HANA)

 1900年の壁問題を少し考えてみました。

 まず、現在は和暦をエクセルが出していますが
 1900年以前はエクセルが知りませんので
 どこかに対応表が必要です。
 (A列に西暦 B列に年号 C列に年 と成っている様な。)

 それから、1900年以前はエクセルがシリアル値で管理出来ませんので
 現在生年月日をシリアル値で入れていますが、全て
 「20070626」の様な8桁の【数値】で入力する。

 元データをこの様に整える事にすれば
 割と簡単に実現できるかもしれません。

 (HANA)

 Sheet1からのデータ 氏名 生年 没年 夫婦親子関係などをSheet2の表に記載できるにようになりました。
 いくつか課題があり、手直しするために現コードを読んでいますが、質問するまでには理解し切っていません。
 勉強しながら、上の助言を活かしてながら、別に質問しました暦変換をも勉強して 
 Sheet2にまず入れようと思います。


 諸般の事情もあるでしょうから、最終的にどうするかは
 はんにゃさんが決めることですが
 私はこれまでの流れも含めて、最善と思う方法を提案しています。

 (HANA)

HANA さん ありがとうございます。
多くの助言で進んでいますが、小生の理解不足などで もうすこし時間をください。
 身勝手ですが、例えば 手入力の日付などを8桁の数値で入れ、入力欄に表示し 読むことは他の慣れていない方には難があり、やはり 2007.6.26 と記述できなかと思慮しています。
 それと 多くの資料は 現在と異なり 慶応2年とかの年号で記載してあるので、直接書き写しの入力で、ソフトで自動で直すようにしたいと考えていますが、いかがでせうか?

 以下 変更入力表例。年は何れか入力 空欄/?を許す。

 1氏名 2生年西暦 3元号4和暦 5没年西暦 6元号7和暦 8性M/F/? 9父母/夫婦/子 	
 湘南始		 昭和 16.12.22	      昭和 35.10.10 M	湘南太郎の父
 [藤沢]乙女 1960.10.9		1960.10.9             F 湘南太郎の母	
 湘南藍子   1960.10.1		                      F		
 湘南太郎   1961.10.1		                 M  湘南始の子	

 湘南太郎   1961.10.1	         		   M	米子組の夫	
 [米子]組   1947.3.1		     	   F	湘南太郎の妻

 相談するのに 仕様が途中変更して まことにすみません。
 8 桁入力でないと大変でしょうか?
 マクロを実行するとまずSheet1の西暦・和暦年を変換して、空欄を書き込み(埋めて)、次にSheet2の記述にうつると考えます。


 表は、エクセルで作成した物を貼り付けるだけにするか
 Tabコードなどを含まない形で、メモ帳などで作成し
 投稿するか してもらわないと どこに何が入っているのか
 分からないのですが。

 なおした年月日(或いは年)を表示させる列をつくって良いなら
 そう難しくないのかもしれません。
 (例えば、10列目に 年表作成用の年を表示する列を設ける)

 元号の年を探してそれにプラスすれば求まりそうですので。
 元年を「1」で入れるか「元」で入れるか等に依っても
 変わってくると思いますが。

 (HANA)

HANA さん いっぺんに試みたのですが失敗で、再度 1900以前は止めて、表示の方のみを考えます。
没年などをいれた表示なのですが、現在以下のとおりです。

 Sub nenpyokeifu_1()
    Dim tbl1, tbl2, x, y, my
    Dim xc As Long, xr As Long, nn As Long
    Dim i As Long, ii As Long
    Dim fyi As Long, yi As Long, cyi As Long, mcy As Long, scy As Long
    Dim mn As String, sb As String
With Sheets("Sheet1")
    tbl1 = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 5) 'D列没年挿入
    nn = Year(Application.Min(.Range("B:B"))) - 1 'nn = Sheet1の誕生日の最古年の前年
End With
ReDim y(1 To Year(Date) - nn + 1, 1 To 3)   '現在までの行数確保
        y(1, 3) = nn                        'C列に最古の前年
        y(1, 2) = Format(y(1, 3) & "/1/1", "e")    'B列に最古の前年/1/1
        y(1, 1) = Format(y(1, 3) & "/1/1", "ggg")  'A列に
For i = 2 To UBound(y, 1)            ' UBound =最大値
        y(i, 3) = y(i - 1, 3) + 1    ' 西暦 前行年+1
        y(i, 2) = Format(y(i, 3) & "/1/1", "e")  '和暦年
    If y(i, 2) < y(i - 1, 2) Or y(i, 2) Mod 10 = 0 Then  '年号
        y(i, 1) = Format(y(i, 3) & "/1/1", "ggg")
    End If
Next
With Sheets("Sheet2")
    ReDim x(1 To UBound(y, 1), 1 To Columns.Count)
    xc = 2 '作図の左端D+1列から
    For i = 2 To UBound(tbl1, 1)
        If tbl1(i, 1) = "" Then  '一系線組が終わったときの名前空白行で
            If tbl1(i - 1, 1) <> "" Then '一つ前行で名前があるとき
                If fyi <> 0 Then    '数値があるとき
                    xr = fyi - nn + 1  'nn = Sheet1の誕生日の最古年の前年
                    x(xr, xc) = x(xr, xc) & "===▼1" & mn
                        ' コメント ▼は名前の前にするようにしたい 以下同じ
                    If x(xr + 1, xc + 1) = "?" Or x(xr + 1, xc + 1) = "?" Then
                        x(xr + 1, xc + 3) = "|"  '===の次行に系譜線を描く
                    End If
                    If x(xr + 2, xc + 1) = "" Then
                        x(xr + 2, xc + 3) = "|"  '===の次行に系譜線を描く
                    End If
                ElseIf my = "?" Or my = "?" Then  'my = tbl1(i, 2) ' 誕生日
                    fyi = nn          '以下の===▼は出現しない Why?
                    xr = fyi - nn + 1 'xr=1 ではないか?
                    x(xr, xc) = "△    ===▼2" & mn  'mn = tbl1(i, 1) '氏名
                    x(xr + 1, xc + 1) = "      " & my
                ElseIf my <> "" Then   '数値あるとき
                    fyi = Year(my)
                    xr = fyi - nn + 1
                    x(xr, xc) = "△    ===▼3" & mn
                    x(xr + 1, xc + 1) = "     " & Format(my, "yyyy.mm.dd")
                ElseIf my = "" Then     '空白のとき
                    fyi = nn
                    xr = fyi - nn + 1    'xr=1 ではないか?
                    x(xr, xc) = "△    ===▼4"
                    x(xr + 1, xc + 3) = "|"    '次の行に系譜線を描く
                End If
                If xr > 1 Then           ' 夫父名に系譜線を上げる
                    x(xr - 1, xc) = "|"
                End If
                If xr <> 0 Then         ' 夫父名に系譜線を下ろす
                    x(xr + 1, xc) = "|"
                    x(xr + 2, xc) = "|"
                End If

                If xr < mcy Then   ' 列のmcy最後まで系譜線を下ろす
                    'For ii = xr + 2 To mcy + 1
                    For ii = xr + 3 To mcy + 1  '線の始まり

                        If x(ii, xc + 3) = "" Then ' ===の系線横位置
                            x(ii, xc + 3) = "|"
                        End If
                    Next
                End If
                xc = xc + 8   'この追加数字が系譜幅
                fyi = 0: cyi = 0
                mn = "": my = "" 'mn 名前 my 生年
                scy = UBound(y, 1) + 1: mcy = 0
            End If
        Else            '一系線組の始まり 父母/夫婦で
            If tbl1(i, 5) Like "*[父,夫]*" Then
                If tbl1(i, 2) = "" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Then
                    fyi = nn
                Else
                    fyi = Year(tbl1(i, 2))
                End If
                xr = fyi - nn + 1
                If tbl1(i, 3) = "" Then                    '没年列
                    x(xr, xc) = "△" & tbl1(i, 1)
                Else
                    x(xr, xc) = "△" & "故_" & tbl1(i, 1) '没名記載
                    x(xr + 2, xc + 1) = "〜" & tbl1(i, 3)
                End If
                x(xr + 1, xc + 1) = Format(tbl1(i, 2), "yyyy.mm.dd")

            ElseIf tbl1(i, 5) Like "*[母,妻]*" Then
                    'fyi = Year(tbl1(i, 2))
                    'xr = fri - nn + 1
                If tbl1(i, 3) = "" Then               '没年列の有無
                    mn = tbl1(i, 1)                   '氏名
                Else
                    mn = "故_" & tbl1(i, 1)         '没名記載
                    x(xr + 2, xc + 6) = "〜" & tbl1(i, 3)
                End If
                x(xr + 1, xc + 6) = Format(tbl1(i, 2), "yyyy.mm.dd")
                my = tbl1(i, 2)   ' 誕生日どこで記載するか? 書かない
            Else                    ' 子供の記載
                If tbl1(i, 2) = "" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Then
                    MsgBox "誕生日が未入力です。" & vbLf & tbl1(i, 1)
                Else
                    cyi = Year(tbl1(i, 2))
                    xr = cyi - nn + 1
                    If tbl1(i, 4) = "M" Then
                        sb = "△"
                    ElseIf tbl1(i, 4) = "F" Then
                        sb = "▼"
                    Else
                        sb = "?"
                    End If
                    If x(xr, xc + 4) <> "" And x(xr - 2, xc + 4) = "" Then
                        x(xr - 2, xc + 4) = x(xr, xc + 4) '年子、年を上に記載
                        x(xr, xc + 4) = ""
                    End If
                    x(xr, xc + 3) = sb & tbl1(i, 1) '記号 +3:記載横位置
                    x(xr + 1, xc + 4) = Format(tbl1(i, 2), "yyyy.mm.dd") '子供の記載
                    scy = Application.Min(xr, scy) '何に使っているか?
                    mcy = Application.Max(xr, mcy)
                End If
            End If
        End If
    Next
    .Cells.ClearContents
    .Range("A1").Resize(UBound(y, 1), 3) = y
    .Range("D1").Resize(UBound(y, 1), xc + 3) = x
    ' C列に西暦を入れるためC1→D1に
    .Range("C1").Resize(UBound(y, 1), 1).Copy .Range("D1").Cells(1, xc + 5)
 End With
End Sub
 データは
 1氏名  不明は?系譜間は一行空白 2生年     西暦 和暦何れか、不明は?	3没年    西暦 和暦何れか、不明は?	4性     M/F/?/未記載	9父母/夫婦何れか       男を先に記す 無記載は子と見なす 	
 [藤沢]乙女	1960/10/9	1971/10/11	F	湘南太郎の母	
 湘南始	S16.12.22	1960/10/19	M	湘南太郎の父	
 湘南藍子	1960/10/1		F		
 湘南太郎	1961/10/1		 	湘南始の子	

 湘南太郎	1961/10/1		M	米子組の夫	
 [米子]組	1947/3/1		F	湘南太郎の妻	

 湘南藍子	1960/10/1	1970/1/1	F	米子 大山の妻	
 [米子]大山	1950/5/3		M	湘南発の父	
 湘南発	1966/10/2				

 清水 富士	?		M	清水乙女の父	
 ?	?			清水乙女の妻	
 清水 乙女	1942/10/9		F	清水富士の子	

 ?	?	1960/10/9	M	米子 組の父	
 [鳥]娘	1940/12/2		F	米子 組の母	
 米子 組	1947/3/1		F		
 米子 大山	1950/5/3		M	鳥 娘の子	

 です。ここにコピーしたのですが 列がそらわないのですが うまくいくかな?
年表記が二つあるのは 没年あり、
結果ですが こぴーできるか不安です

1960.10.09 △清水 富士===▼1? △故_?===▼1[鳥]娘

	|						〜1971/10/11																		|	?		|			?		|	?		|			1940.12.02			
	△故_湘南始===▼1故_[藤沢]乙女																								|			|					|	〜1960/10/09								
	|	1941.12.22																										▼清水 乙女								|						
	|	〜1960/10/19																										|	1942.10.09							|						
				|																																|						
				|																																|						
				|																																|						
				|																																▼米子 組						
				|																																|	1947.03.01					
				|													|																			|						
				|													△[米子]大山===▼1故_湘南藍子																			△米子 大山						
				|													|	1950.05.03																		|	1950.05.03					
				|													|			|																						
				|																|																						
				|																|																						
				|																|																						
				|																|																						
				|																|																						
				|																|																						
				|	1960.10.01															|																						
				▼湘南藍子					|											|																						
				?湘南太郎					△湘南太郎===▼1[米子]組											|																						
				|	1961.10.01				|	1961.10.01					1947.03.01					|			1960.10.01																			
									|			|								|			〜1970/01/01																			
																				|																						
																				|																						
																				?湘南発																						
																				|	1966.10.02																					

コピーがうまくいかないですね。
文章でいうと ▼1故_[藤沢]乙女 や ▼1故_湘南藍子の年表記の位置(赤文字)が不良。
これらは 小生追加のコードが問題なのですが。

===の名前を入れるときに同時に年記載をしようと試みているのですが うまくいかない。
よろしく ご指導くだれれば ありがたいです


Sheet1の父母/夫婦の記載の場合、事例のように女性を先に書き込むと 事例結果のように場所が不適切に成りました。
 順不同にしたいのですが、もし 大変であれば 必ず男性を先に書き込むように制約を設けてよいとはおもいます。
 もし、順不同であってもよければ、子供の婚姻の系譜をカット&コピーで繋げたいので、婚姻関係===の男女の順を書き込み順(先出を左側)にするということが出来れば 幸いです。
そのようなコードにするにはどうしたらよいでしょうか?


 Web上でレイアウトが崩れるのは、気にせず投稿して下さい。
 寧ろ、エクセルから貼り付けたままにしておいてもらう方が良いです。

 ここに nenpyokeifu_2 のコードを載せていたのですが
 nenpyokeifu_3 に書き換えます。

 全て標準モジュールに貼り付けて下さい。

 父母/夫婦で、先に出てきた方を左側にします。

 '------
Sub nenpyokeifu_3()
    Dim tbl1, x, y
    Dim xc As Long, xr As Long, nn As Long
    Dim i As Long, ii As Long
    Dim fyi As Long, cyi As Long, mcy As Long, scy As Long
    Dim p1(3), p2(3)
    Dim sb As String
With Sheets("Sheet1")
    tbl1 = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 5)
    nn = Year(Application.Min(.Range("B:B"))) - 1
End With
    ReDim y(1 To Year(Date) - nn + 1, 1 To 3)
    Call np(y, nn)
With Sheets("Sheet2")
    ReDim x(1 To UBound(y, 1), 1 To Columns.Count)
    xc = 2 '作図の左端D列から
    'xc = 3
    For i = 2 To UBound(tbl1, 1)
        If tbl1(i, 1) = "" Then
            If tbl1(i - 1, 1) <> "" Then
                fyi = psn(nn, p1(2), p2(2))
                xr = fyi - nn + 1
                x(xr, xc) = p1(0) & knm(p1(3), p1(1)) & "===" & p2(0) & knm(p2(3), p2(1))
                x(xr + 1, xc + 1) = sngpse(p1(2), p1(3))
                x(xr + 2, xc + 3) = sngpse(p2(2), p2(3))
            '親の系譜線
                If fyi > nn Then
                    x(xr - 1, xc) = "|"
                End If
                    x(xr + 1, xc) = "|"
                    x(xr + 2, xc) = "|"
            '子の系譜線
                If xr < mcy Then
                    For ii = xr + 2 To mcy + 1
                        If x(ii, xc + 2) = "" Then
                            x(ii, xc + 2) = "|"
                        End If
                    Next
                End If
                'xc = xc + 5 ' コメント この追加数字が系譜幅
                xc = xc + 8
                fyi = 0: cyi = 0
                Erase p1: Erase p2
                scy = UBound(y, 1) + 1: mcy = 0
            End If
        Else
            If tbl1(i, 5) Like "*[父,夫]*" Then
                sb = "△"
                Call pd(tbl1, i, sb, p1, p2)
            ElseIf tbl1(i, 5) Like "*[母,妻]*" Then
                sb = "▼"
                Call pd(tbl1, i, sb, p1, p2)
            Else
                If tbl1(i, 2) = "" Or tbl1(i, 2) = "?" Or tbl1(i, 2) = "?" Then
                    MsgBox "誕生日が未入力です。" & vbLf & tbl1(i, 1)
                Else
                    cyi = Year(tbl1(i, 2))
                    xr = cyi - nn + 1
                    If tbl1(i, 4) = "M" Then
                        sb = "△"
                    ElseIf tbl1(i, 4) = "F" Then
                        sb = "▼"
                    Else
                        sb = "◎"
                    End If
                    If x(xr, xc + 3) <> "" And x(xr - 2, xc + 3) = "" Then
                        x(xr - 2, xc + 3) = x(xr, xc + 3)
                        x(xr, xc + 3) = ""
                    End If
                    x(xr, xc + 2) = sb & knm(tbl1(i, 3), tbl1(i, 1))
                    x(xr + 1, xc + 3) = sngpse(tbl1(i, 2), tbl1(i, 3))
                    scy = Application.Min(xr, scy)
                    mcy = Application.Max(xr, mcy)
                End If
            End If
        End If
    Next
    .Cells.ClearContents
    .Range("A1").Resize(UBound(y, 1), 3) = y
    .Range("D1").Resize(UBound(y, 1), xc + 3) = x
    ' C列に西暦を入れるためC1→D1に
    .Range("C1").Resize(UBound(y, 1), 1).Copy .Range("D1").Cells(1, xc + 5)
End With
End Sub
Private Function knm(bngp, nm)
    If nm = "" Then
        knm = "≪不明≫"
    Else
        If bngp <> "" Then
            knm = "故_" & nm
        Else
            knm = nm
        End If
    End If
End Function
Private Function sngpse(ss, se)
    If ss = "" Then
        sngpse = "≪不明≫〜"
    ElseIf ss = "?" Or ss = "?" Then
        sngpse = ss & " 〜"
    Else
        sngpse = Format(ss, "yyyy.mm.dd") & "〜"
    End If
    If se = "?" Or se = "?" Or se = "" Then
        sngpse = sngpse & fye
    Else
        sngpse = sngpse & Format(se, "yyyy.mm.dd")
    End If
End Function
Private Function psn(nn, fys, mys)
    If fys <> "" Then
        If fys = "?" Or fys = "?" Then
            psn = nn
        Else
            psn = Year(fys)
        End If
    Else
        If mys = "?" Or mys = "?" Or mys = "" Then
            psn = nn
        Else
            psn = Year(mys)
        End If
    End If
End Function
Private Sub pd(tbl1, i, sb, p1, p2)
    If p1(0) = Empty Then
        p1(0) = sb
        p1(1) = tbl1(i, 1)
        p1(2) = tbl1(i, 2)
        p1(3) = tbl1(i, 3)
    Else
        p2(0) = sb
        p2(1) = tbl1(i, 1)
        p2(2) = tbl1(i, 2)
        p2(3) = tbl1(i, 3)
    End If
End Sub
Private Sub np(y, nn)
Dim i As Long
            y(1, 3) = nn
            y(1, 1) = Format(y(1, 3) & "/1/1", "ggg")
            y(1, 2) = Format(y(1, 3) & "/1/1", "e")
    For i = 2 To UBound(y, 1)
            y(i, 3) = y(i - 1, 3) + 1
            y(i, 2) = Format(y(i, 3) & "/1/1", "e")
        If y(i, 2) < y(i - 1, 2) Or y(i, 2) Mod 10 = 0 Then
            y(i, 1) = Format(y(i, 3) & "/1/1", "ggg")
        End If
    Next
End Sub
 '------

 (HANA)

HANAさん
 むずかしいことをたいへんありがとうございました。
 没年を生年と同じ行で生年に続いて書くか 生年の下行に並べるか どちらが最良か なかなか判断いたしかねるのですが、塊に書く方がわかりやすいかとおもうのですが いかがでしょうか?
 もし ご賛同頂ければ 併せて コードを教えてください。(大変虫の良いはなしで怒られそうです)
 いくつか試みたのですが 段々他のところまで変えていくので あきらめました。


 親は下にデータが来る(子が出来る)までに
 20行近く行が開きますので、2段にする行数は
 充分確保出来ると思います。

 しかし、子供はどうするのですか?
 子が続けて有った場合、各個人の年月日を表示させるだけでも問題なのに
 2段必要となると、さらに問題が増えると思いますが
 如何でしょう?

 また、親の話に戻りますが
 「===」の下に「|」が来るように列の幅を整えます。
 すると、列幅によっては、左側の人の年月日が
 右側の人の年月日によって、すべて表示されない可能性が
 でてくるのではないかと思います。

 それらの問題を避けるために、生年没年を続けて書き
 左側の人を名前の下の行に、右側の人をさらにその下の行に書き出しています。

 生年と没年を2段に分けたいご希望は、サンプルを
 載せてくださっているのでわかりますが
 それが色々な問題を含んでいると思いましたので
 現在のコードにしてあります。

 そんな事気にしなくていい。
 (現在は、子は すぐ下に続いた場合、上の行へまわしていますが
  子の場合もそれをするより、2段になっていたほうが良い。)
 と言うのなら、変更しても構いませんが?

 (HANA)


ありがとうございます。そうですね。こどもは結構間隔が狭い場合がありますので
おしゃるとおりに一行で抑えましょう。

 その上で各系譜間が狭いので、10セルとしました。

 さて これで1901以後は良いのですが、1900以前について
1869.1.1 明治 1.1.1(元年とするとどうでしょうか?)と入力する(19690101 より
この方が読みやすいので)場合について 進めたいです。
 その場合 以下のように混在するより分けた方が良いでしょうか?

 1氏名 2生年西暦	3元号	4和暦 5没年西暦	6元号	7和暦	8性M/F/?	9父母 	
 湘南始		明治	16.12.22		昭和	35.10.10	M	湘南太郎の父	

の如くです。 そして前に言われたように 10行目(余裕をみて11、12行目)に
作業セルで変換の年数を記載しても良いです。

 よろしく おねがいします。


 >その上で各系譜間が狭いので、10セルとしました。
 この発言がよく分かりません。

 上でも一度書いていますが、当初のコードは1家族で5列確保しています。

 ◇列幅を調節してもらえれば、以下のように見せる事が出来ます。
12   34     5  
|
△Na.Sho====[Wa]Toku
|1940.12.22
|       |
         |
〜〜〜〜〜〜〜〜〜〜〜〜
         |
         ▼Na.Masa
         |1960.10.01
         △Na.masa
         |1961.10.01

 1列目は、一文字分の幅
 2列目は「====」の下に3列目の「|」が来る幅
 3列目は、一文字分の幅
 4列目は、生年月日が納まる幅

 そして、5列目が 次の家族との空列に成ります。

 1.3.4列目はどの家族でも同じ幅に成ると思いますが
 2列目は左側に来た人の名前の長さによって変わると思います。
 それから、次の家族との間に広い空間を設けたいなら
 5列目の幅を広く設定してもらえれば良いと思います。

 書いて居られる
 >各系譜間が狭いので、10セルとしました。
 これは、1〜4に情報が入り5〜10列目を空き列にする
 と言う事ですよね?

 (HANA)

なるほど 列幅5セルの内のそれぞれ幅を手で調整するということですね。
 ありがとうございます。
2列目の線と記号が入るので、一文字分でした。全幅を(一文字分)2として、その後各4列目だけ調整しました。

 元の    xc = xc + 5  ' コメント この追加数字が系譜幅
に再設定しました。

 享年 没年―生年+1を入れ様とし、
        sngpse = sngpse & Format(se, "yyyy.mm.dd") & "享年" & year
と追加をしたいのですが、
演算は year=seの年―ssの年+1
としては いかがでしょうか
そのときのコードについて助言をおねがいします。
 やや長くなるのが難点ですが 生涯年数がわかりやすいので。

 >なるほど 列幅5セルの内のそれぞれ幅を手で調整するということですね。 
 そうです。
 左側に配置した人の名前の長さによって「===」の位置が変わりますから
 その下に「|」を持ってくるためには 各列毎の調整が
 どうしても必要に成ってくると思いますので。

 >やや長くなるのが難点ですが 生涯年数がわかりやすいので。
 そうですね。良いと思います。

 ご要望としては
  1.1900年以前の年月日にも対応
  2.生涯年数の追加
 が、現在あげられていると思いますが
 何かを思いつかれる度にコードをなおしていくのは大変なので
 他のご希望も有るのなら、今の内に あげておいて下さい。

 そろそろ、完成にしたいと思います。

 どう考えても、後は上記二つが出来れば良いだけなら
 その旨 明記しておいて頂ければと思います。

 (HANA)

2列幅目の調整の意味もわかりました。
 ===を子供に続けるために カット&コピーをするとき、===△などを1セルに入れ様とすると
関数としてのエラーがでます。単なる文字としていれることはできないものでしょうか。
===単独ならコピーができます。(うまくコピーができたかな)

 |									
 |	1960.10.01〜1970.01.01ここ								
 ▼故_藍子================					===	△[米子]大山			
 ?太郎===▼[米子]組			|			1950.05.03〜			
 |	1961.10.01〜		|						
	         1947.03.01〜		|						
			|						
			?発						
			|	1966.10.02〜					

 > 何かを思いつかれる度にコードをなおしていくのは大変なので
 小生の良くない点が出ました。手を加えて直して行くのは 相談される側(HANAさん)には
大いなる負担です。しっかり考えました。

  1.1900年以前の年月日にも対応
  2.生涯年数の追加
 で完了とします。
 よろしく おねがいします


 >===△などを1セルに入れ様とするとエラーがでます
 についてなんですが・・・・
 例えば、以下の様な出力に成ったとします。
 (行列番号はテキトウで、実際はこの様に成ることは有りませんが・・・)
     C  D                E       F  G       H  I               J    K  L          M  N
  1  |
  2  |1960.10.01〜                                                 |
  3  ▼ 湘南藍子                 |                                 ▼故_ 湘南藍子===△ [米子]大山
  4  ◎ 湘南太郎                 △ 湘南太郎===▼故_ [米子]組       |昭和35.10.01〜昭和45.01.01
  5  |昭和36.10.01〜            |昭和36.10.01〜                   |            |昭和25.05.03〜
  6                              |         |昭和?〜昭和40.1.1                  |
  7                                         |                                    |
  8                                         |                                    |
  9                                         |                                    ◎ 湘南発
 10                                         ▼ 湘南 組                           |昭和41.10.02〜
 11                                         |昭和22.03.01〜
 12                                         |
 13                                         △ 湘南 大山
 14                                         |昭和25.05.03〜

 両親の部分は、一つのセルに入っていますね。

 例えば、列の削除などを行わずに
 K3セルを、C3セルに移動させ右側の人の名前が
  N列辺りに来るまで「=」を増やす。
 F3セルを、C4セルに移動させ、右側の人の名前が
  I列辺りに来るまで「=」を増やす。

 それに伴い、F,K列の「|」の削除とH,M列に「|」の追加 左側の人の年月日の位置を調整
 すると、以下のように出来ます。
     C  D                E       F  G    H  I               J       K  L       M  N
  1  |
  2  |昭和35.10.01〜昭和45.01.01
  3  ▼故_ 湘南藍子==============================================================△ [米子]大山
  4  △ 湘南太郎===========================▼故_ [米子]組                      |昭和25.05.03〜
  5  |昭和36.10.01〜                    |昭和?〜昭和40.1.1                  |
  6                                      |                                    |
  7                                      |                                    |
  8                                      |                                    |
  9                                      |                                    ◎ 湘南発
 10                                      ▼ 湘南 組                           |昭和41.10.02〜
 11                                      |昭和22.03.01〜
 12                                      |
 13                                      △ 湘南 大山
 14                                      |昭和25.05.03〜

 間の列は実際は不要に思いますので
 名前をコピー後、不要列を削除し「=」等の調整を行っても良いと思いますが。。。

     C  D                E       F  G               H       I  J
  1  |
  2  |昭和35.10.01〜昭和45.01.01
  3  ▼故_ 湘南藍子============================================△ [米子]大山
  4  △ 湘南太郎===================▼故_ [米子]組           |昭和25.05.03〜
  5  |昭和36.10.01〜            |昭和?〜昭和40.1.1       |
  6                              |                         |
  7                              |                         |
  8                              |                         |
  9                              |                         ◎ 湘南発
 10                              ▼ 湘南 組                |昭和41.10.02〜
 11                              |昭和22.03.01〜
 12                              |
 13                              △ 湘南 大山
 14                              |昭和25.05.03〜

 つまり、どちらも右側の人の名前は、左側の人の名前と
 同じセルに入っています。

 ・・・と言う使用を考えていました。
 ただ、列幅が動くと各セルの「=」を変更して行く必要が有るので大変ですね。

 もしも「=」を単独で入れたいなら
 現在、セルの書式設定が「標準」に成っていると思いますが
 これを「文字列」にしてからやってみて下さい。

 このシートで計算する事は無いと思いますので
 シート全体を選択して 書式設定を変更しておいても
 良いかもしれません。

 こちらのスレは長くなってしまいましたし
 今度のコードは、年号の変換も行っていますので
 もう一つの方へ移動させていただきたいと思います。
[[20090627150504]]『西暦から和暦の変換 あるいは逆変換』(はんにゃ) 

 (HANA)

 >どちらも右側の人の名前は、左側の人の名前と 同じセルに入っています。
 子供の結婚系譜の名前の一セルのみコピーし、元の親子系譜の名前に置き換える。
 そして、===長を調整する なるほど わかりました。
 それでOKです。
 ありがとうございました。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.