- ベストアンサー
EXCELのデータを変換
こんにちは。 早速ですが質問です。 あるセルに A B 1 9:00-16:00 17:00-21:00 2 12:00-21:00 などと文字列のデータが入っていて そこから別のシートに A B 1 9:00 17:00 2 16:00 21:00 3 12:00 4 21:00 というデータに変換したいのですが どのような手順をすべきでしょうか? 数式だけでできるならありがたいです。 一応マクロやVBAも少しはわかりますが・・ 皆様よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
仮に、元データーが入力されている範囲を、シートをSheet1のA1~E8、表示を行うシートをSheet2とします。 Sheet2のA1セルには =IF(ISERR(FIND("-",INDEX(Sheet1!$A$1:$E$8,(ROWS($A$1:A1)+1)/2,COLUMNS($A$1:A1)))),"",LEFT(INDEX(Sheet1!$A$1:$E$8,(ROWS($A$1:A1)+1)/2,COLUMNS($A$1:A1)),FIND("-",INDEX(Sheet1!$A$1:$E$8,(ROWS($A$1:A1)+1)/2,COLUMNS($A$1:A1)))-1) Sheet2のA2セルには =IF(ISERR(FIND("-",INDEX(Sheet1!$A$1:$E$8,ROWS($A$1:A2)/2,COLUMNS($A$1:A2)))),"",RIGHT(INDEX(Sheet1!$A$1:$E$8,ROWS($A$1:A2)/2,COLUMNS($A$1:A2)),LEN(INDEX(Sheet1!$A$1:$E$8,ROWS($A$1:A2)/2,COLUMNS($A$1:A2)))-FIND("-",INDEX(Sheet1!$A$1:$E$8,ROWS($A$1:A2)/2,COLUMNS($A$1:A2))))) という数式を入力して下さい。 Sheet2のA1セルとA2セルへの数式の入力が済みましたら、その2つのセルを、まとめて範囲選択した後、Excelのオートフィル機能を使って、Sheet2のA3~A8セルに、数式をコピーして下さい。 次に、Sheet2のA1~A8の範囲を、まとめて範囲選択した後、Excelのオートフィル機能を使って、Sheet2のB1~E8の範囲に数式をコピーして下さい。 以上で完了です。
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート2のA1セルに次の式を入力してB1セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(INDEX(Sheet1!A:A,ROUNDUP(ROW(A1)/2,0))="","",IF(MOD(ROW(A1),2)=1,LEFT(INDEX(Sheet1!A:A,ROUNDUP(ROW(A1)/2,0)),FIND("-",INDEX(Sheet1!A:A,ROUNDUP(ROW(A1)/2,0)))-1)*1,MID(INDEX(Sheet1!A:A,ROUNDUP(ROW(A1)/2,0)),FIND("-",INDEX(Sheet1!A:A,ROUNDUP(ROW(A1)/2,0)))+1,6)*1)) なお、この式では得られるデータはシリアル値が表示されますのでA列とB列を選択してからセルの書式設定の表示形式で時刻を選ぶことが必要です。 シリアル値にしないのでしたら上の式で*1を取ります。
- okormazd
- ベストアンサー率50% (1224/2412)
はじめのデータがSheet1のA,B列にあるとして、 Sheet2のA,B列に移す。 Sheet2のA1に =LEFT(OFFSET(Sheet1!$A$1,INT((ROW()-1)/2),COLUMN()-1),FIND("-",OFFSET(Sheet1!$A$1,INT((ROW()-1)/2),COLUMN()-1))-1) A2に =MID(OFFSET(Sheet1!$A$1,INT((ROW()-1)/2),COLUMN()-1),FIND("-",OFFSET(Sheet1!$A$1,INT((ROW()-1)/2),COLUMN()-1))+1,10) で、 A1:A2を選択して、 右と下にフィルドラッグする。
- hallo-2007
- ベストアンサー率41% (888/2115)
>どのような手順をすべきでしょうか? とりあえず、文字列から時間に変換してみては 別途、新しいシートを準備しておいて A B 1 9:00-16:00 17:00-21:00 2 12:00-21:00 をコピィします。 データ=>区切り位置=>ウィザードのカンマや区切り文字・・・にチェックを入れて次へ スペースとその他の文字にチェック その隣に - の文字を入れて OKすれば A B C D 1 9:00 16:00 17:00 21:00 2 12:00 21:00 ・・・となりますので試してみてください。 必要なコードはマクロの記録で得られると思います。 A B 1 9:00 17:00 2 16:00 21:00 3 12:00 4 21:00 のルールが今一わからないのですがVBAで繰り返しの作業で必要なシートに値を引っ張ってくれば良いはずです。
お礼
ありがとうございました。 無事作成することができました。