データの分析、グラフ作成、および通信のためのツールを備えた Microsoft 表計算ソフトウェアのファミリ。
こんにちは。
シート名や表の配置・構成が不明なので、元のシート名を Sheet1、変更後のシート名を Sheet2 と仮定し、表の配置・構成についても図1、図2と仮定して考えてみました。
※尚、元のシートと変更後のシートを同一のシートとした場合で、同一の表に上書きしたいといった場合には、VBA(マクロ)を使わなければ出来ないかと思います。念のため。
図1 元のシート(Sheet1):A列と B列にデータ入力
図2 変更後のシート(Sheet2):数式の実行結果
- まず、Sheet2 の A1 セルに下記の数式を入れます。
=OFFSET(Sheet1!A$1,INT((ROW(A1)-1)/2),MOD(ROW(A1)-1,2),,)&""
- 次に、この A1 セルの数式を下方向(行方向)に必要なだけコピーします。
コピーする行数は多めでも大丈夫です。
例えば 88行必要でしたら 100行目までコピーしておいても構いません。
<数式の動作概要>
INT 関数と ROW 関数[ INT((ROW(A1)-1)/2) ]で行方向の移動距離を算出し、MOD 関数と ROW 関数[ MOD(ROW(A1)-1,2) ]で列方向の移動距離を算出して OFFSET 関数に渡します。
OFFSET 関数は Sheet1 の A$1 セルを基点として、渡された移動距離にあるセル内容を表示します。
※ INT((ROW(A1)-1)/2) について
ROW(A1) の部分を相対参照を利用した行方向のカウンタとして使います。
ROW(A1) は 1 です。
なので、数式が下方向(行方向)にコピーされると、この INT 関数の結果は、
・INT((ROW(A1)-1)/2) = INT((1-1)/2) = 0
・INT((ROW(A2)-1)/2) = INT((2-1)/2) = 0
・INT((ROW(A3)-1)/2) = INT((3-1)/2) = 1
・INT((ROW(A4)-1)/2) = INT((4-1)/2) = 1
・INT((ROW(A5)-1)/2) = INT((5-1)/2) = 2
・INT((ROW(A6)-1)/2) = INT((6-1)/2) = 2
・
・
と変化していきます。
※ MOD(ROW(A1)-1,2) について
ROW(A1) の部分を相対参照を利用した行方向のカウンタとして使います。
ROW(A1) は 1 です。
なので、数式が下方向(行方向)にコピーされると、この MOD 関数の結果は、
・MOD(ROW(A1)-1,2) = MOD(1-1,2) = 0
・MOD(ROW(A2)-1,2) = MOD(2-1,2) = 1
・MOD(ROW(A3)-1,2) = MOD(3-1,2) = 0
・MOD(ROW(A4)-1,2) = MOD(4-1,2) = 1
・MOD(ROW(A5)-1,2) = MOD(5-1,2) = 0
・MOD(ROW(A6)-1,2) = MOD(6-1,2) = 1
・
・
と変化していきます。
最終的には、図2のような実行結果が得られます。
尚、数式の最後の &"" は、Sheet1 の A列および B列に空白があった場合に数式の結果として数値の 0 が表示されてしまうので、これを空白に変える意味で入れています。
なので、Sheet2 に表示される結果は全て文字列となります。
ご参考になれば幸いです。