
No.10ベストアンサー
- 回答日時:
このご質問の関数での回答を考えるとき、EXCELの知識は当然ですが、ある意味パズルを解く力のようなEXCEL以外の力量が問われているような気がしました。
「若単」「高単」「若複」「高複」「若高」の判別を行うにあたって、当初、他の回答者さんの回答を見ても、単身者世帯の判別は比較的容易だが、若年者および高齢者の複数世帯と高齢者若年者同居世帯の判別がやっかいだと感じていました。
しかし、実際に取り組んでみると、「世帯番号」「世帯人数」を算出すれば関数でも比較的容易に判別できることが判りました。
前提条件は以下のとおりです。
①同姓人は世帯ごとにブロック化されている。
②名義人は世帯プロックの筆頭に記載されている。
判別を行う手順は以下のとおりです。
(1)以下の作業列を用意する
F列に「世帯番号」、G列に「世帯人数」、H列に「D列世帯合計」、I列に「判別記号前部」、J列に「判別記号後部」
(2)以下の数式をそれぞれに記述し、下方向へオートフィル等でコピーする
F2「=COUNTIF($B$1:$B2,1)」
G2「=COUNTIF($F:$F,$F2)」
H2「=SUMIF($F:$F,$F2,$D:$D)」
I2「=IF(($J2="高")+($D2<>1),"若","高")」
J2「=IF($G2=1,"単",IF(($H2=$G2)+($H2=2*$G2),"複","高"))」
(3)判別結果を表示するためE2に以下の数式を記述し、下方向へオートフィル等でコピーする
E2「=$I2&$J2」
これにより、E列に判定結果が表示されます。ただし、入力されているべき項目が「空欄」である等のエラーチェックは行っておりません。
※当然I列、J列は作業列なので必ずしも必要ではなく、E列にいきなり、I列とJ列を結合した数式を記述してもよいのですが、数式が冗長になるので、あえて作業列を使い、後で結合しています。
上記の複数の数式のうち、ポイントはH列に表示する「D列世帯合計」です。
「D列世帯合計」が世帯人数と一致すれば全員若年、「D列世帯合計」が世帯人数の2倍と一致すれば全員高齢という判別が可能という点です。
添付画像を参照してください。

No.9
- 回答日時:
NO.4です。
状況理解が間違っていたのがわかりました。判別は、各行のデータに基づいてするのではなくて、各住居毎の居住者の状況で住居毎にするのですね。
確かに、マクロでやった方が楽そうな気がします。
12/29に【やってみる】と書かれていますね。 正月休みにでもやってみてください。
年末で時間があったもので、excelで作業領域を作って、無理矢理やってみました。 できないわけではなさそうです。
住居の【名義人が同姓同名】であっても、(B列で住居毎の区切りが分かる⇒住居居住人数も分かる)という考えで、やってみました。
やった結果、DGET関数の使い方で、「こう作業列を使えば、利用可能性が増える」ということがわかりました。
EXCEL関数でもできないわけではないとうためだけに、画像を添付します。

No.8
- 回答日時:
No7です。
以下のルールで決定しています。
1.連続した苗字が続く行数を数える。
1行の場合、単身家族、以外は複数家族とする。
2.区分1、区分2の値は、家族構成の決定には関知しない。
3.単身家族の場合、
区分3が1なら、高齢単身世帯 高単
区分3が2なら、若年単身世帯 若単
4.複数家族の場合
区分3が全て1なら、高齢複数人世帯 高複
区分3が全て2なら、若年複数人世帯 若複
上記以外なら、高齢者若年者同居世帯 若高
とします。
5.以下のケースは正常とします。
家族人数が10人を超えた場合でも正常とします。
1つの家族に名義人が複数あっても正常とします。
単身家族でありながら(苗字が1つの場合)、区分=2、又は、区分2=2のデータが
あっても、正常とします。
6.以下のデータは不正データとし、処理を行いません。
エラーの場合、F列にエラーの内容を表示します。
苗字:空白でないこと
区分1:1,2のいずれかであること
区分2:1,2のいずれかであること
区分3:1,2のいずれかであること
No.7
- 回答日時:
以下のマクロを標準モジュールに登録してください。
Option Explicit
Public Sub 家族構成()
Dim sh As Worksheet 'ワークシート
Dim maxrow As Long '最大行数
Dim wrow As Long '処理中の行
Dim kbn1 As Variant '区分1
Dim kbn2 As Variant '区分2
Dim kbn3 As Variant '区分3
Dim ectr As Long 'エラーカウンター
Dim emsg As String 'エラーメッセージ
Dim name As String '苗字
Dim prev_name As String '前回苗字
Dim st_row As Long '家族の開始行
Dim en_row As Long '家族の終了行
Set sh = ActiveSheet
maxrow = sh.Cells(Rows.Count, 1).End(xlUp).row 'sheetの最大行取得
If maxrow < 2 Then Exit Sub
sh.Range("E2:F" & maxrow).Value = ""
ectr = 0
'データのチェック
For wrow = 2 To maxrow
emsg = ""
kbn1 = sh.Cells(wrow, "B").Value
kbn2 = sh.Cells(wrow, "C").Value
kbn3 = sh.Cells(wrow, "D").Value
If sh.Cells(wrow, "A").Value = "" Then
emsg = "苗字空白 "
End If
If kbn1 <> 1 And kbn1 <> 2 Then
emsg = emsg + "区分1 "
End If
If kbn2 <> 1 And kbn2 <> 2 Then
emsg = emsg + "区分2 "
End If
If kbn3 <> 1 And kbn3 <> 2 Then
emsg = emsg + "区分3 "
End If
If emsg <> "" Then
sh.Cells(wrow, "F").Value = emsg
ectr = ectr + 1
End If
Next
If ectr <> 0 Then
MsgBox (ectr & "行分のデータが誤っています")
Exit Sub
End If
'データの処理
prev_name = ""
For wrow = 2 To maxrow
name = sh.Cells(wrow, "A").Value
'前回と苗字が異なる場合
If name <> prev_name Then
'最初でないなら家族構成を出力
If prev_name <> "" Then
Call output(sh, st_row, en_row)
End If
prev_name = name
st_row = wrow '家族の開始行記憶
End If
en_row = wrow '家族の終了行記憶
Next
'家族構成を出力
Call output(sh, st_row, en_row)
MsgBox ("処理終了")
End Sub
Private Sub output(ByVal sh As Worksheet, ByVal st_row As Long, ByVal en_row As Long)
Dim dctr As Long
Dim msg As String
Dim wrow As Long
Dim highP As Long
Dim lowP As Long
'高齢者と若年者をカウントする
highP = 0
lowP = 0
dctr = en_row - st_row + 1
For wrow = st_row To en_row
If sh.Cells(wrow, "D").Value = 1 Then
highP = highP + 1
End If
If sh.Cells(wrow, "D").Value = 2 Then
lowP = lowP + 1
End If
Next
'単身家族の場合
If dctr = 1 Then
If highP = 0 Then
msg = "若単"
Else
msg = "高単"
End If
'複数家族の場合
Else
If highP = 0 Then
msg = "若複"
ElseIf lowP = 0 Then
msg = "高複"
Else
msg = "若高"
End If
End If
'家族の人数分、構成をセット
For wrow = st_row To en_row
sh.Cells(wrow, "E").Value = msg
Next
End Sub
No.6
- 回答日時:
世帯人数が1名の場合、例ではA列がbのケースです。
区分1=1(名義人)、区分2=1(単身)になるはずですが
区分1=2(同居者)とか
区分2=2(同居者有)のケースは、エラー扱いするのですか、
それとも、正常扱いにするのでしょうか。
No.5
- 回答日時:
マクロで良いなら提供可能ですが、いかがでしょうか。
あなたのパソコンのexcelがマクロが実行可能になっていることが必要です。
そして、マクロの登録方法を理解していることが必要です。
下記URLを読んで、OKなら、その旨、補足してください。
https://www.tipsfound.com/vba/01004
No.4
- 回答日時:
a家=2名、b家=1名、c家=2名、d家=1名、e家=5名 で、
区分2の[未婚独身、(未婚独身)ではない]と、区分3の[高齢、若年]とで判定して、判別結果を出すのですね。
区分1は判定や判別には使わないのですね。
名字も判定や判別には使わないのですね。
⑦⑧⑨⑩⑪の「若高」は、どういう判定なのかが分かりません。
②が「高復」と、⑨⑪「若高」とが、分かりません。
⑧⑩に、「高」が付くのが分かりません。

No.3
- 回答日時:
=CHOOSE(D2,"高","若")&CHOOSE(C2,"単","複")
あくまでも、例示の通りならですが。
>高齢若年
こんな判定になることあるんですか?書いている条件とは合わないようですが。
それと、アルファベットは「列」です。
No.2
- 回答日時:
すいません。
回答では無いので、興味が無ければ読み捨てて下さい。同じ名字で、一人は”単身”といい、もう一人は”複数”と言い張るような家族はいないんですよね?
そういう意味で、C列って必要ですか?同一名字の行数を数えた方が確実のような気がしますが・・・。
同じ名字で、名義人が複数いるとかも出てきそうで、何となく心配です。事前に整合性のチェックとかした方がよさそうですね!!
No.1
- 回答日時:
判定するための条件を一つずつ書き出してみましょう。
それができれば、あとはその条件を……
・一つずつ検査させるか、
・まとめて検査を少なく行うか、
になります。
そんなわけで、まずは条件を明確にしてください。
(ここは「代わりにやってくれる場所」ではなく「自力で解決できるアドバイスを貰う場所」です)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
在宅ワークのリアルをインタビュー
ベテラン在宅ワーカーと 在宅ビギナーの方々に、在宅ワークの実情をお教えいただきました。
-
エクセルで、来場人数の集計表を自動で作成したいです。
Excel(エクセル)
-
エクセルで白い枠が触れない、選択できない
Excel(エクセル)
-
EXCELの関数について
Excel(エクセル)
-
4
エクセルの関数を教えて下さい 全データは38000行有ります。 A列は基本データが有ります。 区分1
Excel(エクセル)
-
5
エクセル初心者
Excel(エクセル)
-
6
エクセルの便利機能について教えてください。 現在、私は以下のテクニックを使うことができます。 これら
Excel(エクセル)
-
7
エクセル横列データを縦列に変換(再質問)
Excel(エクセル)
-
8
エクセルで少し複雑な当番表を作成したい。
Excel(エクセル)
-
9
エクセルの関数につて
Excel(エクセル)
-
10
IF関数の複数条件とINDEX関数とMATCH関数を使った長い関数を短くできる?
Excel(エクセル)
-
11
Excel2010でVLOOKUP関数の応用について
Excel(エクセル)
-
12
エクセルで入力した右のセルを他の場所に表示させたいです
Excel(エクセル)
-
13
Excelにて、行の各セルに入力すると別の特定のセルに入力順に新しいデーターへ書き換わる
Excel(エクセル)
-
14
エクセルで日数から年月への変換
Excel(エクセル)
-
15
エクセルについて教えて下さい
Excel(エクセル)
-
16
初歩的なExcelの質問となります
Excel(エクセル)
-
17
Excel関数 足し算
Excel(エクセル)
-
18
Excelに詳しい方教えて下さい。この2つの問題が分かりません。難易度が高い為か他のサイトで質問して
Excel(エクセル)
-
19
エクセルでの進捗管理表について教えてください
Excel(エクセル)
-
20
エクセルに詳しい方、教えて頂けないでしょうか。 64という数字があるとして、60から70までの範囲に
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
excelで1つのセルだけを分割す...
-
5
エクセルでセルが指定できない
-
6
Excel 書式を関数で判断。
-
7
エクセルの2ページ目の作り方
-
8
エクセルが閉じない
-
9
エクセル: セルの枠を超えて表示
-
10
エクセルで文字入力してEnterキ...
-
11
エクセルの計算結果が0になって...
-
12
エクセル 表を大きく、紙いっ...
-
13
エクセルのセル内の余白の設定...
-
14
EXCELでセル内に打った文字が隠...
-
15
エクセルである行以下全部を削...
-
16
関数について。
-
17
Excelで関数のやり方がわかりま...
-
18
エクセル 同じ値を探して隣の...
-
19
Excelで同じセルに箇条書きをし...
-
20
あるセルに特定の文字列を打つ...
おすすめ情報
有る団地の入居者状況調査の集計です
A 家族名
B 名義人、同居者
D 高齢者、高齢者以外
C 単身者、同居者有り
の種別で
世帯内容を
高齢単身世帯、高齢複数人世帯
若年単身世帯、若年複数人世帯
高齢者若年者同居世帯
の五個に種別したいです
同居者の人数は、最高で十人です。
マクロは、大丈夫です
ありがとうございます、やってみます。