スプレッドシートの縦・横を入れ替える

Home    Workbench

<縦・横の入れ替え>

八王子市から届く健康診査結果は縦に項目が並んでいるので、エクセルでもそれに合わせて列(column)に記入してきました。 しかしデータがたまってくると1ページに収まらなくなります。文字を小さくし、A4横で表示すればいいのですが、横にスクロールして年次変化を辿る操作はどうもしっくりこない。 そこでエクセルシートの縦と横を入れ替えることにしました。 結果を先にご覧に入れます。右図がそれです。今後新規の検査データはこちらに記入していきます。 次にこのファイルの作成手順を説明します。

  1. エクセル上でスプレッドシートを CSV 形式で出力する。
  2. プログラム ij2ji を起動する。
    1. ファイルを1行ずつ読み込む。
    2. すべての行を読み込んで配列 A[i,j] を完成させる。
    3. A[i,j]を tmp[i,j] に複成する。
    4. i> j についてA[j,i]:=A[i,j] を実行する。
    5. i< j についてA[j,i]:=tmp[i,j] を実行する。
    6. 別の CSV ファイルで出力する。
  3. エクセルでCSVファイルを読み込みXLSXで保存する。
なお VBA を使えばCSVは不要ですが、筆者は慣れを優先しました。

<スプレッドシートの縦・横を入れ替える>

<CSVファイルの読み込み>

セルの入れ替えそのものは簡単にできますが、ファイルの読み込みは一筋縄ではいきません。 文字配列変数の line をFIO.RdStr で1行ずつ読み込んだあと、line をコンマで区切って行データを 生成していくのですが、 ファイルに構造があると要注意です。右のテストデータで例を示します。

図の上は test.xlsx というエクセルファイルで(5行)、次の構造があります。

  1. ALT+ENTER で改行させたデータ (A2, A5)。
  2. 複数のセルの結合(A1-B1)。
  3. コンマを含むデータ(B2, B5)。
図の下は Notepad++ で見た CSV ファイルです(7行)。行数が増えたのは項目1のためですのでセル内の改行コードは XLSX 内で削除することにしました。 項目2については特別の対応は必要ありません。項目3の意味は、" で挟まれた部分は一つのセルのデータであるということです 。 これらを考慮して itemFromLine 関数を作りました。
<構造をもったCSVファイル>

4-25-2026, S. Hayashi