[[20180328175319]] 『1行を複数行に分けるマクロの組み方』(mm) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『1行を複数行に分けるマクロの組み方』(mm)

 1行を複数行に分けるマクロの組み方を知りたいです。

 下記のような項目があるとします。

 A1会社名 B1部署 C1役職 D1氏名 E1会社名02 F1 部署02 G1役職02 H1氏名02

 これを↓

 A1会社名  B1部署  C1役職  D1氏名
 A2会社名02 B2部署02 C2役職02 D2氏名02

 2行目に情報を入れたいです。
 Range("2:3").Insert のようなマクロを使うのかとは思うのですが…
 実際には1行に40項目ほどあり、列も100列ほどあります。

 お力添えを頂けましたら幸いです。
 宜しくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 初期状態では、2行目はどうなっているんですか?(更に、3,4、・・行目は?)

 発想を変えると、新規シートに順に書き込んで行った方が楽だと思うんですが、
 そんな手法は採れませんか?

 ※「mmさん」と言うHNは、常連回答者にもいるので、
     次回投稿時からは、別名にして頂くと何かと有り難いです。

(半平太) 2018/03/28(水) 19:03


>実際には1行に40項目ほどあり、列も100列ほどあります。
そのまんま読むと、1行あたり2セットか、3セット分のデータしかないように思うんですが?

1列目〜40列目、41列目〜80列目、81列目〜120列目 がそれぞれ1つのレコードってことですよね
それって、手作業でコピペしても5分くらいで出来ちゃいません?
(後でソートするなど、元々の順番にこだわらないなら)

半平太さんのおっしゃるとおり、別シートに貼り付けるなら、
A1〜AN?をコピペして
AO1〜CB?をコピペして
CC1〜DP?をコピペで終了
ってことになっちゃいますよね。これマクロで処理する必要あります?
(もこな2) 2018/03/28(水) 19:17


マクロでやるとすると、こんな感じでしょうか?
(A1からデータが入ってるとして、元々の並び順にこだわる場合。)

    Sub Sample()
        Dim 行 As Long, 列 As Long
        Dim i As Long
        Dim dstSH As Worksheet

        Set dstSH = ThisWorkbook.Worksheets.Add

        With ActiveSheet
            For 行 = 1 To .UsedRange.Rows.Count
                For 列 = 1 To 81 Step 40
                    i = i + 1
                    .Range(.Cells(行, 列), Cells(行, 列 + 39)).Copy dstSH.Cells(i, "A")
                Next 列
            Next 行
        End With
    End Sub
(もこな2) 2018/03/28(水) 19:56

半平太様
 もこな2様

 ご回答ありがとうございます。
 この作業を日々行うものであるので、
 繰り返し行う作業としては非効率だと思うのでマクロに、と思った次第です。

 省略して記載しましたが会社名 部署 役職 氏名が、01〜07までそれぞれあるので28列はあります。
 2行目以降のデータとしても、01〜07の項目が埋まっている所もあれば埋まっていないデータとして100行ほどあります。

 HNにつきまして、お教えいただきありがとうございます。

 お教えいただきましたマクロをそのまま貼り付けたところ、
 白紙のシートが増えただけとなってしまいました。。
(mm) 2018/03/29(木) 10:49


>お教えいただきましたマクロをそのまま貼り付けたところ、白紙のシートが増えただけとなってしまいました。
 べつにこうしたらどうですかって意味じゃなくて、もしコード化するならこんな感じでは?って言いたくてやっつけコードを投稿したんですが、記述漏れと処理の考え方をミスってたので、追加してアクティブになってるシートに自分自身の内容をコピペするという意味の無いことやってましたね。失礼しました。
ということで、修正です。
    Sub Sample()
        Dim 行 As Long, 列 As Long
        Dim i As Long
        Dim srcSH As Worksheet
            Set srcSH = ActiveSheet
        Dim dstSH As Worksheet
            Set dstSH = ThisWorkbook.Worksheets.Add

        With srcSH
            For 行 = 1 To .UsedRange.Rows.Count
                For 列 = 1 To 81 Step 40
                    i = i + 1
                    .Range(.Cells(行, 列), .Cells(行, 列 + 39)).Copy dstSH.Cells(i, "A")
                Next 列
            Next 行
        End With
    End Sub

>省略して記載しましたが会社名 部署 役職 氏名が、01〜07までそれぞれあるので28列はあります。
>2行目以降のデータとしても、01〜07の項目が埋まっている所もあれば埋まっていないデータとして100行ほどあります。
最初と言ってることが変わっちゃってますし、Excel君(回答者も)にしてみれば、入ってるデータが”会社名01”なのか"氏名07"なのかはどうでもよくて、大事なのは1レコード(1つあたりのデータの範囲)がどこからどこまでなのか、また、それをどうしたいのか(貼り付けるたり、削除したり)ということに絞って、整理したうえで、処理を考えていくとよいとおもいます。
(もこな2) 2018/03/29(木) 12:28


もこな2様

 ありがとうございます!
 整理できずにお伝えしてしまい申し訳ございませんでした。
 行いたい意図を汲み取ってくださりありがとうございます。

 助かりました!
 ありがとうございます。
(mm) 2018/03/29(木) 13:39


すみません、もっと複雑になりそうなので
行いたいことを自分でももう少し整理して
再度投稿したいと思います。
(mm) 2018/03/29(木) 13:53

コメント返信:

[ 一覧(最新更新順) ]


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