- ベストアンサー
マクロでデータ増減に対応する方法とは?
- マクロを使用して、データ増減に対応する方法を教えてください。
- 縦に並んだCSVファイルをピボットテーブルを使用して一覧表に変換したいが、行データーが日によって増減し、総計の列が表示されない場合があります。
- コードの意味は分かるが、原因と対策が分からず、エラーやデバッグに苦戦しています。
- みんなの回答 (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)
こんばんは。 #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 となっているようですが、その論理が分りません。
- imogasi
- ベストアンサー率27% (4737/17069)
回答は上げることはできないかもしれませんが、捨石となって、補足要求します。 実例を挙げてくださったのはありがたいが、それだけでは不十分な場合が多く、意図するところを、文章でも説明してください。 下記で良いでしょうか。 (1)順番が同じ製品を、縦横並べ替える。 すると、順番 1 2 3の2、3は何ですか (2)品番は同じ順番のものは、スペース区切りで列挙する。それも並べ替えて。 (3)総計とは何の合計ですか (4)品番と数量に関しては、組にして 縦に1行づつの形式で、下方向に列挙していく。 (5)行き先は捨てるのですか。
お礼
ご返答有難うございます。エクセルエキスパートの 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さんもそうですが、知識の深さに感心しています。有難うございました。
お礼
ご返答有難うございます。質問内容の下書き欄が上手く書けず、説明不足になっていました。 列と行が下書きでズレており、 表示したいのは 1.順番を最上段に表示する 2.品番ZX以下を最左の列に並べる(WENDY0 2さんの返答通り) 3.型式と順番は上段の元配列通りで項目が500位ある。増減有 4.行先は捨てる 5.品番ごとの合計を最右列に表示させたい。 なのですが、データー増減幅が大きく、空白セルが(空白)と表示される 6.品番と順番のデーターラベルを入れ替えしているが、品番/順番ごとの合計表示セルが出てしまい、このセルは不要なので表示行を選択し、ジャンプ→空白セル→削除で消したいが、そうすると合計欄が表示されず、消えてしまう。 7.データーの多少に関わらず、不要な(空白セル)を出したくない。 の以上なんです。質問下書きレイアウト編集中にページを切り替えていた時、誤って質問するをクリックしてしまいました。どうもすみません。