- 締切済み
エクセルに入力したデータの振り分け方法
エクセル上に入力したデータを、行や列を基準に別シート又は別ファイルに振り分けられるものを作りたいのです。 https://box.yahoo.co.jp/guest/viewer?sid=box-l-2d3s2e3cjsxc7vbzybg5vgjcru-1001&uniqid=29cc56f1-489c-4c19-8e3e-248420b280c8&viewtype=detail の「行を元に振り分け」の場合は、行を元に振り分けた上で、行2の内容を一つのセルに改行して入力できるようにしたいです。 「列3を元に振り分け」では、列3を一番右に持ってきて、い・ろ・はごとに集めて並べ、右に列2・4・5…と並べ替えたいです。 仕事でどうしてもこのようなファイルを使いたいのですが、エクセル素人で行き詰まっています。どなたかアドバイスいただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.1です。 お礼欄の補足質問について・・・ >行2ではなく行3や行4の内容を一つのセルに改行して入力できるようにするためには・・・ とあるのですが、A列は前回のままでC列とかD列のデータを改行して表示したい!というコトですかね? 一応そういうコトだとして >str = str & vbCrLf & ws1.Cells(i, 2) の行を >str = str & vbCrLf & ws1.Cells(i, 3) とすれば「元入力」SheetのC列が改行して表示されます。 ※ 1行目の項目行は手を加えていませんので、適宜変更する必要があります。 的外れならごめんなさいね。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! VBAになってしまいますが・・・ 一例です。 二つのマクロにしてみました。 Alt+F11キー → 画面左下の「This Workbook」をダブルクリック → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) test1が「行Aを元に・・・」の方のマクロで、test2が「列3を元に・・・」のマクロになります。 Sub test1() 'この行から Dim i, k As Long Dim str As String Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("元入力") Set ws2 = Worksheets("行Aを元に振り分け") k = ws2.Cells(Rows.Count, 1).End(xlUp).Row If k > 1 Then Range(ws2.Cells(2, 1), ws2.Cells(k, 2)).ClearContents End If For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(ws2.Columns(1), ws1.Cells(i, 1)) = 0 Then ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws1.Cells(i, 1) End If Next i For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, 1) = ws2.Cells(k, 1) Then str = str & vbCrLf & ws1.Cells(i, 2) End If Next i ws2.Cells(k, 2) = WorksheetFunction.Substitute(str, vbCrLf, "", 1) str = "" Next k ws2.Columns("A:B").HorizontalAlignment = xlCenter End Sub Sub test2() Dim i, j, k As Long Dim ws1, ws3 As Worksheet Set ws1 = Worksheets("元入力") Set ws3 = Worksheets("列3を元に振り分け") ws1.Cells.Copy Destination:=ws3.Cells(1, 1) j = ws3.Cells(1, Columns.Count).End(xlToLeft).Column ws3.Columns(1).Insert ws3.Columns("D").Cut Destination:=ws3.Cells(1, 1) ws3.Columns("D").Delete Range(ws3.Columns("A"), ws3.Columns(j)).Sort key1:= _ ws3.Cells(1, 1), order1:=xlAscending End Sub 'この行まで ※ test2の方は自信がありません。 質問では >列3を一番右に持ってきて とありますが、一番左になるようにしています。 そして、単に列の並び替えと元データのC列の昇順に並び替えだけにしています。 ※ おそらく質問用のデータだと思いますので、元データのC列の昇順に並び替えにしています。 ひらがなの並び替えは50音順になりますので、本当に「いろは・・・」であれば 「い・は・ろ・・・」の順になります。 的外れならごめんなさいね。m(_ _)m
お礼
お礼が遅れて申し訳ありません。 早速マクロを試させていただきました。 test1はうまく活用できてとても助かりました。 参考までにアドバイスいただけると幸いなのですが、test1で「行を元に振り分け」をする場合、行2ではなく行3や行4の内容を一つのセルに改行して入力できるようにするためにはコードのどの部分を訂正すればよいのでしょうか。
お礼
早速回答いただきありがとうございます。 アドバイス通り、変更したら思ったものになりました。 勉強になりました。ありがとうございました!