Apple IDログイン機能メンテナンスのお知らせ

縦長の表を2段組みとしたいのですが、下記の条件があります。
Excelで作成することは可能でしょうか。
可能でしたら方法を教えていただけないでしょうか。
よろしくお願いいたします。

①縦長の表を2段組みとしたい。
②表内で並び替えが可能としたい。
③2段組み内の1段の行を削除した場合に空きが出た1段部分に
2段部分のデータが自動で繰り上がるようにしたい。
(例えば2017年1月を削除した場合に2017年8月が自動で繰り上がるようにしたい。)



子供が小さいのでご連絡が遅くなる可能性がありますが、ご回答いただけた方には必ずお返事を致します。
よろしくお願いいたします。

「Excel 2段組み」の質問画像

A 回答 (3件)

こんばんは!



① は画像のような配置ではなく、最初はA~F列だけにデータが羅列してある。
というコトですよね?
それをA~F列は7か月分だけにし、残りはG~L列に移動させたい!という解釈です。

② の「表内での並び替え」とはどの列がキーになるかが判りません。
これに関しては手作業で範囲指定 → 並び替え というコトが可能だと思いますので、今回はスルーします。

③ は仮にA~F列の1か月分(複数ヶ月でも)データを消去した場合にA~F列は上詰め、
G~L列は上詰めした月数分を繰り上げてA~F列に移動させる!という解釈です。

VBAになりますが一例です。
↓のSample① が「①」、Sample③ が「③」のコードになります。

Dim i As Long, cnt As Long
Dim lastRow1 As Long, lastRow2 As Long
Dim myRng1 As Range, myRng2 As Range
Sub Sample①()
If WorksheetFunction.CountIf(Range("A:A"), "小計") > 7 Then
Range("A1").Resize(, 6).Copy Range("G1")
lastRow1 = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow1
If Cells(i, "A") = "小計" Then
cnt = cnt + 1
If cnt = 7 Then Exit For
End If
Next i
Range(Cells(i + 1, "A"), Cells(lastRow1, "F")).Cut Cells(Rows.Count, "G").End(xlUp).Offset(1)
lastRow1 = 0
cnt = 0
End If
End Sub

Sub Sample③()
If WorksheetFunction.CountIf(Range("A:A"), "小計") < 7 Then
lastRow1 = Cells(Rows.Count, "A").End(xlUp).Row
lastRow2 = Cells(Rows.Count, "G").End(xlUp).Row
For i = 2 To lastRow2
If Cells(i, "G") = "小計" Then
cnt = cnt + 1
If cnt = 7 - WorksheetFunction.CountIf(Range("A:A"), "小計") Then Exit For
End If
Next i
Range(Cells(2, "G"), Cells(i, "L")).Cut Cells(lastRow1 + 1, "A")
Set myRng1 = Range(Cells(2, "A"), Cells(lastRow1, "A")).SpecialCells(xlCellTypeBlanks)
Set myRng2 = Range(Cells(2, "G"), Cells(lastRow2, "G")).SpecialCells(xlCellTypeBlanks)
myRng1.Resize(, 6).Delete shift:=xlUp
myRng2.Resize(, 6).Delete shift:=xlUp
lastRow1 = 0
lastRow2 = 0
cnt = 0
End If
End Sub

※ 「小計」までが各月の最終行と見なしています。
すなわち「小計」の数で行数を決めています。m(_ _)m
    • good
    • 0
この回答へのお礼

やってみます

お礼が遅くなり申し訳ありません。

説明不足だったにも関わらず、親切に教えていただきありがとうございます。
子供が熱を出してしまい、会社に出勤できていませんが、
皆さんから教えていただいた事を自分なりに解釈して、技術不足ではありますが、作業をしたいと思います。
本当にありがとうございました。

お礼日時:2017/07/25 22:31

入力表と出力(印刷)表を分けましょう。

それで解決します。
入力シートに1行ずつ縦に並べたものを 出力シートでINDEX関数と
インデックス番号を使って 必要な場所に呼び出すだけでいいのです
から 難しくも何ともありません。
    • good
    • 1
この回答へのお礼

やってみます

ありがとうございました。

お礼日時:2017/07/25 22:31

こんにちは



残念ながらエクセルには「2段組み」のような概念は無いと思います。


もしも、2段組みになさりたい理由が、閲覧や印刷などの利便性を目的とするものであるなら、原本のデータは通常通り1段組みで作成しておいて、閲覧や印刷には別シートで同じ内容が2段組みで表示されているものを利用するという方法がありそうです。

この方法でも、一応、ご質問の①~③を満足できますが、「並び替え」やデータの「削除」・「追加」などの操作は、原本のシートで行うことになります。
原本で操作した結果は、即時に2段組み表示の閲覧用シートに反映できますので、そのような使い方でも良ければこの方法がわかり易いのではないかと思います。

仕組みは単純で、原本シートへのセルの参照設定をしておくだけですが、ごく一般的な参照設定をすると、原本で行の削除をした場合に参照エラーとなったりしますので、INDEX関数やINDIRECT関数などを利用してセルの位置を指定する式にしておくことで、原本シートを自由に操作しても、正しく参照できるようにすることが可能になると思います。

関数式を一度設定してしまえば、あとは気にする必要はない利用法と想像しますので、ご質問の意図に合致しているかどうかは不明ですが、ひとつの方法として…
    • good
    • 0
この回答へのお礼

やってみます

ありがとうございました。

お礼日時:2017/07/25 22:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています