No.1
- 回答日時:
判定するための条件を一つずつ書き出してみましょう。
それができれば、あとはその条件を……
・一つずつ検査させるか、
・まとめて検査を少なく行うか、
になります。
そんなわけで、まずは条件を明確にしてください。
(ここは「代わりにやってくれる場所」ではなく「自力で解決できるアドバイスを貰う場所」です)
No.2
- 回答日時:
すいません。
回答では無いので、興味が無ければ読み捨てて下さい。同じ名字で、一人は”単身”といい、もう一人は”複数”と言い張るような家族はいないんですよね?
そういう意味で、C列って必要ですか?同一名字の行数を数えた方が確実のような気がしますが・・・。
同じ名字で、名義人が複数いるとかも出てきそうで、何となく心配です。事前に整合性のチェックとかした方がよさそうですね!!
No.3
- 回答日時:
=CHOOSE(D2,"高","若")&CHOOSE(C2,"単","複")
あくまでも、例示の通りならですが。
>高齢若年
こんな判定になることあるんですか?書いている条件とは合わないようですが。
それと、アルファベットは「列」です。
No.4
- 回答日時:
a家=2名、b家=1名、c家=2名、d家=1名、e家=5名 で、
区分2の[未婚独身、(未婚独身)ではない]と、区分3の[高齢、若年]とで判定して、判別結果を出すのですね。
区分1は判定や判別には使わないのですね。
名字も判定や判別には使わないのですね。
⑦⑧⑨⑩⑪の「若高」は、どういう判定なのかが分かりません。
②が「高復」と、⑨⑪「若高」とが、分かりません。
⑧⑩に、「高」が付くのが分かりません。
No.5
- 回答日時:
マクロで良いなら提供可能ですが、いかがでしょうか。
あなたのパソコンのexcelがマクロが実行可能になっていることが必要です。
そして、マクロの登録方法を理解していることが必要です。
下記URLを読んで、OKなら、その旨、補足してください。
https://www.tipsfound.com/vba/01004
No.6
- 回答日時:
世帯人数が1名の場合、例ではA列がbのケースです。
区分1=1(名義人)、区分2=1(単身)になるはずですが
区分1=2(同居者)とか
区分2=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.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.9
- 回答日時:
NO.4です。
状況理解が間違っていたのがわかりました。判別は、各行のデータに基づいてするのではなくて、各住居毎の居住者の状況で住居毎にするのですね。
確かに、マクロでやった方が楽そうな気がします。
12/29に【やってみる】と書かれていますね。 正月休みにでもやってみてください。
年末で時間があったもので、excelで作業領域を作って、無理矢理やってみました。 できないわけではなさそうです。
住居の【名義人が同姓同名】であっても、(B列で住居毎の区切りが分かる⇒住居居住人数も分かる)という考えで、やってみました。
やった結果、DGET関数の使い方で、「こう作業列を使えば、利用可能性が増える」ということがわかりました。
EXCEL関数でもできないわけではないとうためだけに、画像を添付します。
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倍と一致すれば全員高齢という判別が可能という点です。
添付画像を参照してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelでASCを使って全角を半角...
-
今まで文字化けなく開けていたc...
-
Microsoft 365Excelの見開きペ...
-
Excel関数について教えてくださ...
-
マクロの処理が遅くなった
-
スプレッドシートで指定された...
-
エクセルの質問です。 F列からL...
-
Excel関数について教えてくださ...
-
エクセルのセル内に分数などの...
-
作成した数式を値として表示し...
-
ワークシートに出現したこの画...
-
条件付き書式設定で罫線を引き...
-
EXCELの散布図で日付が1900年に...
-
シートの情報を別のシートへま...
-
Excelでの文字色
-
【マクロ】VLOOKUPにて参照元に...
-
エクセルの文字が途中から消える
-
エクセルの数式バーのフォント...
-
エクセルでファイルの最終更新...
-
OFFSET関数を使用したいのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報
有る団地の入居者状況調査の集計です
A 家族名
B 名義人、同居者
D 高齢者、高齢者以外
C 単身者、同居者有り
の種別で
世帯内容を
高齢単身世帯、高齢複数人世帯
若年単身世帯、若年複数人世帯
高齢者若年者同居世帯
の五個に種別したいです
同居者の人数は、最高で十人です。
マクロは、大丈夫です
ありがとうございます、やってみます。