- ベストアンサー
エクセル A列500行に入力された文字列を50行ずつ列換えしたい。
エクセル2003です。 A列に文字列が500行ほど入っているシートが20シシートほどあります。シート毎にB列からI列の1行から50行までに50行ずつ移動させ1ページに収めたいのですがその方法を教えて下さい。 50行ずつ切り取り、貼付では時間がかかるのでできれば関数で移動させる方法があれば教えてください。前期高齢者のためマクロはできません。よろしく御願いします
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 前期高齢者のためマクロはできません。 わたしの存じている後期高齢者の方は70の手習いでエクセルを始め、今では立派にマクロを使いこなしてますよ。(わたしが教えました) そのファイルのすべてのシートのA列のデータをB列以降に50行ずつ移動させればいいのでしょうか? それならば簡単ですので以下の手順を試してみてください。 1.AltキーとF11キーを同時におして Visual Basic Editor画面を呼び出します。 2.画面上部のメニューバーから「挿入」、「標準モジュール」で出てきた右側の白い広い部分に以下のコードをコピして貼り付けます。 '*****ここから下をコピペ***** Sub test01() Dim st As Worksheet Dim x As Long, n As Long, i As Long For Each st In Worksheets x = Cells(Rows.Count, "A").End(xlUp).Row n = 1 For i = 51 To x Step 50 n = n + 1 Cells(1, n).Resize(50, 1).Value = Cells(i, "A").Resize(50, 1).Value Next i Range(Cells(51, "A"), Cells(x, "A")).ClearContents Next st End Sub '*****ここより上までをコピー貼り付け***** 3.AltキーとF11キーでワークシートへもどります. 4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行 これでできます。 最初は、ファイルを複製してテストしてみてくださいね。 がんばってください!
その他の回答 (6)
No.1です。マクロといっても、マクロの知識一切なしでできる方法だったのですが……。 関数で、ということですが、関数を使わなくてもできます。500行ぴったしと仮定して、 A B C D ・・・・・K 1 =A1 =A51 =A101・・・ =A451 と、入力し、下に50行分コピーします。 すべてのシートを選択しておいてやると、いっぺんですみます。
お礼
ありがとうございます。
- fujillin
- ベストアンサー率61% (1594/2576)
方法的にはNo.2と同様ですが・・・ 1)下に表示されている各シートのタブをSiftキーを押しながらクリック (シートが作業グループと設定されます) 2)B1セルに以下をコピーペースト =INDIRECT("A" & (COLUMN()-1)*50+ROW()) 3)B1セルを選択し、I列までコピーフィル (右下の■を掴んで、I列までドラッグ) 4)そのまま(B1からI1が選択状態)で、同様に50行目までコピーフィル 以上で、各シートに50行ずつの折り返し表示ができると思います。 場合によっては、未入力部分に「0」の表示が出てしまうかもしれません。 これを消すには、「ツール-「オプション」の「表示」タブで「ゼロ値」のチェックをはずせば表示されなくなります。
補足
回答ありがとうございます。 求めていた関数式です。 しかしながら =INDIRECT("A" & (COLUMN()-1)*50+ROW()) の「(COLUMN()-1)*50+ROW()」の部分はわかるのですが 「"A" &」をつけるとA列の文字列を読むのか理解できません。 可能であればお教え願えればありがたいのですがよろしく御願いします。
- jellya_a
- ベストアンサー率35% (12/34)
例えばですが・・・・ A B C D … 1|***********… 2|50 3|1 51 101 151 … 4|=(mid($A$1,A3,$A$2) 図が見にくいかもしれませんが… A4(表示したいセルに)下記の式を入れます。 =mid($A$1,A3,$A$2) まずA1に文字列が入っているのでここを絶対番地で指定します。 次にA2に何文字で区切るかを記入(今回は50文字なので50)。 ここも絶対番地で指定。 A3,C3,D3 …には文字の始まる位置を記入します。 1,51と打った後はフィルハンドルで451まで引っ張ればOK これでいかがでしょう?
お礼
回答ありがとうございます。 今のところ理解できていませんが勉強させていただきます。
- xls88
- ベストアンサー率56% (669/1189)
余り頭を使わなくても良い方法です。 B1に、#A51 と入力し、B50までフィルコピー(選択枠の右下角の■をドラッグ) #A51 #A52 #A53 ・ ・ ・ #A100 C1に、#A101 と入力し、C50までフィルコピー #A101 #A102 #A103 ・ ・ ・ #A150 B1:C50を選択して、I列までフィルコピー セル範囲選択状態のまま、編集メニューの「置換」で # を = に「すべて置換」 参照式を消して、値にするなら セル範囲選択状態のまま、コピーしてその場で「形式を選択して貼り付け」の「値」を選択して貼り付け 各シートのレイアウトが同じなら、対象シートを複数選択し「作業グループ」化して行えば一気に片きます。
お礼
回答ありがとうございます。 簡単が一番ですが 関数を使って見たかったのです。
- xls88
- ベストアンサー率56% (669/1189)
余り頭を使わなくても良い方法です。 B1に、#A51 と入力し、B50までフィルコピー(選択枠の右下角の■をドラッグ) #A51 #A52 #A53 ・ ・ ・ #A100 C1に、#A101 と入力し、C50までフィルコピー #A101 #A102 #A103 ・ ・ ・ #A150 B1:C50を選択して、I列までフィルコピー セル範囲選択状態のまま、編集メニューの「置換」で # を = に「すべて置換」 参照式を消して、値にするなら セル範囲選択状態のまま、コピーしてその場で「形式を選択して貼り付け」の「値」を選択して貼り付け 各シートのレイアウトが同じなら「作業グループ」化して行えば一気に片付くと思います。
関数でやってもけっこう面倒ですよ。私ならマクロ記録を使います。人間がやった手順を記憶させて、同じことを何度でもやらせることができます。 1つのシートで人間がやってマクロ記録し、別のシートではそのマクロを実行するだけですみます。まあ、シートの数だけ(20回?)やることになりますが……。
お礼
戦中生まれは、横文字を見ただけで頭痛がするのです 関数までは、何とかなりますがマクロは一寸です。
お礼
回答ありがとうございます マクロはどうもです。 戦中生まれには、敵国語に拒否反応があるのです。 機会があったら勉強します。