- ベストアンサー
エクセルについて教えて下さい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! おじさんです お示しの画像ではたまたまでしょうが、「付属語」のあいうえお順(昇順)で並び替えですぐにできそうな感じですが、 実際のデータはたぶんそうなってないのだろうと思いますので・・・ ↓の画像のようにSheet2のH列に会社専用の「付属語」の表を作成し、I列に連番を付けておきます。 その下準備が出来た上での関数の方法の一例です。 Sheet1に作業用の列を2列設けています。 作業列G3セルに =IF(C3="","",VLOOKUP(C3,Sheet2!H:I,2,0)) H3セルに =IF(G3="","",COUNTIF(G:G,"<"&G3)+COUNTIF($G$3:G3,G3)) という数式を入れ、G3・H3セルを範囲指定 → H3セルのフィルハンドルで下へずぃ~~~!っとコピーしておきます。 そしてSheet2のB3セルに =IF(COUNT(Sheet1!$H:$H)<ROW(A1),"",INDEX(Sheet1!B:B,MATCH(ROW(A1),Sheet1!$H:$H,0))&"") という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 それからVBAの方法もご希望のようなので、参考程度で・・・ VBAも同様にSheet2に会社独自の「付属語」の表を作成(VBAの場合はH列のみでOK)しておきます。 そうした上でのコードになります。 Alt+F11キー → VBE画面 → 左側の「This Workbook」をダブルクリックし、↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i, j, k As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") k = ws2.Cells(Rows.Count, 2).End(xlUp).Row If k > 2 Then Range(ws2.Cells(3, 2), ws2.Cells(k, 6)).ClearContents End If For j = 3 To ws2.Cells(Rows.Count, 8).End(xlUp).Row For i = 3 To ws1.Cells(Rows.Count, 2).End(xlUp).Row If ws1.Cells(i, 3) = ws2.Cells(j, 8) Then With ws2.Cells(Rows.Count, 2).End(xlUp).Offset(1) .Value = ws1.Cells(i, 2) .Offset(, 1) = ws1.Cells(i, 3) .Offset(, 2) = ws1.Cells(i, 4) .Offset(, 3) = ws1.Cells(i, 5) .Offset(, 4) = ws1.Cells(i, 6) End With End If Next i Next j End Sub こんなんではどうですかね? 以上、かなり余計なお世話で気を回し過ぎているかもしれません。 もし画像どおりに単に「付属語」の昇順で並び替えをすれば良いのであれば、関数もVBAも必要ないと思います。 この程度で、参考にならなかったらごめんなさいね。m(_ _)m
お礼
と、と、tom04さん! m(・o・)m すごーーーーーーーっいです、ぶちすご・・・ いつもですが・・・・きょ、驚異的です! 関数も、マクロも完璧です♪ 本当に、素晴らしい(^▽^)人 多くのご配慮、まさしく、全く、そのとおりです。 貴重なおくつろぎの時間をさいて考えてくださり、感謝しております。 会社での 毎回変わる仕事内容・・・・ こんなことさえも分からんなんて、情けない限りです。 全て 頼ってしまって申し訳ないです・・・(p_;) 早速明日 会社で、関数の表を作成し、スピード解決します。 今回も、また 心優しき達人に助けていただいたことを励みに、 今から 私はマクロの方を勉強してきます d(^∇^*)