[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数の列を一行にまとめるには』(みず)
ご教授お願い致します。
エクセルのシートに区切り位置機能でスペースごとに処理すると
J列から最大AB列まで約19列ほどでるデータを一行にまとめる必要が
あり、一列ごと切り取りして一列になるよう貼り付けしてという作業が
多くなにか良い方法はないかと思い投稿させて頂きました。
関数よりマクロの方が便利そうなのですが、複数列を一列に並べる良い方法はございませんでしょうか?
列の最終行はそのときどきで変わりますので、
そこはCells(Rows.Count, "A").End(xlUp).Row
みたいな感じでセルの最後までという命令を出せばよいと思うのですが。。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
回答では有りませんが。。。 素朴な疑問が。。。
>>エクセルのシートに区切り位置機能でスペースごとに処理
処理しなければ良いのでは。 m(_ _)m (隠居じーさん) 2019/03/11(月) 17:59
複数列を一列にする良い方法でアドバイスなど頂ければ嬉しいです。
(みず) 2019/03/11(月) 18:30
AC列に出す案 Sub test() Dim i As Long For i = 1 To Cells(Rows.Count, "J").End(xlUp).Row Cells(i, "AC").Value = Join(Evaluate(Columns("J:AB").Rows(i).Address & "&"""""), ",") Next i End Sub 19列を1列でいいんですよね? 行じゃないですよね? (稲葉) 2019/03/11(月) 18:41
ご提案頂き誠に有難うございます。
列であっております。
マクロを実行致しましたら、セルにコンマ区切りでまとまっておりましたので
私のご説明に不備がございました。
アナログでする場合、AC列に出す場合
各列をAC列の最後尾に貼り付けていくという言い方でよろしいでしょうか。。
TEST1
TEST2
TEST3
とJ列にあるとしてK列に
TEST99
TEST88
とあるとしたら
TEST1
TEST2
TEST3
TEST99
TEST88
と一列にするという流れです。
いかがでしょうか?
(みず) 2019/03/11(月) 18:52
2行目以降はどうなりますか? (稲葉) 2019/03/11(月) 18:59
あ、例が行のことですか、勘違いしました 少々お待ちください (稲葉) 2019/03/11(月) 19:01
こんばんは^^ J1〜AB6まで何か情報が有るシート名、Sheet1がじょうけんで。 Option Explicit Sub main() Dim i As Long Dim buf As Variant Dim tmp As Variant With Worksheets("Sheet1") buf = .Cells(1, 10).CurrentRegion For i = 2 To UBound(buf, 1) tmp = Join(WorksheetFunction.Index(buf, i, 0)) MsgBox tmp Next End With End Sub でも ^^; でわ あれ!編集がかぶっていまして。これではだめなんですね。?^^; m(_ _)m (隠居じーさん) 2019/03/11(月) 19:10
sub test2 dim c as long for c = 10 to 28 range(cells(1,c),cells(rows.count,c).end(xlup)).copy cells(rows.count,"ac").end(xlup).offset(1) next c end sub ac列の一行目が空白だと、一行空白のままですがどうでしょう? (稲葉) 2019/03/11(月) 19:12
(隠居じーさん) 2019/03/11(月) 19:10 は廃案で。何かの参考にでも。m(_ _)m。。。失礼致しました。 (隠居じーさん) 2019/03/11(月) 19:19
隠居じーさんさんのINDEX案もいいですね! joinしないで、そのまま書き出せば変更あまりしないでいけそうじゃないですか? (稲葉) 2019/03/11(月) 19:24
J:AB 各列の空白を除いて ADの2行目から出力
Sub test() Dim i As Long, x With Range("j1", Cells.SpecialCells(11)).Resize(, 19) For i = 1 To .Columns.Count x = Filter(.Worksheet.Evaluate("transpose(if(" & .Columns(i).Address & _ "<>""""," & .Columns(i).Address & "))"), False, 0) If UBound(x) > 0 Then Range("ad" & Rows.Count).End(xlUp)(2).Resize(UBound(x) + 1).Value = _ Application.Transpose(x) Next End With End Sub (seiya) 2019/03/11(月) 19:25
ご提案有難うございます!
明日以降試してみてまたご連絡致します(^^)
このようなお時間にご対応感謝致します!!
(みず) 2019/03/11(月) 19:33
稲葉さん
無事一列にまとまりお伝えしたかった処理ができました!
短めのコードで分かりやすく編集もできそうなので助かりました。
seiyaさん
同じく一列にまとまりました!有難うございます!
当方では初めてみるコード名が多数ありなんとなく中級者向け?と思っており、
よろしければどういう処理をしていっているかアドバイス頂けないでしょうか?
隠居じーさんさん
sheet4でリストがございましたので、sheet1を4に変更しました!
msgboxでリスト内の文言がでてac列などにまとまっている様子がなく当方では
分かりませんでした。申し訳ございません。
(みず) 2019/03/12(火) 09:36
いえ、お役に立てず。済みませんでした。 楽しく勉強させて頂きました。 みずさん 稲葉さん Seiyaさん 有難うございました。 m(_ _)m (隠居じーさん) 2019/03/12(火) 10:31
仕組み的にはseiyaさんのコードのほうが良いと思いますよ。 私の場合は、途中に空白セルがあっても、そのまま最終行分までコピーしてしまうので seiyaさんの場合は、途中に空白セルがあった場合、行間を詰めて表示してくれるはずです。
J列 K列 TEST1 TEST2 TEST2 TEST1 TEST2
稲葉結果 seiyaさん結果 TEST1 TEST1 TEST1 TEST1 TEST2 TEST2 TEST2 TEST2 TEST2 TEST2
(稲葉) 2019/03/12(火) 10:38
初級、中級、上級が何を意味するのか分かりませんが、過去には上級者と思われる人の中には邪道という人もいました。
やっていることは大したことではありません。
>TEST1 >TEST2 >TEST3 >TEST99 >TEST88
このようにしたい、ということは各列の空白を詰めて一列に纏めたいと理解したので、
x = Filter(.Worksheet.Evaluate("transpose(if(" & .Columns(i).Address & _ "<>""""," & .Columns(i).Address & "))"), False, 0)
で一列の空白を除いた値のみを x という配列に格納しAD列の最終行に出力しています。
私の結果でよければ
Sub test() Dim a, b, e, n As Long a = Range("j1", Cells.SpecialCells(11)).Resize(, 19) ReDim b(1 To UBound(a, 1) * UBound(a, 2), 1 To 1) For Each e In a If e <> "" Then n = n + 1 b(n, 1) = e End If Next [ad1].Resize(n).Value = b End Sub
で済むでしょうし、此方の方が配列を理解していれば簡単な書き方です。 (seiya) 2019/03/12(火) 11:15
私のほうも手直し・・・ Sub test2() Dim c As Long Range("AC:AC").ClearContents For c = 10 To 28 Range(Cells(1, c), Cells(Rows.Count, c).End(xlUp)).Copy Cells(Rows.Count, "ac").End(xlUp).Offset(1) Next c Range("AC:AC").SpecialCells(xlCellTypeBlanks).Delete End Sub 最後に空白セル削除で! (稲葉) 2019/03/12(火) 12:02
ご回答誠に有難うございます!
大変勉強になりました。
作業が格段に速くなりました!
(みず) 2019/03/13(水) 14:10
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.