Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10 / 13339 ツリー ←次へ | 前へ→

【81037】データベースから表を作成したのですが Aces 19/7/23(火) 16:33 質問[未読]
【81038】Re:データベースから表を作成したのですが マナ 19/7/23(火) 18:40 発言[未読]
【81039】Re:データベースから表を作成したのですが マナ 19/7/23(火) 22:03 発言[未読]
【81041】Re:データベースから表を作成したのですが Aces 19/7/24(水) 6:45 お礼[未読]
【81042】Re:データベースから表を作成したのですが Aces 19/7/24(水) 8:54 質問[未読]
【81043】Re:データベースから表を作成したのですが マナ 19/7/24(水) 17:49 発言[未読]

【81037】データベースから表を作成したのですが
質問  Aces  - 19/7/23(火) 16:33 -

引用なし
パスワード
   見出シート、詳細シート、一覧シートがあります

見出シートのa列にあるデータで詳細シートのa列をフィルタをかけて抽出し

一覧シートにデータを貼り付ける

という作業です

(見出シート)
    A   ,   B   ,   C
1,
2,   No. ,
3,190721,
4,190722,

(詳細シート)抽出前
    A   ,   B   ,   C   ,  D
1,
2,No.  , 項目No.,項目名,数量
3,190721,  1   , りんご ,  5
4,190721,  2   , バナナ ,  6
5,190721,  3   , パイン ,  3
6,190722,  1   , りんご ,  2
7,190725,  1   , りんご ,  9
8,170101,  1   , りんご ,  8
9,170101,  2   , バナナ ,  4

(詳細シート)抽出後
    A   ,   B   ,   C   ,  D
1,
2, No.  , 項目No.,項目名,数量
3,190721,  1   , りんご ,  5
4,190721,  2   , バナナ ,  6
5,190721,  3   , パイン ,  3
6,190722,  1   , りんご ,  2


(一覧シート)
    A   ,   B   ,   C  
1,
2,項目/日,190721,190722
3,りんご ,  5   ,   2
4,バナナ ,  6   ,   -
5,パイン ,  3   ,   -

実際は数千行あるため、手作業だととても時間がかかってしまいます

こういうことがvbsで出来るのであれば教えて頂いたいです

ご面倒ではありますが、よろしくおねがいします

【81038】Re:データベースから表を作成したのですが
発言  マナ  - 19/7/23(火) 18:40 -

引用なし
パスワード
   ▼Aces さん:

レイアウトは少し異なりますが
ピボットテーブルを使えば同じような結果が得られます。
手操作だけでできる、とても便利な機能です。

【81039】Re:データベースから表を作成したのですが
発言  マナ  - 19/7/23(火) 22:03 -

引用なし
パスワード
   ▼Aces さん:

こんな手順でもよいかも。

1)一覧シートのA列に、フィルタオプションで項目名を転記
  抽出条件は、見出しシートのNo,とする。
2)見出しシートのNo,をコピーして、一覧シートに行列を入れ替えて貼り付け
3)一覧シートにSUMIFS関数で数量を計算

まずは手作業で試してみるとよいです。

【81041】Re:データベースから表を作成したのですが
お礼  Aces  - 19/7/24(水) 6:45 -

引用なし
パスワード
   なるほど、ピボットテーブルですか

そう言えば、そんな機能あったなー、忘れてました笑

やはり1人だと、頭が凝り固まってしまうのですね

マナさん、本当にありがとうございました

ピボット、マクロ合わせて試してみます

【81042】Re:データベースから表を作成したのですが
質問  Aces  - 19/7/24(水) 8:54 -

引用なし
パスワード
   ピボットをやってみたのですが、表にしたいデータが

数字だけでなく、文字(例えば10↓...10以下)もあり、

データの個数としてだけ一覧表になってしまいました

何か他に良い方法はあるでしょうか?

よろしくおねがいします

【81043】Re:データベースから表を作成したのですが
発言  マナ  - 19/7/24(水) 17:49 -

引用なし
パスワード
   ▼Aces さん:

>何か他に良い方法はあるでしょうか?

Dictionaryを利用するのが、簡単です。
Q&A自掲示板では、よく使われています。
でも、初めてだと全くわからないかもしれません。

Sub test()
  Dim tbl, 抽出条件 As Range, 抽出先 As Range
  Dim w()
  Dim dicX As Object, dicY As Object
  Dim 日付, 項目 As String, 数量 As String
  Dim k As Long
 
  tbl = Worksheets("詳細").Range("a2").CurrentRegion.Value
  Set 抽出条件 = Worksheets("見出し").Range("a2").CurrentRegion
  Set 抽出先 = Worksheets("一覧").Range("a2")
  
  ReDim w(1 To UBound(tbl), 1 To UBound(tbl))
  
  Set dicX = CreateObject("scripting.dictionary")
  Set dicY = CreateObject("scripting.dictionary")

  For k = 1 To UBound(tbl)
    日付 = tbl(k, 1)
    項目 = tbl(k, 3)
    数量 = tbl(k, 4)
    
    If WorksheetFunction.CountIf(抽出条件, 日付) Then
      If Not dicX.exists(日付) Then
        dicX(日付) = dicX.Count + 1
        w(1, dicX(日付)) = 日付
      End If
      If Not dicY.exists(項目) Then
        dicY(項目) = dicY.Count + 1
        w(dicY(項目), 1) = 項目
      End If
      
      w(dicY(項目), dicX(日付)) = 数量
      
    End If
  Next
  w(1, 1) = "項目/日付"
  
  抽出先.CurrentRegion.ClearContents
  抽出先.Resize(dicY.Count, dicX.Count).Value = w
  
End Sub

10 / 13339 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free