人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

EXCELに関する質問です.
現在A1に「あ」,A2に「い」,A3に「う」と入っています.
この時にB1とB2に「あ」,B3とB4に「い」,B5とB6に「う」
といった感じに簡単に入力する方法を教えてください.
実際のデータは3行ではなく10行程度あり,
それを隣の列に上記のように入力したいわけです.
可能ならば一番上のセルに関数等を入力後に
オートフィルでドラッグするだけでよい方法が理想です.
よろしくお願いします.

●質問者: Naka
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:A1 A3 b2 B4 b6
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Mook
●30ポイント

B1に

=INDIRECT("A"&INT((ROW() +1)/2))

で、B1をコピー、必要な範囲を選択して貼り付けでどうでしょうか。

◎質問者からの返答

ありがとうございます.

例の挙げ方が悪かったのですが,

実際のデータはA4?A9まで,A18?22まで,A32?A36までと

複数のブロックがあるものなので

=INDIRECT("A"&INT((ROW()+4)/2))

として使ってみました.

ただこの場合は最初のブロックはうまくいきますが,

次のブロックは「+18」に直さないとうまく表現されませんでした.

これを一つの式であとはコピペするだけにできないものでしょうか?


2 ● りくっち
●30ポイント

例示の通りの場合、

B1=INDIRECT("A"&ROUND(ROW()/2,0))

以下フィルコピーでご希望の表示が出来ると思います。


http://www.officetanaka.net/excel/function/function/indirect.htm

◎質問者からの返答

ありがとうございます.

例の挙げ方が悪かったのですが,

実際のデータはA4?A9まで,A18?22までと

複数の表があるものなので

=INDIRECT("A"&ROUND(ROW()/2+3,0))

として使ってみました.

ただこの場合は最初のブロックはうまくいきますが,

次のブロックは「+17」に直さないとうまく表現されませんでした.

これを一つの式であとはコピペするだけにできないものでしょうか?


3 ● Mook
●150ポイント ベストアンサー

やはりマクロの方が簡単なようなので、マクロでの回答例です。


コメントの仕様をベースにしました。

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 を実行してください。

元のテーブルの右側に御所望のテーブルが作成されるかと思います。


不明な点は、コメントでご質問ください。

◎質問者からの返答

ありがとうございます.

コメント欄の修正を反映したら完璧でした.

報告書にまとめるデータの整理に大いに役立ちます.


4 ● kaiton
●30ポイント

作業列を2列使いますが関数でできたので貼り付けておきます。

元の表は、コメントの例のように文字の見出しがありその下のデータがあるものとしています。

C5 =IF(B4<>"",IF(ISNUMBER(B4),"",ROW()),"")
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列が希望のデータだと思います。

C列はデータの最初の行に行数を直接入れていただいても良いです。

E,F列の<>""のIF関数はISNUMBERで数字かどうかでも良いような気もします。

小数点以下の表示形式は、

http://allabout.co.jp/computer/msexcel/closeup/CU20070828A/index...

を参考にしてください。

◎質問者からの返答

ありがとうございます.

上で紹介されたマクロが素晴らしかったので

結局試してはいませんがお忙しい中ありがとうございました.

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ