現在A1に「あ」,A2に「い」,A3に「う」と入っています.
この時にB1とB2に「あ」,B3とB4に「い」,B5とB6に「う」
といった感じに簡単に入力する方法を教えてください.
実際のデータは3行ではなく10行程度あり,
それを隣の列に上記のように入力したいわけです.
可能ならば一番上のセルに関数等を入力後に
オートフィルでドラッグするだけでよい方法が理想です.
よろしくお願いします.
やはりマクロの方が簡単なようなので、マクロでの回答例です。
コメントの仕様をベースにしました。
Sub makeTable() Dim baseRange As Range Set baseRange = ActiveCell Dim lastLine As Long lastLine = baseRange.End(xlDown).Row Dim startLine As Long startLine = baseRange.Row Dim tableSize As Long tableSize = lastLine - startLine + 1 baseRange.Offset(0, 2).Value = 0 Dim i As Long Dim dSum As Double For i = 0 To tableSize - 1 dSum = dSum + baseRange.Offset(i, 0).Value baseRange.Offset(2 * i + 1, 2).Value = dSum baseRange.Offset(2 * i + 2, 2).Value = dSum baseRange.Offset(2 * i, 3).Value = baseRange.Offset(i, 0).Value baseRange.Offset(2 * i + 1, 3).Value = baseRange.Offset(i, 0).Value Next baseRange.Offset(tableSize * 2, 2).Value = "" End Sub
シートのタブを右クリック⇒コードの表示をし、コードを貼り付けてください。
(ファイルのバックアップをとってから実行してください。)
元となる表の左上の数値を選択した状態で、Alt+F8 を押し、makeTable を実行してください。
元のテーブルの右側に御所望のテーブルが作成されるかと思います。
不明な点は、コメントでご質問ください。
B列でソートしなおして ソートキーを削除
B列は 別のシートにしたほうがいいかも。
ソートキーを削除してから 元のシートに貼り付ければいいでしょう。
それを他のセルで指定するようなことは可能ですが、表の範囲に規則性はあるのでしょうか。
A4~A9まで,A18~22まで・・・、以降の部分の規則を明示いただければ対応も可能かと思います。
VBA、マクロじゃないと
|*厚み|*密度|
|10.4|0.20|
|10.2|0.15|
|10.6|0.10|
|10.5|0.15|
|10.7|0.20|
という表から
|*厚み累計|*密度|
|0.0|0.20|
|10.4|0.20|
|10.4|0.15|
|20.6|0.15|
|20.6|0.10|
|31.2|0.10|
|31.2|0.15|
|41.7|0.15|
|41.7|0.20|
|52.4|0.20|
という表を生成したいのです.
厚み累計と密度は別の表で計算してあるので
質問したような方法で下の表を完成させたいと思います.
そのため基準セルは各ブロックの左上隅になります.
基準行が変わったときの行番号を変数として関数に取り込めれば
一つ設定したものをコピペで何とかなると思うのですが
どうやってもうまいのが思いつきません.
アドバイスよろしくお願いします.
これで関数の場合もう狂ってきちゃいます…。
少し時間できたら再チャレンジしてみますので、
しばらくお待ちいただけるようならまだ締めないでおいてください。
離脱します~
全てA列の数値を基準に算出してしまうようです。
C5 =IF(B4<>"",IF(ISNUMBER(B4),"",ROW()),"") >数字データの最初の行数を求める(1行上は文字データ?としている)
D5 =IF(C5>0,C5,IF(D4<>D3,D4,D4+1)) >元データからとってくる行数を求める
E5 =IF(INDIRECT("A"&D5)<>"",IF(C5>0,0,IF(D5<>D6,E4+INDIRECT("A"&D4),E4)),"")
>厚み累計を求める
F5 =IF(INDIRECT("B"&D5)<>"",INDIRECT("B"&D5),"")
>所定の密度を取得する
これを下にコピー、E,F列が希望のデータだと思います。
どこでしょうか。
例えばテーブルが D11:E20 にあって、D11を選択してから実行すれば
F11:G30 に結果がでませんか?
ご指摘ありがとうございます。
baseRange.Offset(2 * i, 3).Value = baseRange.Offset(i, 0).Value
baseRange.Offset(2 * i + 1, 3).Value = baseRange.Offset(i, 0).Value
は
baseRange.Offset(2 * i, 3).Value = baseRange.Offset(i, 1).Value
baseRange.Offset(2 * i + 1, 3).Value = baseRange.Offset(i, 1).Value
でした。