ワープロのように作成されたエクセルデータの変換方法

このQ&Aのポイント
  • エクセルデータをワープロのように作成された形式から独立した行に変換する方法を教えてください。
  • 元のデータは改行で複数のデータが1セルに入力されており、試験の種類も表示したいです。
  • データの変換方法や選択内容毎に別行にする方法についてアドバイスをお願いします。
回答を見る
  • ベストアンサー

ワープロのように作成されたエクセルデータの変換方法

ワープロのように作成されたエクセルデータの変換方法 人から提供していただくエクセルデータをつかって、 自分用のデータを作る必要があるのですが、 元のデータがまるでワープロのようです。  A   |   B    |  C |  D  |  E  | F |  氏名     |選択     |試験1 | 試験2 | 試験3 | 試験4| 山田太郎|数学(改行)物理 |  ○ |  ○  |   ×  | ×   |   試験は数学選択者必須、物理選択者必須、数学と物理選択者必須、どちらかを受験した場合は免除、等でかなりの種類の組合わせ(表の見出し数)があります。 この表を  A  |   B |  C   |  D  |  E  |  F   |  氏名  |選択 |試験1   |試験2  |試験3  |試験4   | 山田太郎|数学  | 試験1○ |試験2○ |試験3 × |試験4 × | 山田太郎|物理  | 試験1○  |試験2○ |試験3 × |試験4 × | としたいです。 元のデータは1セルの中に改行で複数データが入力されています。 このデータをそれぞれ別のものとして、独立した一行にしたいです。 また、クラスによって試験の種類が違うため、○×だけではなく、試験名もセットで表示しておきたいです。 今考えている方法は  | G   | H   | I |   J | K | L   |  | 選択1|選択2 |試験1 |試験2 | 試験3  |試験4   | 数学 |物理  | 試験1○  |試験2○ |試験3 × |試験4 ×   試験種類と同じ数の列を追加して、 ifと&を使って試験名と○×をつなげて表示する。 列を追加して[改行でのデータ区切り]を利用して、B列の内容を1セルずつに区別(G列とH列)する。 という事ですが、 表がとても大きくなってしまいます。 そして、横長にしたデータを次にどうやって選択内容毎に別行のデータにしてよいか困っています。 *実際の選択項目は個人によりばらばらで1~5ほどです。5種選択した人のデータは5行作りたいです。 元データの作り方を変えていただければ一番だとは思うのですが、 なかなかそうもいかないため、自分用のデータになるべく簡単に変換できる方法を探しています。 ぜひアドバイスをお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

別のシートにマクロで写すことを考えました。Sheet2 と Sheet3 に、それぞれ分割されて貼り付けられます。しかし、「今考えている方法は……」の部分の文章が、要望なのか、思考過程なのか分かりません。ただ、違う種類の表が出てきた以上Test2()では作りましたが、 >数学(改行)物理 この部分が必ずしも、二つとは限らないわけですから、表の列が揃わなくなります。したがって、項目名はSh2 にはいれません。マクロ否定なら無視してください。 '// Sub Test1()  Dim sh1 As Worksheet  Dim sh2 As Worksheet  Dim ar As Variant, c As Variant  Dim i As Long, j As Long, col As Long  Set sh1 = Worksheets("Sheet1")  Set sh2 = Worksheets("Sheet2")  With sh1   col = .Cells(1, Columns.Count).End(xlToLeft).Column   If sh2.Cells(1, 1).Value = "" Then .Cells(1, 1).Resize(, col).Copy sh2.Cells(1, 1)   i = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1   Application.ScreenUpdating = False   For Each c In .Range("B2", .Cells(Rows.Count, 2).End(xlUp))    If c.Value <> "" Then   ar = Split(c.Value, vbLf)   For j = 0 To UBound(ar)    sh2.Cells(i, 1).Resize(, col).Value = c.EntireRow.Resize(, col).Value    sh2.Cells(i, 2).Value = ar(j)    i = i + 1   Next    End If   Next   Application.ScreenUpdating = True  End With End Sub '// Sub Test2()  Dim sh1 As Worksheet  Dim sh2 As Worksheet  Dim ar As Variant, ar2 As Variant, c As Variant  Dim i As Long, j As Long, k As Long, t As Long  Dim col As Long  Set sh1 = Worksheets("Sheet1")  Set sh2 = Worksheets("Sheet3")  With sh1   col = .Cells(1, Columns.Count).End(xlToLeft).Column   i = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1   ar2 = Application.Index(.Range("C1", .Cells(1, col)).Value, 1, 0)   Application.ScreenUpdating = False   For Each c In .Range("B2", .Cells(Rows.Count, 2).End(xlUp))    If c.Value <> "" Then   ar = Split(c.Value, vbLf)    sh2.Cells(i, 1).Value = c.Offset(, -1).Value    For j = 0 To UBound(ar)     sh2.Cells(i, 2 + j).Value = ar(j)    Next    sh2.Cells(i, 3 + UBound(ar)).Resize(, col - 1).Value = c.Offset(, 1).Resize(, col - 1).Value    For k = LBound(ar2) To UBound(ar2)    t = LBound(ar)     sh2.Cells(i, 3 + k + t) = ar2(k) & " " & sh2.Cells(i, 3 + k + t)    Next    i = i + 1    End If   Next   Application.ScreenUpdating = True  End With End Sub

mee2001
質問者

お礼

Wendy02様 アドバイスありがとうございました。 まだ自分には使いこなせるレベルにはありませんが、 頂いた内容を読み解きながらこの機会にじっくり取り組んでいきます。 具体的な解決方法をご教示頂いたのでベストアンサーにさせていただきます。

その他の回答 (1)

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

自分用なら…作り直せばOK。 あれこれ考えるよりも、その場で作り直したほうが早く終わります。 別の Sheet にコピーしてそこで編集しましょう。

mee2001
質問者

お礼

Cupper様 回答ありがとうございます。 かなりの量で、また自分用の作業後、人にパスする資料なので・・・ 言葉が足りませんでした。 定期的に必要な作業なので頑張って効率アップさせたいと思います。

関連するQ&A

  • エクセルでのデータ抽出方法について

    Excel2010で、IDと氏名を結びつけたリスト表を作成しようと考えています。 例として以下のようなエクセル表があったとします。 ※列A・列B→ID及び氏名   列D・列E→列A・列Bから抽出したい情報        【列A】    【列B】    【列C】    【列D】    【列E】      【行1】   11111   山田 太郎    -      11119    (※「山田 九郎を」入れたい) 【行2】   11112   山田 二郎    -      11112    (※「山田 二郎を」入れたい)     【行3】   11113   山田 三郎    -       11118    (※「山田 八郎を」入れたい)     【行4】   11114   山田 四郎    -       11114    (※「山田 四郎を」入れたい) 【行5】   11115   山田 五郎              【行6】   11116   山田 六郎                【行7】   11117   山田 七郎           【行8】   11118   山田 八郎 【行9】   11119   山田 九郎         : D列は既に入力済み(確定)で、IDが割り振られている人の氏名をE列に挿入したい場合の エクセルの操作方法について教えていただきたく、よろしくお願いします。

  • エクセルで条件に合ったデータ抽出・自動更新

    エクセルで条件に合ったデータが別のセルに自動に書き出され、元データの更新に応じいつも更新されるようにしたいのです。 A列   B列     C列   D列 No.   会員名   条件1  条件2 1     山田花子  ○    ○ 2    田中太郎  ○   (空白)              ×    ○              (空白) ○ 会員は200人くらい、上記のように条件は4種類です。 この表の外(できれば別シート)に条件が○○の人の名前がずらり、 ×○の人の名前がずらり、というように それぞれの条件に合った人の名前だけが表内の順序どおりに書き出され、 元データを更新すると、条件ごとに書き出した名前も 自動的に(または更新ボタン一つで、) 更新されるようにしたいのです。 マクロはできません どうしたらいいですか?

  • エクセルでデータ抽出→並べ替え

    エクセルで   A列   B列   C列    D列  E列        4月1日 9:00 山田太郎   9:15   佐藤仁  4月1日 10:05 佐藤聡 10:00 鈴木正夫  4月1日 11:15 高橋二郎 11:00 山田勇        4月2日 9:05 渡邊正志 9:15 佐々木正夫        4月2日 10:00 山田太郎  10:15 佐藤仁         4月2日 11:02 佐藤仁   11:00 高橋二郎 という複数の営業マンの訪問予定表があります。この「山田太郎」さんに 月間の訪問予定表を発行したいと思っています。 ※発行対象は全員です。 関数でもマクロでも結構ですが、ご教授いただけると助かります。

  • エクセルでの変換について 2

    エクセルのデータで同じセルに、 例えば、「(株)山田建設ヤマダケンセツ山田太郎」というように、(会社名)(半角カタカナ)(氏名)のデータが入力されている1列のデータがある場合、これを、それぞれ切り分けて、3列のデータに変換することは可能でしょうか?それぞれのデータの文字数は一定ではありません。 間にある半角のカタカナデータをうまく利用すれば、切り分けられるように思うのですが、どうでしょうか?

  • EXCELで条件を満たす時コピー挿入したい

    EXCEL2002ですが、以下のようなデータがあるとします。      A      B 1    山田太郎 100 2    山田花子 100,200,300 3    鈴木一郎 300 B列にカンマ区切りで入力しているデータがある場合、      A      B 1    山田太郎 100 2    山田花子 100 3    山田花子 200 4    山田花子 300 5    鈴木一郎 300 上記のように、B列のカンマ区切り分を振り分けたレコードを新たに 挿入したいのです。 尚参考までに、A列は名前などでデータ内容は多様になり、B列は ある程度決まった選択肢(20~30通り)になります。 一般の関数では無理なような気がするのですが、VBAなどでは可能でしょうか? もし可能であれば、マクロなども組んだことがないものですから、 やさしくご教授いただければ幸いです。 よろしくお願いいたします。

  • エクセル2003のフォームを作成しています。

    エクセル2003のフォームを作成しています。 2点質問があります。 (1) UserForm1にテキストボックス1と2 マルチページの中にテキストボックス3と4があります。 エクセルのシート名はSheet1です。 一例) マルチページ1 テキストボックス1:A100 テキストボックス2:山田太郎 テキストボックス3: テキストボックス4: マルチページ2 テキストボックス1:A100 テキストボックス2:山田太郎 テキストボックス3: テキストボックス4: マルチページ3 テキストボックス1:A100 テキストボックス2:山田太郎 テキストボックス3: テキストボックス4: マルチページ4 テキストボックス1:A100 テキストボックス2:山田太郎 テキストボックス3: テキストボックス4: マルチページ5 テキストボックス1:A100 テキストボックス2:山田太郎 テキストボックス3: テキストボックス4: エクセルのシート(Sheet1)には A     B    C    D   E A100 山田太郎 木村 5000円 担当1 A100 山田太郎 村田 6000円 担当2 A100 山田太郎 江崎 3000円 担当3 A200 田中花子 吉田 4000円 担当1 A200 田中花子 鈴木 1000円 担当2 とデータが続いています。 UserForm1に読込というボタンがあるのですが、クリックしたらシートの A列でA100、B列で山田太郎、かつE列で「担当1」の行の C列の名前をテキストボックス3、D列の金額をテキストボックス4 に表示させるにはどのように書けば良いのでしょうか。 ページ2は、ボタンではなく、ページをクリックした時に 上記と同様のイベント A列でA100、B列で山田太郎、かつE列で「担当2」の行のC列の名前を テキストボックス3、D列の金額をテキストボックス4に表示、 ページ3は、2と同様ページをクリックした時に A列でA100、B列で山田太郎、かつE列で「担当3」の行の C列の名前をテキストボックス3、D列の金額をテキストボックス4 に表示、 以降のページも上記と同様のことをさせたいと思っています。 マルチページは5ページありますが、必ずしもシートに担当5まで あるわけではなく、A100 山田太郎のように、担当が1から3しか シートにデータがない場合は、マルチページの4と5は空欄に ならなければなりません。 (2)ページのタブをクリックした時のイベントの書き方が分かりません。 ページをクリックした時のイベントは、こちらで同じような質問を されている方のを見て、タブをクリックした時のコードをコピーして みまして試してみましたが、無反応でした。 Private Sub MultiPage1_Click(ByVal Index As Long)  'Page2がクリックされた場合  If Index = 1 Then   Load UserForm1   With UserForm1    .StartUpPosition = 0    .Top = 50    .Left = 20    .Show   End With  End If End Sub 分かりづらい説明で申し訳ありませんが、どなたか教えていただけ ませんでしょうか。よろしくお願いいたします。

  • エクセルの貼り付け方

    山田太郎 18才 172cm 中村花子 20才 160cm のように例えば3行ごとにひとまとめのデータをクリップボードにコピーしてあるものを    A   B   C 1 山田太郎 18才 172cm 2 中村花子 20才 160cm のようなデータになるよう貼り付けたいのですが、簡単にする方法はないものでしょうか。(これは例で、ひとまとめが3行とは限りません)  また、逆にこのようなエクセルシートから最初のようにA1 B1 C1 A2 B2 B3の順に各データが改行で連続しているものに戻す方法も知りたいのです。

  • Excelで住所録を作る

    Excelで住所録を作っています。一つのセルに名前を入力したものを、姓と名で分けてとなりの列に表示させるには、どうしたら良いのでしょうか?手入力で分けるには、データが多すぎるので、関数が使えたらいいと思います。名前のデータから苗字だけを取り出す関数はありますか? 表 氏名     姓   名 山田太郎   山田  太郎 こんな感じの表を作りたいです。 Excel2002を使っています。 よろしくお願い致します。

  • Excelで重複データを調べる方法はありますか?

    列の重複データを調べ、隣に設けたセルに○を付ける方法か、名前のセルに色を塗る方法はありますか? 調べても分からなく困っております。どうかよろしくお教えください。    A       B 1 田中 一郎 ○ 2 木村 二郎 3 林 三郎 4 田中 一郎 ○ 5 大口 朝子 ○ 6 山田 太郎 7 大口 朝子 ○

  • エクセル データ作成

    エクセルの資料に関して A列   B列   C列  D列 Aさん  項目1 項目2 項目3 Bさん   Cさん Dさん Eさん ・・・ 仕事の割り振り表を作りたいです。 A列にはメンバーデータ(100人) A列のメンバーをB列C列D列の項目に ランダムで4人ずつ割り振りたいと思います。 それぞれ重複しないように全員を 割り振れる表を作成するにはどうしたらよいでしょうか? 説明がうまくできてないですがよろしくお願いします。

専門家に質問してみよう