以下のように項目名が揃っておらず、そのままでは表計算ソフトになじまないような配列のテキストデータがあります。これを一人分のデータを一列に項目名ごとに配列したデータ(エクセルないしCSV)にしたいのですが、どのような手順を踏むのが最善でしょうか。
更新日 2008/9/18
氏名 両津カンキチ
所属機関 亀有公園前派出所
更新日 2008/9/18
氏名 大空翼
生年月日 1900/1/1
所属機関 ナンカツ小
キーワード サッカー
(以下略、約5000人分)
qa3589110.htmlに類似の質問がありましたが、ピボットではデータ欄で文字列が扱えず、ほかの対処法が思いつきませんでした。Excelは2002を使用しております。どうぞ宜しくお願いいたします。
No.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を右方・下方にフィル
以上ご参考まで。
Kater_Kurz様、この上ないアドバイスをいただき感謝申し上げます。目からうろこが落ちる思いがいたしました。ご教示いただいた方法で作業をしたいと思います。ありがとうございました。
No.4
- 回答日時:
#3です。
#3のお礼に関して>御記載いただいた結果でも、両津の更新
日と氏名がエラー、・・・
私はテスト例ではうまく行きました。回答では、そのシートの内容をコピーして載せています。
$の有無、$のつける場所など中心にチェックしてみてください。
考えを理解して、修正してもらえれば幸いです。
考え方は、各列の該当分に上から連番をフリ、その連番とSheet2の行番号を関連づけているのが特徴です。
あったりなかったりする項目は、その行までの名前の数で、所属番号としています。
imogasi様、お忙しいところ補足をいただき、ありがとうございました。ご教示いただいた方法を参考にさせていただこうと存じます。
No.3
- 回答日時:
これは関数では難問(ややこしい)と思う。
ーー
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文で判別し、エラーの場合は、空白("")でおき変える。
imogasi様、たいへん参考になりました。ありがとうございます。
(5)のindex+match関数についてはこれから勉強したいとおもいますが、とりあえずアドバイスの通り試行してみました。
得られた結果(sheet2)は項目とデータが合致していなかったり、データがあるのにエラー値が出てしまうようです。(御記載いただいた結果でも、両津の更新日と氏名がエラー、翼の更新日欄にキーワード、氏名欄に生年月日、生年月日欄に所属、所属欄に更新日データが反映されているように見えます)。index関数について勉強して修正ができるか考えてみます。
エラー値の非表示についてもアドバイスいただきありがとうございます。とりあえずこのままで問題ありませんが、必要に応じて、ご指示の通り対処したいとおもいます。
詳しい方にご回答いただき大変助かります。心より御礼申し上げます。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Excel(エクセル) エクセル 関数について 2 2022/10/10 07:56
- Visual Basic(VBA) VBAで重複データを確認したい 5 2022/10/07 16:24
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
Excelのセルを飛ばして入力する
-
Excelのオートフィル
-
別シートからの文字を変更
-
Excel 2019 のピボットテーブル...
-
エクセルの行の抽出について質...
-
【マクロ】エクセルにかいてあ...
-
スプレッドシート クエリ関数 1...
-
エクセルでセルに「氏名を入力...
-
MOS365 Excel Expert / Excel R...
-
excelの不要な行の削除ができな...
-
EXACT関数とIF関数の組み合わせ...
-
スプレッドシートの関数VLOOKUP...
-
Excelで全角を半角にしたいので...
-
Excel初心者です。 詳しい方、...
-
エクセルの数式で教えてください。
-
4つのパターンを表示するEXACT...
-
スマートな関数を教えて下さい。
-
【Excel】セル内の時間帯が特定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報