• ベストアンサー

エクセルでデータ並び替え→別シートへ

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんばんは。Wendy02です。 マクロを直しました。横に広がっても自動的にデータを取得するようにしました。細かい点も修正しました。(データの上書き,データの場所が違う時,Excelの行数が越えてしまいそうな時のメッセージ,前回よりも、出力が多少速くするようにコードの修正) フォームのボタンへは、マクロ名にR をつけましたので、再度登録しなおしてください。 '<標準モジュール> Sub ReArrangingListR() '改良版 Dim DataAr() Dim myDescript() Dim mySize() Dim OutAr() Dim DescriptArea As Range Dim r1 As Range Dim c As Range Dim i As Long Dim j As Long Dim m As Long Dim n As Integer Dim k As Integer Dim x As Integer Dim y As Integer Dim Sh1 As Worksheet Dim Sh2 As Worksheet 'シートの設定の登録 Set Sh1 = Worksheets("Sheet1") Set Sh2 = Worksheets("Sheet2") With Sh2.Range("A1").CurrentRegion  If WorksheetFunction.CountA(.Cells) > 1 Then  If MsgBox("前のデータを削除してよろしいですか?", vbOKCancel) = vbCancel _   Then Exit Sub   .ClearContents  End If End With Application.ScreenUpdating = False With Sh1 '項目の部分の設定 Set DescriptArea = .Range("C1", .Range("IV1").End(xlToLeft))   If WorksheetFunction.CountA(DescriptArea) = 0 Then    MsgBox "項目名が見つかりません。" & vbCrLf & _    "項目エリアは、" & DescriptArea.Parent.Name & "の" & DescriptArea.Address & "に設定されています。", vbInformation    Exit Sub   End If For Each c In DescriptArea '品名の取得  x = x + 1  ReDim Preserve myDescript(1 To x)  myDescript(x) = c.Value Next c For Each c In DescriptArea.Offset(1) 'サイズの取得  y = y + 1  ReDim Preserve mySize(1 To y)  mySize(y) = c.Value Next c 'データ範囲(A4~) Set r1 = .Range("A4", .Range("A65536").End(xlUp)) For i = 1 To r1.Rows.Count  ReDim Preserve DataAr(DescriptArea.Columns.Count, i)  For n = 0 To DescriptArea.Columns.Count   If n = 0 Then     DataAr(n, i - 1) = r1.Cells(i, n + 1)   Else     DataAr(n, i - 1) = r1.Cells(i, n + 2)   End If  Next n Next i End With  With Sh2  '次のシートへのデータの貼り付け  'タイトル  .Range("A1:D1").Value = Array("店名", "品名", "サイズ", "個数")  m = 2 'Sh2の行の初期値  ReDim OutAr(1 To 4) '出力バッファ  For j = LBound(DataAr, 2) To UBound(DataAr, 2)   For k = 1 To DescriptArea.Columns.Count    If DataAr(k, j) <> Empty Then      OutAr(1) = DataAr(0, j) '店名      OutAr(2) = myDescript(k)      OutAr(3) = mySize(k)      OutAr(4) = DataAr(k, j)      .Cells(m, 1).Resize(, 4).Value = OutAr()      m = m + 1      If m > Sh2.Columns(1).Cells.Count - 1 Then       Application.ScreenUpdating = True       MsgBox "Excel の最大行数を超えようとしていますので、中止します。" & vbCrLf & _       "データを切り分けてください。", vbInformation       Exit Sub      End If    End If   Next k  Next j  End With  Application.Goto Sh2.Range("A1")  Application.ScreenUpdating = True  Set r1 = Nothing: Set Sh1 = Nothing  Set Sh2 = Nothing: Set DescriptArea = Nothing  MsgBox "終了!" End Sub

noverena
質問者

補足

Wendy02様 遅くなりましたがご回答有難うございます。 すごいです完璧です! そこで最後にひとつだけ質問です(当初の質問からかなり発展してしまいまして申し訳ありません。) 現在2行目にサイズが有りますが 3行目、4行目とサイズ欄を増やす場合はコードのどの部分を修正及び追加すればよいのでしょうか?

関連するQ&A

  • エクセル重複セルについて

    例えば    A   B 1  品名 数量 2 みかん  2 3 りんご  2 4 みかん  1 5 いちご  1 6 りんご  1  とあるとして、 他のセルに    C   D 1  品名  個数 2  みかん  3 3  りんご  3 4  いちご  1  のように 重複セルを削除し、なおかつ 個数もまとめるというようなことは エクセルでできないでしょうか? 宜しくお願いします。

  • Excelで簡単にデータ集計する方法

    お世話になります。 以下のような形式のCSVデータファイルがあります。  品名,個数,金額(=単価x個数) 例えば、  ミカン,1,80  ミカン,1,75  リンゴ,2,420  ミカン,2,140  リンゴ,10,1900 といった感じです。 これを集計して、品名毎に個数と金額の合計を得たいのですが、 Excelを使用して簡単にできる方法はございますでしょうか? 品名が少なければ、品名でソートして手作業で SUM()を設定するのですが、 今回、品名の種類が多すぎてとても手作業ではできない状況です。 どうぞよろしくお願いいたします。

  • 並び替えするには。。

    エクセルのデータの並び替えが出来なく困っています。 色々と試していますが、並び替えが出来ません。 以下の様に、A2,B2には一番少ないデータが常に来ます。 それ以下のA,Bのデータの個数は不揃いです。 これらのデータをC,DでDを基準に昇順で並び替える様にしたいです。  A     B        C        D   1品物     個数    品物     個数(昇順) 2りんご    2      =A2      =B2   3みかん    15      柿       3 4バナナ    25      マンゴー    5   5柿       3       りんご    10 6マンゴー    5       みかん    15   宜しくお願いします。

  • Excelで集計結果を別シート毎にまとめたい

    よろしくお願いします。 日々の売上入力をするためのシート:Sheet「売上」    A  B   C    D  E   F 1  日付 担当 内容  個数 単価 合計 2  1/2  赤池 みかん  21 100  2100 3 1/2 大野 りんご  10 200  2000 4  1/5  赤池 りんご  5  190  950 5  1/5  赤池 みかん  20 80   1600 これを、 別シート(Sheet「赤池」など)の個人の給料のまとめがあるところに転記したいんです。 Sheet「赤池」    A   B   C  D 1  (基本給などごちゃごちゃ書いてあります。) ~ 25 内容  個数 合計 営業歩合給(*0.2) 26 みかん 41  3700 740 27 りんご  5   950 190 ~ 35 合計  46  4650 930 Sheet「大野」    A   B   C  D 1 (同上) ~ 25 内容  個数 合計 営業歩合給(*0.2) 27 りんご  10  2000 400 ~ 35 合計  10      400 こんな形にしたいと思っています。 悩んでいるのが集計結果を別シートに詰めて書けるかというところです。 簡略化してありますが、本来のみかんやりんごにあたるところは30品目ほどあり、 担当によっては全く出現しない品目もあるので、印刷などで邪魔になってしまい困っています。 どなたかExcelに明るい方、ご教授ください。

  • フォントサイズを別のセルに入力された数字としたい 【エクセル】

    エクセル2003での質問ですが、例として セルA1(リンゴ) A2(みかん) と文字が入力されています セルB1(10)   B2(20)  とある計算をした数値が入力されています。たとえば、売れた個数などと思って下さい。 やりたいことは、セルA1, A2に入力されている文字のフォントサイズをB1, B2に入力された数値に自動的にしたいのです。 売れた個数(Bセルの数値)によって文字のサイズを変え、視覚的に強調したいのです。 つまり、 リンゴ(フォントサイズ 10) みかん(フォントサイズ 20) 自分で関数などを調べてみたのですが、出来る方法がわかりませんでした。 簡単にできる方法を希望です。マクロなどは詳しくはありませんがこれを機会に勉強してみようと思います。もし可能であれば教えて下さい。よろしくお願いします。

  • エクセル2003で1つのシートのデータを別の2つのシートに振分けるには

    エクセル2003で1つのシートのデータを、2つのシートへ振り分けるための関数はあるのでしょうか?例えば seet1に次のようなデータガあるとして   A    B    C    D 1 氏名  年齢  性別   住所 2 佐藤  30   男性    東京都 3 伊東  40   女性    大阪府 4 中村  50   男性  北海道 5 後藤  60   女性  京都府 C列「性別」に「男性」を入力すればseet2に、「女性」だったらseet3に。 氏名や年齢等を上から順番に表示(入力)させたいんですが… (seet2・3ともに、データの列の順番はseet1とは異なりなす。) 次にseet1の「6列目」に男性を入力するとseet2の「4列目」に行くように (表を作ると) seet2には   A     B    C  1 住所   氏名  年齢 2 東京都  佐藤  30 3 北海道  中村  50 4 (seet1「6列目」の人) seet3には   A      B     C  1 住所    氏名   年齢 2 大阪府   伊東   40 3 京都府   後藤   60 seet1に入力したデータを、性別で振り分けseet2に男性、seet3に女性を… 関数を使いできるでしょうか? 実際には同じようなデータを何度も「コピぺ」で入力していて非常に面倒くさいので、宜しくお願いします。ちょっと、分かりにくいですか?

  • エクセルデータ 複数行の並び替え

    エクセルについての質問です 2行あるデータをまったく同じ並びにしたいのです わかりづらいですが例でご理解いただけるでしょうか? 例)     A     B 1  みかん  りんご 2  りんご   ぶどう 3  ぶどう   みかん     ・      ・     ・      ・     ・      ・       ↓並び替え     A     B 1  みかん  みかん 2  りんご   りんご 3  ぶどう   ぶどう ※A行は固定  A行にあわせてB行をまったく同じ並びにしたい 実際のデータは上記のような単純にひらがなのみではなく数字とアルファベットがまざったデータです 例)ABC-123 うまく並び替える方法があればどなたかご教示いただけますようお願いいたします

  • エクセル データの集計表を作成する

    シート1のデータを集計してシート2に結果を出したいのですが、関数を使いどのように行えば良いかお教えいただけますでしょうか。 りんご  A みかん  A りんご   りんご  B ぶどう   このようなデータがあり 1.その中にある項目を自動で一つ出し、 2.それぞれ済の分を集計して・・・ Aの集計 商品   個数 りんご   1 みかん   1 ぶどう   0 というようにしたいのですが、どなたかお答えいただけますでしょうか?よろしくお願い致します。

  • エクセルで範囲内のデータを別シートにうつしたい

    エクセルで特定の範囲内の数値にあてはまるデータを別のシートに新たな表として作成したいのですが、簡単な方法があれば教えてください。 例えば Sheet1   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3  5  メロン   9800 4 17  ブドウ   1800 5 50  バナナ  1000 このようなデータを次のような表にしたいのです。 A列の数値が10~30のみ行ごと抜粋する Sheet2   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3 17  ブドウ   1800  よろしくお願いいたします。

  • エクセルでこんなことできますでしょうか?

    エクセルを使ってデータ管理をしています。 エクセルで以下のようなデータがあるとします。  お店A   お店B  お店C 品目 個数 品目 個数 品目 個数 りんご 5 みかん 4 柿  4 みかん 3 りんご 2 パイナップル 2 柿   2 もも  3 いちご 3 もも  7 パイナップル 2 みかん 2 これを  お店A   お店B  お店C 品目 個数 品目 個数 品目 個数 もも 7  もも  3  りんご 5 りんご 2  みかん 3 みかん 4 みかん 2 柿  2        柿   4 のように品目を揃えて表示させたいのですが、 どのようにすればよいでしょうか?