「このセルを横に2つ分まとめたい」
「ここは縦に結合して見やすくしたい」
「会社の料金表みたいに、きれいな表を作りたい」
ホームページに表(テーブル)を作るとき、こんなふうに思ったことはありませんか?
HTMLには、そんなときに使える便利な属性があります。それが colspan
(コルスパン)と rowspan
(ロウスパン)です。
この記事では、HTMLのテーブルでセルを結合する方法を、初心者にもわかりやすく解説します。これを読めば、見た目のきれいな表を自分で自由に作れるようになりますよ。
テーブルの基本を理解しよう

HTMLテーブルの構成要素
まず、テーブルの基本的な構成を確認しましょう:
<table>
<tr> <!-- 行(Table Row) -->
<th>見出し1</th> <!-- 見出しセル(Table Header) -->
<th>見出し2</th>
</tr>
<tr>
<td>データ1</td> <!-- データセル(Table Data) -->
<td>データ2</td>
</tr>
</table>
基本的な表の例
<table border="1">
<tr>
<th>商品名</th>
<th>価格</th>
<th>在庫</th>
</tr>
<tr>
<td>りんご</td>
<td>100円</td>
<td>あり</td>
</tr>
<tr>
<td>みかん</td>
<td>80円</td>
<td>なし</td>
</tr>
</table>
これが基本的な3列×3行のテーブルです。ここから結合の技術を学んでいきましょう。
テーブルのセルを横に結合する(colspan)
colspanとは?
colspan
は「カラム(列)をいくつ分まとめるか」を指定する属性です。
基本的な使い方
見出しを2列分にまとめる例
<table border="1">
<tr>
<th colspan="2">商品情報</th>
<th>在庫状況</th>
</tr>
<tr>
<td>商品名</td>
<td>価格</td>
<td>在庫数</td>
</tr>
<tr>
<td>りんご</td>
<td>100円</td>
<td>50個</td>
</tr>
</table>
結果の表示
- 1行目:「商品情報」が2列分の幅、「在庫状況」が1列分
- 2行目以降:「商品名」「価格」「在庫数」が並ぶ
実用的な使用例
料金表での活用
<table border="1">
<tr>
<th rowspan="2">プラン</th>
<th colspan="3">料金(税込)</th>
</tr>
<tr>
<th>月額</th>
<th>年額</th>
<th>割引率</th>
</tr>
<tr>
<td>ベーシック</td>
<td>1,000円</td>
<td>10,000円</td>
<td>17%OFF</td>
</tr>
<tr>
<td>プレミアム</td>
<td>2,000円</td>
<td>20,000円</td>
<td>17%OFF</td>
</tr>
</table>
スケジュール表での活用
<table border="1">
<tr>
<th>時間</th>
<th colspan="2">午前</th>
<th colspan="2">午後</th>
</tr>
<tr>
<td></td>
<td>9:00-10:00</td>
<td>10:00-11:00</td>
<td>13:00-14:00</td>
<td>14:00-15:00</td>
</tr>
<tr>
<td>月曜日</td>
<td>会議</td>
<td>企画</td>
<td>開発</td>
<td>テスト</td>
</tr>
</table>
colspanの数値の考え方
<!-- 3列のテーブルで全体を結合 -->
<tr>
<th colspan="3">タイトル(3列分)</th>
</tr>
<!-- 一部だけ結合 -->
<tr>
<th colspan="2">見出し(2列分)</th>
<td>普通のセル</td>
</tr>
重要なポイント
colspan="2"
は「2列分の幅を取る」という意味- その行の他のセルの数も調整が必要
テーブルのセルを縦に結合する(rowspan)
rowspanとは?
rowspan
は「ロー(行)をいくつ分まとめるか」を指定します。
基本的な使い方
カテゴリを2行分にまとめる例
<table border="1">
<tr>
<th rowspan="2">果物</th>
<td>りんご</td>
<td>100円</td>
</tr>
<tr>
<td>みかん</td>
<td>80円</td>
</tr>
<tr>
<th rowspan="2">野菜</th>
<td>にんじん</td>
<td>150円</td>
</tr>
<tr>
<td>たまねぎ</td>
<td>120円</td>
</tr>
</table>
結果の表示
- 「果物」が2行分の高さで表示
- 「野菜」も2行分の高さで表示
実用的な使用例
成績表での活用
<table border="1">
<tr>
<th rowspan="2">生徒名</th>
<th colspan="3">教科</th>
<th rowspan="2">総合点</th>
</tr>
<tr>
<th>国語</th>
<th>数学</th>
<th>英語</th>
</tr>
<tr>
<td rowspan="1">田中太郎</td>
<td>85</td>
<td>90</td>
<td>78</td>
<td>253</td>
</tr>
<tr>
<td>佐藤花子</td>
<td>92</td>
<td>88</td>
<td>95</td>
<td>275</td>
</tr>
</table>
組織図での活用
<table border="1">
<tr>
<th rowspan="3">技術部</th>
<td>フロントエンド</td>
<td>田中</td>
</tr>
<tr>
<td>バックエンド</td>
<td>佐藤</td>
</tr>
<tr>
<td>インフラ</td>
<td>鈴木</td>
</tr>
<tr>
<th rowspan="2">営業部</th>
<td>国内営業</td>
<td>山田</td>
</tr>
<tr>
<td>海外営業</td>
<td>高橋</td>
</tr>
</table>
colspanとrowspanを組み合わせる
複雑な表の作成
<table border="1">
<tr>
<th rowspan="2">部門</th>
<th rowspan="2">役職</th>
<th colspan="3">四半期売上(万円)</th>
<th rowspan="2">年間合計</th>
</tr>
<tr>
<th>Q1</th>
<th>Q2</th>
<th>Q3</th>
</tr>
<tr>
<td rowspan="2">営業部</td>
<td>部長</td>
<td>500</td>
<td>520</td>
<td>480</td>
<td>1500</td>
</tr>
<tr>
<td>主任</td>
<td>300</td>
<td>320</td>
<td>310</td>
<td>930</td>
</tr>
<tr>
<td colspan="2">合計</td>
<td>800</td>
<td>840</td>
<td>790</td>
<td>2430</td>
</tr>
</table>
複雑な結合の設計方法
ステップ1:基本構造を決める
まず、結合なしの基本的な表を設計します:
<!-- 基本構造(結合前) -->
<table border="1">
<tr>
<th>部門</th>
<th>役職</th>
<th>Q1</th>
<th>Q2</th>
<th>Q3</th>
<th>合計</th>
</tr>
</table>
ステップ2:結合箇所を決める
どのセルを結合するかを決めて、設計図を作ります:
|部門(縦2)|役職|Q1|Q2|Q3|合計(縦2)|
|--------|---|--|--|--|--------|
| |主任| | | | |
ステップ3:HTMLに反映
設計図をもとに、colspanとrowspanを設定します。
よく使われる結合パターン
パターン1:L字型の見出し
<table border="1">
<tr>
<th rowspan="2">商品</th>
<th colspan="2">サイズ</th>
</tr>
<tr>
<th>S</th>
<th>M</th>
</tr>
<tr>
<td>Tシャツ</td>
<td>1,000円</td>
<td>1,200円</td>
</tr>
</table>
パターン2:十字型の見出し
<table border="1">
<tr>
<th colspan="2"></th>
<th colspan="2">2025年</th>
</tr>
<tr>
<th colspan="2">商品</th>
<th>上半期</th>
<th>下半期</th>
</tr>
<tr>
<th rowspan="2">食品</th>
<td>りんご</td>
<td>100</td>
<td>120</td>
</tr>
<tr>
<td>みかん</td>
<td>80</td>
<td>90</td>
</tr>
</table>
テーブル結合の注意点とトラブルシューティング

よくある間違いとその対処法
間違い1:セル数の不一致
問題のあるコード
<table border="1">
<tr>
<td colspan="2">A</td> <!-- 2列分 -->
</tr>
<tr>
<td>B</td> <!-- 1列分しかない -->
</tr>
</table>
正しいコード
<table border="1">
<tr>
<td colspan="2">A</td> <!-- 2列分 -->
</tr>
<tr>
<td>B</td>
<td>C</td> <!-- 2列分に合わせる -->
</tr>
</table>
間違い2:rowspanでのセル重複
問題のあるコード
<table border="1">
<tr>
<td rowspan="2">A</td>
<td>B</td>
</tr>
<tr>
<td>A</td> <!-- ← 不要(rowspanで結合済み) -->
<td>C</td>
</tr>
</table>
正しいコード
<table border="1">
<tr>
<td rowspan="2">A</td>
<td>B</td>
</tr>
<tr>
<!-- Aは前の行で2行分指定済みなので不要 -->
<td>C</td>
</tr>
</table>
デバッグのコツ
方法1:段階的に構築
<!-- ステップ1:基本の表 -->
<table border="1">
<tr><td>A</td><td>B</td><td>C</td></tr>
<tr><td>D</td><td>E</td><td>F</td></tr>
</table>
<!-- ステップ2:colspanを追加 -->
<table border="1">
<tr><td colspan="2">A-B</td><td>C</td></tr>
<tr><td>D</td><td>E</td><td>F</td></tr>
</table>
<!-- ステップ3:rowspanも追加 -->
<table border="1">
<tr><td colspan="2">A-B</td><td rowspan="2">C-F</td></tr>
<tr><td>D</td><td>E</td></tr>
</table>
方法2:Excel等での事前設計
複雑な表は、ExcelやGoogleスプレッドシートで先に作成してから、HTMLに移すと間違いが少なくなります。
ブラウザ開発者ツールでの確認
<!-- CSSで結合部分を可視化 -->
<style>
[colspan] { background-color: #ffcccc; }
[rowspan] { background-color: #ccffcc; }
[colspan][rowspan] { background-color: #ccccff; }
</style>
CSSでテーブルを美しくする
基本的なスタイリング
table {
border-collapse: collapse; /* 線を結合 */
width: 100%;
max-width: 800px;
margin: 20px auto;
}
th, td {
border: 1px solid #ddd;
padding: 12px 15px;
text-align: left;
}
th {
background-color: #f5f5f5;
font-weight: bold;
color: #333;
}
tr:nth-child(even) {
background-color: #f9f9f9; /* 縞模様 */
}
結合セルの特別なスタイル
/* colspan使用セルのスタイル */
.header-group {
background-color: #4CAF50;
color: white;
text-align: center;
font-weight: bold;
}
/* rowspan使用セルのスタイル */
.category-cell {
background-color: #2196F3;
color: white;
vertical-align: middle;
text-align: center;
writing-mode: vertical-rl; /* 縦書き */
}
レスポンシブ対応
@media (max-width: 768px) {
table {
font-size: 14px;
}
th, td {
padding: 8px 10px;
}
/* 複雑な結合テーブルをスマホで横スクロール */
.complex-table {
overflow-x: auto;
white-space: nowrap;
}
}
実際の使用例とベストプラクティス

会社の組織図
<table class="org-chart">
<tr>
<th colspan="3">株式会社サンプル</th>
</tr>
<tr>
<th rowspan="2">経営陣</th>
<td>代表取締役</td>
<td>田中太郎</td>
</tr>
<tr>
<td>取締役</td>
<td>佐藤花子</td>
</tr>
<tr>
<th rowspan="3">部門長</th>
<td>技術部長</td>
<td>山田次郎</td>
</tr>
<tr>
<td>営業部長</td>
<td>鈴木三郎</td>
</tr>
<tr>
<td>人事部長</td>
<td>高橋四郎</td>
</tr>
</table>
商品比較表
<table class="comparison-table">
<tr>
<th rowspan="2">機能</th>
<th colspan="3">プラン</th>
</tr>
<tr>
<th>ベーシック</th>
<th>スタンダード</th>
<th>プレミアム</th>
</tr>
<tr>
<td>ユーザー数</td>
<td>最大5人</td>
<td>最大20人</td>
<td>無制限</td>
</tr>
<tr>
<td>ストレージ</td>
<td>10GB</td>
<td>100GB</td>
<td>1TB</td>
</tr>
<tr>
<td rowspan="2">サポート</td>
<td>メール</td>
<td>メール・チャット</td>
<td>24時間電話対応</td>
</tr>
<tr>
<td colspan="3">すべてのプランで日本語対応</td>
</tr>
</table>
時間割表
<table class="schedule-table">
<tr>
<th rowspan="2">時限</th>
<th rowspan="2">時間</th>
<th colspan="5">曜日</th>
</tr>
<tr>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
</tr>
<tr>
<td>1</td>
<td>9:00-10:30</td>
<td>数学</td>
<td>英語</td>
<td>国語</td>
<td>理科</td>
<td>社会</td>
</tr>
<tr>
<td colspan="2">昼休み(12:00-13:00)</td>
<td colspan="5">全学年共通</td>
</tr>
</table>
アクセシビリティを考慮したテーブル
スクリーンリーダー対応
<table>
<caption>2025年第1四半期売上実績</caption>
<thead>
<tr>
<th scope="col" rowspan="2">部門</th>
<th scope="colgroup" colspan="3">月別売上(万円)</th>
<th scope="col" rowspan="2">合計</th>
</tr>
<tr>
<th scope="col">1月</th>
<th scope="col">2月</th>
<th scope="col">3月</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">営業部</th>
<td>500</td>
<td>520</td>
<td>480</td>
<td>1,500</td>
</tr>
</tbody>
</table>
重要な属性
scope="col"
: 列の見出しscope="row"
: 行の見出しscope="colgroup"
: 複数列の見出しscope="rowgroup"
: 複数行の見出しcaption
: テーブルの説明
SEOに配慮したテーブル
構造化データのマークアップ
<table itemscope itemtype="https://schema.org/Table">
<caption itemprop="about">商品価格比較表</caption>
<tr>
<th scope="col">商品名</th>
<th scope="col">価格</th>
<th scope="col">評価</th>
</tr>
<tr itemscope itemtype="https://schema.org/Product">
<td itemprop="name">商品A</td>
<td itemprop="price">1,000円</td>
<td itemprop="rating">★★★★☆</td>
</tr>
</table>
ページ内リンクとの連携
<h2 id="price-table">料金表</h2>
<table aria-labelledby="price-table">
<!-- テーブル内容 -->
</table>
まとめ
HTMLでテーブルのセルを結合する方法をマスターするポイントは以下の通りです:
基本的な使い方
- 横の結合には
colspan
を使用 - 縦の結合には
rowspan
を使用 - 数値は「何列(何行)分の幅を取るか」を指定
設計のコツ
- まず基本構造を決めてから結合を考える
- 複雑な表はExcel等で事前に設計
- 段階的に構築してデバッグ
実用的な活用
- 料金表や比較表での見出し結合
- 組織図やスケジュール表での分類
- CSSと組み合わせて美しいデザイン
注意点
- セル数の不一致に注意
- アクセシビリティを考慮した属性設定
- レスポンシブ対応での表示確認
コメント