• ベストアンサー

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

Wendy02の回答

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

noverena 様 こんばんは。 返事が遅くなりました。時間が経つと、この規模のものになると、再び戻るまでにしばらく時間が掛かってしまいます。時間的には、数時間なのですが。 サイズの部分を対話式に切り替えました。良く注意して設定してください。   品名   サイズ1   サイズ2   サイズ3 店名 計 -データの始まり- データの始まりを、サイズの終わりの次の次の行というように考えられていますので、その方式は守ってください。 コードはこの部分です。Sr は、サイズの行数です。  Set r1 = .Range(.Cells(SizeArea.Row + Sr + 1, 1), .Range("A65536").End(xlUp)) このコードでややこしい部分は、貼り付け部分にあります。ある程度、慣れれば読みきれるかと思います。 ご自身で加工する場合は、なるべくひとかたまりにばらして、位置をキメウチして作ったほうが分りやすいです。以下のような書き方は、掲示板のみに存在する書き方で、実務的ではありません。ロジックそのものは、それほど複雑ではありません。 実際に、お客さんから、こちらの希望している形で入るということは限りませんから、その時の状況にマクロを編集するとなると、細かく分かれていたほうがよいです。また、配列変数を使うべきかどうかは、状況や慣れにもよりますが、ややこしくするだけだと思ったら、セル(Cells(i,j))型の対応で考えたほうが良いかもしれません。 '------------------------------------------------------ '<標準モジュール> Sub ReArrangingListR2()   '再改良版   Dim DataAr()   Dim myDescript()   Dim mySize()   Dim DescriptArea As Range   Dim SizeArea As Range   Dim Sr As Integer 'サイズの行数   Dim Sl As Integer 'サイズの列数   Dim Sri As Integer 'サイズのカウンタ   Dim Slj As Integer 'サイズのカウンタ   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 Sh1 As Worksheet   Dim Sh2 As Worksheet   Dim Srx As Integer '品名変数のルー部   Dim LastCol As Integer   'シートの設定の登録   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     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    Application.Goto .Range("A1")    On Error Resume Next SiZeAreaSet:    Set SizeArea = Application.InputBox("サイズの領域を設定してください" & vbCrLf & "必ず品名の下の行から店名の手前までを選択してください。", "サイズの取得", Type:=8)    If SizeArea Is Nothing Then      MsgBox "範囲を取得していません。", vbInformation      If MsgBox("再度続けますか?", vbOKCancel) = vbCancel Then       Exit Sub      End If      GoTo SiZeAreaSet    End If    On Error GoTo 0    Application.ScreenUpdating = False    Sr = SizeArea.Rows.Count    Sl = SizeArea.Columns.Count - 1    ReDim mySize(1 To Sl, 1 To Sr)    'サイズの取得    For Slj = 1 To Sl      For Sri = 1 To Sr       mySize(Slj, Sri) = SizeArea.Offset(, 1).Cells(Sri, Slj).Value      Next Sri    Next Slj        'データ範囲    Set r1 = .Range(.Cells(SizeArea.Row + Sr + 1, 1), .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:B1").Value = Array("店名", "品名")    .Range("C1").Resize(, Sr).Value = WorksheetFunction.Transpose(SizeArea.Resize(, 1).Value)    .Range("IV1").End(xlToLeft).Offset(, 1).Value = "数量"    LastCol = .Range("IV1").End(xlToLeft).Column    m = 2 'Sh2の行の初期値    For j = LBound(DataAr, 2) To UBound(DataAr, 2)      For k = 1 To DescriptArea.Columns.Count       If DataAr(k, j) <> Empty Then         .Cells(m, 1).Value = DataAr(0, j)         .Cells(m, 2).Value = myDescript(k)         For Srx = 1 To Sr          .Cells(m, 3).Cells(, Srx).Value = mySize(k, Srx)         Next         .Cells(m, LastCol).Value = DataAr(k, j)                 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
質問者

お礼

Wendy様 本当にいろいろ有難うございます! こんなに親切な方に出会えて感激しています! この度は本当に有難うございました。

関連する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で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に女性を… 関数を使いできるでしょうか? 実際には同じようなデータを何度も「コピぺ」で入力していて非常に面倒くさいので、宜しくお願いします。ちょっと、分かりにくいですか?

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

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

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

    エクセルについての質問です 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 のように品目を揃えて表示させたいのですが、 どのようにすればよいでしょうか?