• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロでデーター増減に対応するには?)

マクロでデータ増減に対応する方法とは?

このQ&Aのポイント
  • マクロを使用して、データ増減に対応する方法を教えてください。
  • 縦に並んだCSVファイルをピボットテーブルを使用して一覧表に変換したいが、行データーが日によって増減し、総計の列が表示されない場合があります。
  • コードの意味は分かるが、原因と対策が分からず、エラーやデバッグに苦戦しています。

質問者が選んだベストアンサー

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

こんばんは。Wendy02です。 >順番というのはなんですか?元の表では、1,1,1 となっていて、移し変えると、1,2,3 となっているようですが、その論理が分りません。 これについては、きちんとした説明がされていませんので、こちら側で、つけさせていただきました。 '--------------------------------------------- '<標準モジュール> Sub LinesCopyToDestinations() Dim Sh1 As Worksheet Dim Sh2 As Worksheet Dim c As Range Dim strItem As String Dim strType As String Dim ItemRow As Variant Dim TypeColumn As Variant Dim i As Long Dim j As Long 'シートの設定 Set Sh1 = Worksheets("Sheet1") Set Sh2 = Worksheets("Sheet2") With Sh2  .Range("A1").CurrentRegion.ClearContents  .Range("A1").Value = Sh1.Range("A1").Value '順番  .Range("A2").Value = Sh1.Range("B1").Value '型式 End With Application.ScreenUpdating = False For Each c In Sh1.Range("E2", Sh1.Range("E65536").End(xlUp))   strItem = c.Offset(, -2).Value   strType = c.Offset(, -3).Value  On Error Resume Next   TypeColumn = WorksheetFunction.Match(strType, Sh2.Rows(2), 0)  On Error GoTo 0   If TypeColumn = Empty Then    TypeColumn = Sh2.Range("IV2").End(xlToLeft).Offset(, 1).Column    i = CLng(TypeColumn)    Sh2.Cells(2, i).Value = strType    Else    i = CLng(TypeColumn)   End If   TypeColumn = Empty  On Error Resume Next   ItemRow = WorksheetFunction.Match(strItem, Sh2.Columns(1), 0)  On Error GoTo 0    If ItemRow = Empty Then   j = Sh2.Range("A65536").End(xlUp).Offset(1).Row   Sh2.Cells(j, 1).Value = strItem   Sh2.Cells(j, i).Value = Sh2.Cells(j, i).Value + c.Offset(, -1).Value   j = j + 1  Else   Sh2.Cells(CLng(ItemRow), 1).Value = strItem   Sh2.Cells(CLng(ItemRow), i).Value = Sh2.Cells(CLng(ItemRow), i).Value + c.Offset(, -1).Value   ItemRow = Empty  End If Next   With Sh2.Range("A1").CurrentRegion   .Offset(, 1).Resize(, Columns.Count - 1).Sort _     Key1:=.Cells(2, 2), _     Order1:=xlAscending, _     Header:=xlGuess, _     OrderCustom:=1, _     MatchCase:=False, _     Orientation:=xlLeftToRight   End With   With Sh2   i = .Range("IV2").End(xlToLeft).Offset(, 1).Column   j = .Range("A65536").End(xlUp).Row   .Cells(2, j).Value = "総計"   .Range("B1").Resize(, i - 2).FormulaLocal = "=Column()-1" '順番   .Range("B1").Resize(, i - 1).Value = .Range("B1").Resize(, i - 1).Value   .Range(.Cells(3, i), .Cells(j, i)).FormulaLocal = "=Sum(RC2:RC[-1])"   End With   Application.ScreenUpdating = True   Set Sh1 = Nothing: Set Sh2 = Nothing End Sub

その他の回答 (2)

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

こんばんは。 #1 さんと同じ内容で恐縮です。 サンプルの列が乱れていてよく分りませんので、こちらが書き直してみました。 半角のスペースは、1個以上はつぶれてしまいますので、よく分らなくなります。 >順番  型式  品番  数量   行先 > 1   A-2  ZX   300    1 > 1   A-1  WX   150    2 > 1   B-3  FK   200    2 ------------------------------------------- >順番  1    2     3 >品番  A-1   A-2   B-3   総計 > ZX       200 > WX           150 > FK  300 同じものが出てきたときは、加算をされるということでしょうか? 行き先とはいうのは、並べ替えられた表には関係があるのですか? 順番というのはなんですか?元の表では、1,1,1 となっていて、移し変えると、1,2,3 となっているようですが、その論理が分りません。

superfighter823
質問者

お礼

 ご返答有難うございます。質問内容の下書き欄が上手く書けず、説明不足になっていました。  列と行が下書きでズレており、  表示したいのは 1.順番を最上段に表示する 2.品番ZX以下を最左の列に並べる(WENDY0  2さんの返答通り) 3.型式と順番は上段の元配列通りで項目が500位ある。増減有 4.行先は捨てる 5.品番ごとの合計を最右列に表示させたい。  なのですが、データー増減幅が大きく、空白セルが(空白)と表示される 6.品番と順番のデーターラベルを入れ替えしているが、品番/順番ごとの合計表示セルが出てしまい、このセルは不要なので表示行を選択し、ジャンプ→空白セル→削除で消したいが、そうすると合計欄が表示されず、消えてしまう。 7.データーの多少に関わらず、不要な(空白セル)を出したくない。 の以上なんです。質問下書きレイアウト編集中にページを切り替えていた時、誤って質問するをクリックしてしまいました。どうもすみません。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

回答は上げることはできないかもしれませんが、捨石となって、補足要求します。 実例を挙げてくださったのはありがたいが、それだけでは不十分な場合が多く、意図するところを、文章でも説明してください。 下記で良いでしょうか。 (1)順番が同じ製品を、縦横並べ替える。 すると、順番    1    2 3の2、3は何ですか (2)品番は同じ順番のものは、スペース区切りで列挙する。それも並べ替えて。 (3)総計とは何の合計ですか (4)品番と数量に関しては、組にして 縦に1行づつの形式で、下方向に列挙していく。 (5)行き先は捨てるのですか。

superfighter823
質問者

お礼

 ご返答有難うございます。エクセルエキスパートの imogasiさん、いつも明解なお答えをいただき、感謝申し上げます。  ウェンディ02さんのところでも言いましたが、質問内容不完全のまま、クリックしてしまい、申し訳ありませんでした。  私はCSVから作成したピボットテーブルをワークシートを挿入、データー範囲を形式を値にてコピー、ペーストしていますが、合計の項目が順番を上の行、A-1,A-2の番号をその下の行に配置したい、(23の2,3は何かと言うのはA-1は○番目に生産、A-2は○番目に生産と言うことなんです。 順   1     2      3    合計 品番  A1    A2     B2   ○○ ZX  ○ WX               ○    ○○ FK         ○          ○○ としたいのですが、データーラベルを入れ替えてもこのレイアウトにならず、コピー、ペーストしてますが、中々上手く行きません。まだ抽象的だと思われますが、こんな感じです。  imogasiさんは何故そこまでエクセルを理解されているのでしょうか?ウェンディ02さんもそうですが、知識の深さに感心しています。有難うございました。

関連するQ&A

専門家に質問してみよう