アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のように項目名が揃っておらず、そのままでは表計算ソフトになじまないような配列のテキストデータがあります。これを一人分のデータを一列に項目名ごとに配列したデータ(エクセルないしCSV)にしたいのですが、どのような手順を踏むのが最善でしょうか。

更新日 2008/9/18
氏名 両津カンキチ
所属機関 亀有公園前派出所
更新日 2008/9/18
氏名 大空翼
生年月日 1900/1/1
所属機関 ナンカツ小
キーワード サッカー
(以下略、約5000人分)

qa3589110.htmlに類似の質問がありましたが、ピボットではデータ欄で文字列が扱えず、ほかの対処法が思いつきませんでした。Excelは2002を使用しております。どうぞ宜しくお願いいたします。

A 回答 (5件)

>項目を網羅したものを拾うところまではできます。


ということなので、それは省略します。

以下、元のデータが【A2セル以下】にあるとします。
※1行目は空けておきます

1.項目名の切り出し
 B2: =LEFT(A2,FIND(" ",SUBSTITUTE(A2," "," "))-1)

2.更新日の行でカウントアップして誰のデータかナンバリング
 C2: =C1+(B2="更新日")

3.ナンバーと項目名から一意なキーを生成
 D2: =C2&"_"&B2

4.データ部分の切り出し
 E2: =TRIM(SUBSTITUTE(A2,B2,""))

5.B2~E2を下方にフィル

6.F1,G1,H1,……に項目名を書き出す(手打ち)

7.行番号と項目名に応じてデータをルックアップ
 F2: =VLOOKUP((ROW()-1)&"_"&F$1,$D:$E,2,0)

8.F2を右方・下方にフィル

以上ご参考まで。
    • good
    • 0
この回答へのお礼

Kater_Kurz様、この上ないアドバイスをいただき感謝申し上げます。目からうろこが落ちる思いがいたしました。ご教示いただいた方法で作業をしたいと思います。ありがとうございました。

お礼日時:2008/09/20 14:58

#3です。

#3のお礼に関して
>御記載いただいた結果でも、両津の更新
日と氏名がエラー、・・・
私はテスト例ではうまく行きました。回答では、そのシートの内容をコピーして載せています。
$の有無、$のつける場所など中心にチェックしてみてください。
考えを理解して、修正してもらえれば幸いです。
考え方は、各列の該当分に上から連番をフリ、その連番とSheet2の行番号を関連づけているのが特徴です。
あったりなかったりする項目は、その行までの名前の数で、所属番号としています。
    • good
    • 0
この回答へのお礼

imogasi様、お忙しいところ補足をいただき、ありがとうございました。ご教示いただいた方法を参考にさせていただこうと存じます。

お礼日時:2008/09/20 15:00

これは関数では難問(ややこしい)と思う。


ーー
VBA向きの課題と思う。
プログラムが組めれば、項目ID(例 氏名、キーワードなど)によって、所定列に振り分けれは済む。ただし、どの人の項目か注意が必要。人によって、データのない項目があるようだから。
ーーー
関数で考えてみた。複雑なので、付いてこれるかな。また件数も多いようなので、関数設定数セル数も多くなるので、エクセルが動かないといった事態もあるかもしれない。
ーー
氏名はデータの1人分の塊の中で、必ずあるものと仮定。
下記で説明している関数式は、99行までの例にしている。5000人なら範囲の終わりを5000x項目数予想数に、そのように修正すること。
ーー
(1)エクセルにデータを読み込み(人手でエクセル操作)
A列のデータになる。
(2)姓と名の間にスペースがあれば、
姓+スペース==>姓+特殊記号(%など)で置換する。質問例では
姓と名は詰まっているようだ。なので下記説明では省略。置き替えた場合は、作業の終了後、氏名列で%-->スペースに置き換えること。下記(3)で姓と名が別列になり、困るのでこういうことをする。
(3)データー区切り位置、の操作で、項目名とデータに分離
(人手でエクセル操作)
A列+B列のデータになる。
(4)項目名について、何番目の人のデータなのか、割り出し番号化
(関数式作成)
(5)Sheet2で(4)の番号を元に、項目を横方向に考え、
データをSheet1のB列から組み替え。(関数式作成)
ーー
例データ
下記は(3)を終わった状態から説明
当初はA列+B列にデータあり。
E-J列は下記で説明する式で出来た結果(を先回り表示した部分)
更新日氏名生年月日所属機関更新日キーワード
更新日2008/9/1811
氏名両津カンキチ1
所属機関亀有公園前派出所1
更新日2008/9/1822
氏名大空翼2
生年月日1900/1/11
所属機関ナンカツ小2
キーワードサッカー2
更新日2008/10/1833
氏名三浦健3
更新日2008/10/1844
氏名三浦勇4
所属機関ナンカツ小4
キーワード空手4
ーーーーーー
E1:J1に
氏名生年月日所属機関更新日キーワード
を入力しておくこと(式の中で参照しているので必須)。更新日を最初にしてないのは、氏名を主にしたことから来る事情によるもの。
E2の式
=IF(MID($A2,1,LEN(E$1))=E$1,MAX(E$1:E1)+1,"")
下方向に式を複写。
結果
上記E列
F2の式
=IF(MID($A2,1,LEN(F$1))=F$1,COUNTIF($A$2:$A2,"氏名"),"")
この式を下方向に式を複写。
G2の式
=IF(MID($A2,1,LEN(G$1))=G$1,COUNTIF($A$2:$A2,"氏名"),"")
H2の式
=IF(MID($A2,1,LEN(H$1))=H$1,COUNTIF($A$2:$A3,"氏名"),"")
I2の式
=IF(MID($A2,1,LEN(I$1))=I$1,COUNTIF($A$2:$A3,"氏名"),"")
それぞれ下方向に式を複写。
結果
上表のとおり。
ーーーーーーーーーーーー
Sheet2に行って
A1:E1に
更新日氏名生年月日所属機関キーワード
を入れる。項目見出し。
A2に
=INDEX(Sheet1!$A$1:$B$100,MATCH(ROW()-1,Sheet1!$I$1:$I$100,0),2)
B2に
=INDEX(Sheet1!$A$1:$B$100,MATCH(ROW()-1,Sheet1!$F$1:$F$100,0),2)
C2に
=INDEX(Sheet1!$A$1:$B$100,MATCH(ROW()-1,Sheet1!$G$1:$G$100,0),2)
D2に
=INDEX(Sheet1!$A$1:$B$100,MATCH(ROW()-1,Sheet1!$J$1:$J$100,0),2)
E2に
=INDEX(Sheet1!$A$1:$B$100,MATCH(ROW()-1,Sheet1!$I$1:$I$100,0),2)
ト入れて下方向に式を複写。
結果
更新日氏名生年月日所属機関キーワード
#N/A#N/A亀有公園前派出所#N/A#N/A
サッカー1900/1/1ナンカツ小2008/9/18サッカー
#N/A#N/A#N/A2008/10/18#N/A
空手#N/Aナンカツ小2008/10/18空手
#N/A#N/A#N/A#N/A#N/A
ーー
#N/Aを出さないようにするには、長くなるので説明を省くが、
下方向のものはGoogleでimogasi方式で照会すると出てくる
例の中に説明している。
途中の存在しない項目の#N/AはISERRORなどで、エラーを捉え、IF文で判別し、エラーの場合は、空白("")でおき変える。
    • good
    • 0
この回答へのお礼

imogasi様、たいへん参考になりました。ありがとうございます。
(5)のindex+match関数についてはこれから勉強したいとおもいますが、とりあえずアドバイスの通り試行してみました。
得られた結果(sheet2)は項目とデータが合致していなかったり、データがあるのにエラー値が出てしまうようです。(御記載いただいた結果でも、両津の更新日と氏名がエラー、翼の更新日欄にキーワード、氏名欄に生年月日、生年月日欄に所属、所属欄に更新日データが反映されているように見えます)。index関数について勉強して修正ができるか考えてみます。
エラー値の非表示についてもアドバイスいただきありがとうございます。とりあえずこのままで問題ありませんが、必要に応じて、ご指示の通り対処したいとおもいます。
詳しい方にご回答いただき大変助かります。心より御礼申し上げます。

お礼日時:2008/09/19 21:51

項目には一貫性がないのでしょうか?



あとテキストデータの区切りは半角スペース?全角スペース?
    • good
    • 0
この回答へのお礼

ありがとうございます。項目は一貫していませんが、共通項目もあるので、項目を網羅したものを拾うところまではできます。区切りには規則性はかならずしもありませんが、半角スペースの箇所が多いようなので、項目名/データ間に区切りを入れることに関しては対応できます。

お礼日時:2008/09/19 20:56
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。ただ今回の難点はCSV⇔Excelの互換性にではなく、項目のずれにあります。

お礼日時:2008/09/19 20:51

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