[[20251121184513]] 『1行に950個あるデータを、1行13個ずつに区切って』(コピペンギン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『1行に950個あるデータを、1行13個ずつに区切って縦に並べたい』(コピペンギン)

いつもお世話になっております

表題にあるようにランダムデータが一行に950個並んでいるのですが、A4用紙に印刷したい為に1行に1番目〜13番目のデータ、続きを1行空けて下の行に14番目〜26番目
というように950個分を編集したいのですが、良い方法がありますでしょうか?

今までコピーor切り取りで13個ずつ張り付けていたのでそれよりも効率の良い方法があれば教えて頂きたいです

よろしくお願い致します

< 使用 Excel:Excel2019、使用 OS:Windows11 >


追記

会社PCでご相談させて頂いておりますので、土日祝日を挟む為 確認が25日になってしまいます

返事等遅くなりますがよろしくお願い致します
(コピペンギン) 2025/11/21(金) 19:24:42


 Sheet1 の A1〜AMJ1 にデータがあると仮定

 =IF(MOD(ROW(),2)=1,INDEX(Sheet1!$A$1:$AMJ$1(INT((ROW()-1)/2)*13)+COLUMN()), "")

(さんつ) 2025/11/21(金) 21:04:43


以下のVBAでも処理できますが?

Sub Test_OutPut()

    Dim srcS As Worksheet: Set srcS = Worksheets("Sheet1")
    Dim dstS As Worksheet: Set dstS = Worksheets("Sheet2")

    Dim srcRow As Long: srcRow = 1          ' 元データは Sheet1 の 1行目
    Dim srcCol As Long: srcCol = 1          ' A列(1列目)からスタート

    Dim tgtRow As Long: tgtRow = 1          ' Sheet2 の出力開始行
    Dim blockSize As Long: blockSize = 13   ' 13個ずつ出力
    Dim emptyLine As Long: emptyLine = 1    ' ブロック間に1行空ける

    Dim i As Long

    '--- Sheet2 を初期化
    dstS.Cells.ClearContents

    '--- 元データがなくなるまでループ
    Do While Not IsEmpty(srcS.Cells(srcRow, srcCol))

        ' 13個分を Sheet2 の 1列目から順に書き込む
        For i = 1 To blockSize
            dstS.Cells(tgtRow, i).Value = srcS.Cells(srcRow, srcCol + i - 1).Value
        Next i

        ' 次の書き込み位置(1行空ける)
        tgtRow = tgtRow + 1 + emptyLine

        ' 元データの開始列を13列進める
        srcCol = srcCol + blockSize

    Loop

    MsgBox "終了!", vbInformation

End Sub

(稚拙) 2025/11/22(土) 06:04:28


 vba
 Sub test()
    Dim i&
    Const myStep& = 13   '<--- 調整可
    Application.ScreenUpdating = False
    For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column Step myStep
        Cells(Fix(i / myStep) + 2, 1).Resize(, myStep).Value = Cells(1, i).Resize(, myStep).Value   '<--- 値貼り付け 速い
        'Cells(1, i).Resize(, myStep).Cut Cells(Fix(i / myStep) + 1, 1)  '<---コピー 遅い
    Next
End Sub
 
(jindon) 2025/11/22(土) 13:10:35

「エラーになりますよ。」の指摘を受け調べてみたら INDEX の行範囲が抜けていました。
以下のように修正しました。

=IF(MOD(ROW(),2)=1,INDEX(Sheet1!$A$1:$AMJ$1,1,(INT((ROW()-1)/2)*13)+COLUMN()), "")

(さんつ) 2025/11/25(火) 09:30:53


 >INDEX の行範囲が抜けていました。
エラーの原因は第1引数と第2の区切りの , が無いからでは?
INDEX関数の範囲が1行なので行番号は省略可能です
列(行)番号に小数が有ると自動的に切り捨てされるので
INT関数も不要になります
=IF(MOD(ROW(),2)=1,INDEX(Sheet1!$A$1:$AMJ$1,(ROW()-1)/2*13+COLUMN()), "")
(はてな) 2025/11/25(火) 10:13:22

>INDEX関数の範囲が1行なので行番号は省略可能です
勉強になりました。
(さんつ) 2025/11/25(火) 11:17:24

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.