advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 2420 for ピボットテーブル (0.004 sec.)
[[20200320225733]]
#score: 4770
@digest: fdf0c0773e85b6693840ce7781879170
@id: 82752
@mdate: 2020-04-14T02:37:52Z
@size: 18751
@type: text/plain
#keywords: 先cd (79059), 注リ (60299), subtotals (47678), 意先 (46695), 品サ (41745), 理cd (41712), 先店 (41263), 名カ (38627), 得意 (35286), pivottables (33919), pivotfields (30626), ピノ (28640), 舗コ (23722), 当数 (22821), 引当 (22008), ル3 (21309), 入先 (21123), 先2 (21057), 入数 (18108), 先1 (18071), ド", (17683), 仕入 (16346), サマ (15985), 列| (14995), ド") (14582), 受注 (14047), 数") (13200), 数個 (11902), ピボ (11538), 社| (11342), ス入 (10861), 出条 (10606)
『VBAデータに該当得意先があったら、以下処理を行いたい』(ピノ)
VBA初心者です。 いつも参考にさせていただいております。 マクロを動かした時間に受注データにある得意先のみに、 以下処理を行いたいです。 構文構成が思いつかず、ヒントをいただきたいです。 <条件> ・得意先により受注時間が異なるため、 マクロを動かした時間に、受注データに存在する得意先のみに以下処理を実施。 ・得意先は、マスタファイル.xlsmに記載の得意先以外は存在しません。 ただ今後得意先が増える可能性があるので、マスタファイルに追記すれば追加で処理できるようにしたいです。 <マスタファイル.xlsm> A B C D E F 得意先コード 得意先名 仕入先CD 仕入先名 得意先店舗CD桁数 1 1 得意先1 111111 A社 0000 2 1 得意先1 222222 B社 0000 3 2 得意先2 111111 A社 000 4 2 得意先2 222222 B社 000 5 2 得意先2 333333 C社 000 6 3 得意先3 111111 A社 00000 <受注リスト> 1 A B C D E F H I J K L 2 出荷日 専伝NO 得意先店舗コード 得意先名カナ 物流センタコード 商品コード 商品名カナ ケース入数 ボール入数 引当数個数 相手商品コード 3 20200302 882476786 0700 得意先1フジテン 000002 225675 りんご 1 0 1 0900000 4 20200302 882476786 1311 得意先1ブンジテン 000003 225675 りんご 1 0 1 0900000 <やりたいこと> ◆受注リスト.xlsxの前はテキスト形式の生データ。店舗コード桁数設定。(店舗コード:J列) ※桁数設定は、マクロファイル・マスタシートG列「店舗CD桁数」に記載の桁数を設定。 必要列以外を削除 データを得意先CD別・仕入先CD別に分解(得意先CD:I列、仕入先CD:Y列) タイトル行にフィルター設定 ◆受注商品一覧シートを元に、隣に商品サマリシートを作成 ピボットテーブルにて商品別数量一覧を作成し、値貼付けにする。(マクロ記録で作成済み) ピボットテーブルの上に見出しをつける タイトル項目:マクロファイル・マスタシートE列「仕入先名」をB2セル、「仕入先CD」をB1セルに表示) それ以外は統一 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- ごめんなさい、途中で投稿してしまいました…。 大変申し訳ありませんが、<やりたいこと> はこちらを参照お願いいたします。 <やりたいこと> ◆受注リスト.xlsxのC列店舗コード桁数設定 桁数設定は、マスタファイルF列「店舗CD桁数」に記載の桁数を設定。 ◆受注リストに記載の得意先CD別・仕入先CD別にデータを分解し、シート名を「受注商品一覧」とする。 (得意先CD:I列、仕入先CD:Y列) ◆受注商品一覧シートを元に、隣に「商品サマリ」シートを作成 ピボットテーブルにて商品別数量一覧を作成し、値貼付けにする。(マクロ記録で作成済み) ◆ピボットテーブルの上に見出しをつける タイトル項目:マスタファイルD列「仕入先名」を商品サマリシートのB2セルに、 マスタファイルE列「仕入先CD」をB1セルに表示 ◆名前を付けて保存。ファイル名:本日日付(yyyymmdd)+仕入先名+様+得意先名+店別データ.xlsx (ピノ) 2020/03/20(金) 23:48 ---- ピボットテーブルマクロは以下の通りです。 Sub 商品サマリシートを作成() ' Windows("得意先2店別データ.xlsx").Activate Range("A1").Select '変数宣言(1行列目の最終行列取得) LR = Cells(Rows.Count 1).End(xlUp).Row LC = Cells(1 Columns.Count).End(xlToLeft).Column Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase SourceData:= _ "得意先2店別データ!R1C1:R" & LR & "C" & LC Version:=6).CreatePivotTable TableDestination:= _ "Sheet1!R3C1" TableName:="ピボットテーブル3" DefaultVersion:=6 Sheets("Sheet1").Select Cells(3 1).Select Range("B10").Select With ActiveSheet.PivotTables("ピボットテーブル3") .InGridDropZones = True .RowAxisLayout xlTabularRow End With With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("出荷日 ") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("商品コード") .Orientation = xlRowField .Position = 2 End With With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("商品名カナ ") .Orientation = xlRowField .Position = 3 End With With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("ケース入数") .Orientation = xlRowField .Position = 4 End With With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("ボール入数") .Orientation = xlRowField .Position = 5 End With ActiveSheet.PivotTables("ピボットテーブル3").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル3").PivotFields("引当数個数") "データの個数 / 引当数個数" xlCount With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("データの個数 / 引当数個数") .Caption = "合計 / 引当数個数" .Function = xlSum End With '小計表示をなくす Windows("得意先2店別データ.xlsx").Activate ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("出荷日 ").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("専伝NO ").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("得意先店舗コード").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("得意先名カナ ").Subtotals _ = Array(False False False ) ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("物流センタコード").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("商品コード").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("商品名カナ ").Subtotals = _ Array(False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("ケース入数").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("ボール入数").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("引当数個数").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("相手商品コード").Subtotals = Array( _ False False False ActiveSheet.PivotTables("ピボットテーブル3").PivotFields(" ").Subtotals = Array(False _ False False False '列幅調整 Columns("A:A").ColumnWidth = 14.13 'ピボットテーブルを値貼り付け Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Operation:=xlNone SkipBlanks _ :=False Transpose:=False Range("A1").Select Application.CutCopyMode = False 'シート名変更 ActiveCell.FormulaR1C1 = "" Sheets("Sheet1").Select Sheets("Sheet1").Name = "商品サマリ" (ピノ) 2020/03/20(金) 23:54 ---- おはようございます ^^ けっこう大掛かりなようですね。。。頑張ってください。 ご提示の情報整理のお手伝いだけでも ^^; マスタファイル.xlsm Sheet1 想像図 |[A] |[B] |[C] |[D] |[E] [1]|得意先コード|得意先名|仕入先CD|仕入先名|得意先店舗CD桁数 [2]| 1|得意先1| 111111|A社 | 0000 [3]| 1|得意先1| 222222|B社 | 0000 [4]| 2|得意先2| 111111|A社 | 000 [5]| 2|得意先2| 222222|B社 | 000 [6]| 2|得意先2| 333333|C社 | 000 [7]| 3|得意先3| 111111|A社 | 00000 受注リスト.xlsx Sheet1 想像図 |[A] |[B] |[C] |[D] |[E] |[F] |[G] |[H] |[I] |[J] |[K] [1]|出荷日 |専伝NO |得意先店舗コード|得意先名カナ |物流センタコード|商品コード|商品名カナ|ケース入数|ボール入数|引当数個数|相手商品コード [2]|20200302| 882476786| 700|得意先1フジテン | 2| 225675|りんご | 1| 0| 1| 900000 [3]|20200302| 882476786| 1311|得意先1ブンジテン| 3| 225675|りんご | 1| 0| 1| 900000 違う点等、ご修正くださいませ。たくさんアドバイス、回答があるといいですね。でわ m(_ _)m (隠居じーさん) 2020/03/21(土) 07:06 ---- 横からですが、提示されたコードは 〇〇.Select ActiveSheet.〇〇 のようになっていますが、基本的にVBAの世界では対象オブジェクトをきちんと書けば、アクティブにしたり選択したりする必要はないです。 また、提示されたコードは投稿時に何らかのトラブルがあったようで「,(カンマ)」が「 (タブ)」になっているようです。 このほか私見ですが、ピボットテーブルをイチから作成するのをマクロで操作するのは、出来ないとは言いませんがちゃんと理解できてないとなかなかしんどいと思います。 http://officetanaka.net/excel/vba/tips/tips156.htm なので考え方を変えて、フィールドの設定や列幅なんかを手動で設定したひな形シートを作成しておき、そのシートをコピー挿入して、データソースの変更だけしてみてはどうでしょうか? Sub さんぷる() Dim データ範囲 As String With Workbooks("得意先2店別データ.xlsx") '▼データ範囲をシート名を含めて文字列で取得する データ範囲 = Split(.Worksheets("得意先2店別データ").Range("A1").CurrentRegion.Address(External:=True), "]")(1) '▼ひな形シートをコピーする Worksheets("ひな形").Copy After:=.Worksheets(.Worksheets.Count) With .Worksheets(.Worksheets.Count) '▼(コピーしてできたシートの1番目のピボットテーブルの)データソースを変更 .PivotTables(1).ChangePivotCache _ Workbooks(.Parent.Name).PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=データ範囲) '▼シート名の変更 .Name = "商品サマリ" End With End With End Sub (もこな2) 2020/03/21(土) 15:24 ---- ここの意味がわかりません。 >◆受注リストに記載の得意先CD別・仕入先CD別にデータを分解し、シート名を「受注商品一覧」とする。 > (得意先CD:I列、仕入先CD:Y列) 1)I列とか、Y列とは? 2)得意先CDと仕入先CDのリスト(重複なし)を作成すればよいだけでは? よくわかっていませんが、フイルタオプションが使えると思います。 で、ピボットは、意先CDと仕入先CDを、ページフィールドに配置するとよいです。 (マナ) 2020/03/21(土) 15:46 ---- フイルタオプションを使うというのは、こんな手順です。 1)作業用シート作成 2)1)に、フィルタオプションで、<受注リスト>から、得意先と仕入先のリスト作成 3)1)に、<受注リスト>から、ピボット作成 4)新規ブック作成。シート名は、「商品サマリ」 5)ピボットを得意先、仕入先で抽出し、結果を4)に転記 6)見出し修正 7)名前をつけて保存 8)ピボットを別の得意先、仕入先で抽出、結果を4)に転記 9)見出し修正 10)名前をつけて保存 こんな感じで、繰り返し 最後に、1)の作業用シートを削除 「商品サマリ」の他に、「受注商品一覧」シートが必要なら それも、<受注リスト>から、フィルタオプションで作成します。 (マナ) 2020/03/21(土) 16:20 ---- >隠居じーさん様 すみません、修正有難うございます。。。 質問したにも関わらず、汚い表になってしまい申し訳ありません。 このような綺麗な表にするには、どのようにされていますか? 横幅の文字数が限られているようなので、何度作成しても綺麗な表になりませんでした…。 よければ、今後の参考に教えてください。 (ピノ) 2020/03/22(日) 23:15 ---- もこな2様 ご教授いただき、ありがとうございます。 ピボットは1からだと難易度高いんですね… 記録で出来たので、できるものかと勝手に思ってしまっていました… 考えを転換して、データソース更新でやってみたいと思います。 参考構文も有難うございます。助かります。 (ピノ) 2020/03/22(日) 23:17 ---- こんばんは ^^ [[20110209184943]] ↑ の 方がご提供して下さっているコードをそのまま 使わせて戴いています。とても便利ですよ。。。m(_ _)m (隠居じーさん) 2020/03/22(日) 23:20 ---- マナ様 ご教授いただき、ありがとうございます。 1)I列とか、Y列とは? …すみません、文字数の関係で表に記載しきれず、肝心なI列・Y列が記載できておりませんでした。説明不足で申し訳ありません。にも関わらず、解読いただき、アドバイス、ありがとうございます。 フィルターオプションという機能、恥ずかしながら知りませんでした。。 とても便利な機能ですね…! 図々しく大変申し訳ありませんが、 ご教授いただいた以下部分の構成が想像がついておらず、 参考の構文をいただけないでしょうか。 2)1)に、フィルタオプションで、<受注リスト>から、得意先と仕入先のリスト作成 3)1)に、<受注リスト>から、ピボット作成 申し訳ありませんが、もしも可能でしたらよろしくお願いいたします。 (ピノ) 2020/03/22(日) 23:27 ---- 隠居じーさん様 ご教授有難うございます!!! すごい!!!できました!!!! 作成頂いたmomo様、そしてご教授いただいた隠居じーさん様に感謝です。 今後活用させていただきます。有難うございます。 (TEST) |[A]|[B] |[C] |[D] |[E] |[F] |[G] |[H] |[I] |[J] |[K] [1] | |A列 |B列 |C列 |D列 |E列 |F列 |F列 |G列 |H列 |I列 [2] | 1|計上年月|グループCD|グループ名 |TCD |T名 |担当者CD|担当者名|管理CD |管理名|商品 [3] | 2| 202002| 111|第一グループ|11101|第一GAU | 4|田中 |1111111|A社 |あ [4] | 3| 202002| 111|第一グループ|11101|第一GAU | 4|田中 |1111111|A社 |い (ピノ) 2020/03/22(日) 23:35 ---- たたき台です。 勿論、修正は必要です。 骨格部分だけですが、こんな感じと予想します。 作業用シートは、動作確認用にあえて残してあります。 Option Explicit Sub test() Dim tbl As Range Dim ws As Worksheet Dim c As Range Dim pvt As PivotTable Dim pvf As PivotField Dim 行, 抽出条件, 集計 As String Dim wb As Workbook Dim 条件リスト Dim 日付 As String Dim p As String Dim k As Long Dim 得意先 As String, 仕入先 As String 行 = Array("出荷日", "商品コード", "商品名カナ", "ケース入数", "ボール入数") 抽出条件 = Array("管理CD", "TCD") 集計 = "引当数個数" Set tbl = Worksheets("受注リスト").Range("A1").CurrentRegion Set ws = Worksheets.Add Set c = ws.Range("A1:B1") c.Value = 抽出条件 tbl.AdvancedFilter xlFilterCopy, , c, True 条件リスト = c.CurrentRegion.Value Set c = ws.Range("E1") Set pvt = ws.Parent.PivotCaches.Create(xlDatabase, tbl).CreatePivotTable(c) pvt.RowAxisLayout xlTabularRow pvt.ColumnGrand = False For Each pvf In pvt.PivotFields pvf.Subtotals(1) = False Next pvt.AddFields RowFields:=行, PageFields:=抽出条件 pvt.AddDataField Field:=pvt.PivotFields(集計), Function:=xlSum Set wb = Workbooks.Add(xlWBATWorksheet) wb.Sheets(1).Name = "商品サマリ" 日付 = Format(Date, "yyyymmdd") ' p = ThisWorkbook.Path & "¥" & 日付 & "_" For k = 2 To UBound(条件リスト) 得意先 = 条件リスト(k, 1) 仕入先 = 条件リスト(k, 2) pvt.PivotFields(条件リスト(1, 1)).CurrentPage = 得意先 pvt.PivotFields(条件リスト(1, 2)).CurrentPage = 仕入先 pvt.TableRange2.EntireColumn.AutoFit pvt.TableRange2.Copy wb.Sheets(1).Range("a1").PasteSpecial xlPasteValues wb.Sheets(1).Range("a1").PasteSpecial xlPasteColumnWidths wb.SaveAs p & 得意先 & "_" & 仕入先 & ".xlsx", xlOpenXMLWorkbook wb.Sheets(1).UsedRange.Clear Next wb.Close False ' On Error Resume Next ' ws.Delete ' On Error GoTo 0 End Sub (マナ) 2020/03/23(月) 20:12 ---- 間違えました。 Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True でした。 (マナ) 2020/03/23(月) 20:19 ---- マナ様 ご丁寧にありがとうございます。 いただいた骨子を参考に、作成してみたいと思います。 本当に、助かりました。。 有難うございました!! (ピノ) 2020/03/23(月) 23:17 ---- マナ様 先程は失礼いたしました。 先程質問させていただいた内容は、この質問内容の続きでした。 頂いた骨子を走らせ、大枠やりたいことができました! 追加で質問、申し訳ありません。 下記の部分の行=Array〜を、条件を本番用に変えてみたところ、 「pvt.AddFields RowFields:=行, PageFields:=抽出条件」この部分で、 『pivottableクラスのAddFields メソッドが失敗しました』と出てきてしまいます。 このエラーの原因がどこにあるか、行や抽出条件をいじってみてもわからず、 もしわかれば教えて頂けないでしょうか。 <変更構文> 行 = Array("出荷日", "専伝NO", "管理CD", "得意先店舗コード", "得意先コード", "得意先名カナ", "物流センタコード", "商品コード", "商品名カナ", "ケース入数", "ボール入数", "引当数個数", "TCD", "相手商品コード") 抽出条件 = Array("管理CD", "TCD") 集計 = "引当数個数" ※上記以外は頂いた構文をいじっておりません。 (PINO) 2020/04/12(日) 01:10 ---- >抽出条件 = Array("管理CD", "TCD") フィルター(抽出条件)と行に、同じフィールドを配置できません。 ということが原因だと思います。 必要なら、マクロの最初で、元データにフィールドを複製(別のフィールド名)すればよいです。 (マナ) 2020/04/12(日) 09:49 ---- マナ様 ご教授有難うございます。 フィルターと行に同じフィールドの配置をやめてみましたが、 やはり同じ部分でエラーとなってしまいます。。 他に考えられる原因はありますでしょうか。 <変更内容> 行 = Array("出荷日", "専伝NO", "得意先店舗コード", "得意先コード", "得意先名カナ", "物流センタコード", "商品コード", "商品名カナ", "ケース入数", "ボール入数", "引当数個数", "相手商品コード") 抽出条件 = Array("管理CD", "TCD") (ピノ) 2020/04/13(月) 11:42 ---- フィールド名が間違っていることはありませんか。 半角全角の違い、スペースの有無とか。 以下でエラーがでないなら、その可能性が高いです。 Option Explicit Sub test2() Dim tbl As Range Dim pvt As PivotTable Dim 行, 抽出条件, 集計 As String Dim k As Long 抽出条件 = Array("管理CD", "TCD") 集計 = "引当数個数" Set tbl = Worksheets("受注リスト").Range("A1").CurrentRegion 行 = Application.Index(tbl.Value, 1) For k = 0 To UBound(抽出条件) 行 = Filter(行, 抽出条件(k), False) Next Set pvt = ActiveWorkbook.PivotCaches.Create(xlDatabase, tbl).CreatePivotTable("") pvt.AddFields RowFields:=行, PageFields:=抽出条件 pvt.AddDataField Field:=pvt.PivotFields(集計), Function:=xlSum End Sub (マナ) 2020/04/13(月) 19:05 ---- マナ様 有難うございます。 頂いた構文ではエラーになりませんでした。 ご指摘いただいた通り、タイトル行に不要な空欄が入っており、削除したのですが、 やはり同じところでエラーになります… ちょっと落ち着いて、後程もう少し見直してみたいと思います。 有難うございます。 (ピノ) 2020/04/14(火) 11:37 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/202003/20200320225733.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97033 documents and 608014 words.

訪問者:カウンタValid HTML 4.01 Transitional