Excel VBA質問箱 IV

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

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


165 / 3841 ページ ←次へ | 前へ→

【79160】Re:ファイルをまたいだ数値の取得および...
回答  まぐろ  - 17/5/26(金) 15:06 -

引用なし
パスワード
   ▼γ さん:
>疑問点。
>1.単月業績ファイルでは、部門という切り口はどうなっているのですか?
>2.製品は"あ"と"い"だけですか?それは固定なんですか?
>
>集計は「作業内容」ファイルで計算式で行い、
>その結果を転記する部分だけマクロにするほうが効率がよいかもしれませんね。
>
>なお、表を書くときは、こんな風に書いた方が分かりやすいと思う。
>■「作業内容」ファイルの「部門A」シート(元資料)
>
>(上段;予算 下段;実績)
> A      B    C    D ・・・・・
>1 作業内容   4月  5月  6月 ・・・・・
>2 作図   10,000 11,000 12,000・・・・
>3 (製品あ)  9,000 12,000 10,500・・・・
>4 組立   15,000 14,000 17,000・・・・
>5      13,500 12,000 16,000・・・・
>6 要請対応  5,000  4,200  4,800・・・・
>7       5,100  4,000  4,700・・・・
>8 作図    3,000  2,700  2,800・・・・
>9 (製品い)  2,850  2,750  2,900・・・・


γ様

お返事ありがとうございました。

表の書き方は仰る通りです、自分のは見にくすぎました、すいません。

疑問点1.について

   AU  AV    AW    AX
29 部      予算    実績
30 門  作図  14,800  13,400→製品"あ"と"い"の合算
31 A  組立  17,000  16,000
32   要請対応  4,800   4,700
33 部
34 門
35 B
36 ・
37 ・
38 ・

といったように、「作業内容」ファイルでは、1部門の数値が
1SHEETでまとめられており、各部門のSHEETからそれぞれ1つの月の数値を
取得していき「単月業績」の中で1つのSHEETでまとめる、という形です。

疑問点2.について

固定ではなく、期(半年)ごとで見直しをかけて、変更します。
ついでに、”部門”の数(SHEET)の数も、見直しによって増減することもあります。

VBAだと列を指定して数値を取得するので、変更があってもそれに応じて
取ってくる行の値を変えればいいのかなと思っていました。


>集計は「作業内容」ファイルで計算式で行い、
その結果を転記する部分だけマクロにするほうが効率がよいかもしれませんね。

その場合、「作業内容」に集計用のシートを別途作って、そこでピボットで集計、
それを転記、みたいな流れでしょうか?
・ツリー全体表示

【79159】Re:ファイルをまたいだ数値の取得および...
回答  まぐろ  - 17/5/26(金) 15:03 -

引用なし
パスワード
   ▼カリーニン さん:
>先ずは、手作業でやるならどういう手順になるかを日本語で考えてみましょう。
>後は、考えた手順をコード化するだけです。


カリーニン様

お返事ありがとうございました。

>日本語で考える
どんなコードかを検索する際に、以下のように考えました。

1.「作業内容」ファイルでは、各SHEET(部門A、B、C、D・・・)で、
数値(作業時間)が、作業内容ごとに入力されている。
このSHEETの数値を「単月業績」へ引っ張りたい。
しかし「作業内容」の各SHEETは別ファイルである

2.さらに、「作業内容」の項目と「単月業績」の項目は、
1対1の対応関係になっていない(「作業内容」の項目を集約して
計算しなければならない)

3.「単月業績」の”4月”SHEETを作る際は「作業内容」の部門SHEETの
4月の数値から、「単月業績」の”5月”を作る際は「作業内容」の5月から、
といったように、取得する数値(列)が変わっていく。


1.は、
DIM 変数 AS RANGE
SET 変数 = RANGE を使うのかなと思いましたが、

別ファイルからの取得なので、

SET 変数 = RANGE('[作業内容.XLS]部門A!B2)

としてみましたが、コンパイルエラー、となってしまいました。
1.ができない為2.、3.に進めない状況です。

1つの変数については検索して出てきますが、組み合わせになると
なかなか出てこなくて難しいです。
・ツリー全体表示

【79158】Re:ピボットテーブル自動作成
質問  yu__ka  - 17/5/26(金) 13:55 -

引用なし
パスワード
   ▼とおりすがり さん:
>偶然にも↓と同じようなことをされてますね。
>
>2種類の集計方法
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=79149;id=excel
>
>参考にされてください。

どの部分が参考になるのでしょうか?
恐れ入りますが、具体的に教えていただきたいのですが。
リンク先確認してみましたが、理解できておりません。
よろしくお願いいたします。
・ツリー全体表示

【79157】Re:ピボットテーブル自動作成
発言  とおりすがり  - 17/5/26(金) 13:04 -

引用なし
パスワード
   偶然にも↓と同じようなことをされてますね。

2種類の集計方法
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=79149;id=excel

参考にされてください。
・ツリー全体表示

【79156】ピボットテーブル自動作成
質問  yu__ka  - 17/5/26(金) 12:56 -

引用なし
パスワード
   ピボットテーブルを自動作成しようと、
下記の通り記述しました。
しかし、金額フィールドの表示形式のところで、
「参照が不正または不完全です。」
とエラーになります。
どの箇所を修正すれば、データフィールドの金額に桁区切りカンマを
設定できるのでしょうか?
宜しくお願い致します。


'【商品コードごとの売上金額を集計シートにまとめる。】

Sub ピボットテーブル作成()
Dim DataS As Worksheet 'データシート
Dim PivotS As Worksheet 'ピボットテーブルを作成するシート
Dim PCache As PivotCache 'ピボットキャッシュ用変数

Set DataS = ThisWorkbook.Worksheets("ソート")

'『ソート』シートからピボットキャッシュを作成

 Set PCache = ActiveWorkbook.PivotCaches.Create( _
 SourceType:=xlDatabase, _
 SourceData:=DataS.Range("a1").CurrentRegion)

'『集計』シートを追加
Worksheets.Add
ActiveSheet.Name = "集計"
Set PivotS = ThisWorkbook.Worksheets("集計")

'『集計』シートにピボットテーブル作成
PCache.CreatePivotTable _
   TableDestination:=PivotS.Range("A1"), _
   TableName:="商品別売上表"

End Sub

Sub フィールド追加()

Dim PivotS As Worksheet 'ピボットテーブルがあるシート
Set PivotS = ThisWorkbook.Worksheets("集計")

'ピボットテーブルに行と列フィールドを追加
 PivotS.PivotTables("商品別売上表").AddFields ColumnFields:=Array("売上日"), _
 RowFields:=Array("品名コード")
'ピボットテーブルに値フィールドを追加
 PivotS.PivotTables("商品別売上表").AddDataField _
 Field:=PivotS.PivotTables("商品別売上表").PivotFields("金額"), _
 Caption:="合計 / 金額", _
 Function:=xlSum
 
'エラーヶ所↓↓
 With .PivotFields("金額")
 .Orientation = xlDataField
 .Caption = "合計 / 金額"
 .NumberFormat = "#,##0_ "
 End With


End Sub
・ツリー全体表示

【79153】Re:2種類の集計方法
発言  カエムワセト  - 17/5/26(金) 1:19 -

引用なし
パスワード
   考え方の一例です。


1.※商品別の数量・金額の合計を集計する

「ソート」シートのD列をキーに重複無しの品名コード一覧を作成

品名コード一覧から項目を一つづつ取出して、SUMIF等を使って数量合計、金額合計を算出
ループは1回

2.※日別の商品別の数量・金額の合計を集計する
「ソート」シートのD列をキーに重複無しの品名コード一覧を作成
同じく重複無しの日付一覧を作成
品名コード一覧から項目を一つづつ取出して、SUMIFS等を使って品名コードと日付一覧をキーに数量合計、金額合計を算出
ループは2回/品名コードループ中に日付ループを組み入れる

※ピボットテーブルだともっと簡単に行けると思います。ピボットテーブルは使ったことが無いので解説できません。
・ツリー全体表示

【79151】Re:2種類の集計方法
発言  たく  - 17/5/25(木) 15:53 -

引用なし
パスワード
   追記させていただきます。
自分なりに切ったはったで記述したものです。
よろしくお願いいたします。

Sub 商品別集計()
  Dim dKey As String
  Dim c As Range
  Dim dic As Object
  Dim v As Variant
  Dim i As Long
  Dim j As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  With Sheets("ソート") 
    For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
      dKey = c.Value & vbTab & c.Offset(, 1).Value
      dic(dKey) = dic(dKey) + c.Offset(, 2).Value
    Next
  End With
  
  With Sheets("集計")  '転記シート
    v = .Range("A1").CurrentRegion.Value
    For i = 2 To UBound(v, 1)
      For j = 2 To UBound(v, 2)
        dKey = v(1, j) & vbTab & v(i, 1)
        v(i, j) = dic(dKey)
      Next
    Next
    .Range("A1").CurrentRegion.Value = v
    .Select
  End With
  
  Set dic = Nothing

  
End Sub
・ツリー全体表示

【79150】Re:2種類の集計方法
発言  カエムワセト  - 17/5/25(木) 15:41 -

引用なし
パスワード
   ここのVBA質問箱基本ポリシーの記述です。


>何をやったか書いてください
>おそらくあなたは、色々なことを試してできなかった末にここに質問を書くのでしょう。しかし回答者は、あなたが今まで何をやってきたか、何を知っていて何を知らないかわかり>ません。今まで試したこと、やろうと思ったけどやり方がわからなかったことなどをできるだけ詳しく書いてください。
・ツリー全体表示

【79149】2種類の集計方法
質問  たく  - 17/5/25(木) 15:16 -

引用なし
パスワード
   元データから下記のような二通りの集計をしたいと考えています。
こちらの過去質問も確認しましたが、
アレンジしても思うようにいきません。
お知恵をお貸しいただけたらと思います。
よろしくお願いいたします。


Sheet名[ソート]
※これが元データです。
  A    B     C     D       E     F       G       H    I    J
1 売上日  伝票No.    連番    品名コード    品名   倉庫コード    納入場所   数量    単価    金額
2 2017/4/1 12345   1    62845    ボールペン 692      東京    15,800   20  316000
3 2017/4/1 12845   1    62846    万年筆   258      厚木    2,950   10  29500
4 2017/4/2 32985   1    62843    赤鉛筆   21       長島    6,849   30  205470
5 2017/4/3 62451   1    62841    鉛筆HB   30       京都    30,500   50  1525000
  ・
  ・
  ・
  ・
  ・
30 2017/4/30

Sheet名[商品別集計]←マクロの中でシートを新規作成し、集計という名前を付けて保存。
※商品別の数量・金額の合計を集計する
  A        B     C     D 
1 品名コード      品名   数量    金額
2 62845    ボールペン 98,000  196,000
3 62846    万年筆   47,500   475,000
4 62843    赤鉛筆   38,400  1,152,000
5 62841    鉛筆HB   105,000 5,250,000
  ・
  ・
  ・
  ・
  ・
Sheet名[日時集計]←マクロの中でシートを新規作成し、集計という名前を付けて保存。
※日別の商品別の数量・金額の合計を集計する

  A    B        C     D       E  
1 売上日  品名コード  品名   数量    金額
2 2017/4/1 62845    ボールペン15,800  316000
3 2017/4/1 62846    万年筆  2,950   29500
4 2017/4/2 62843    赤鉛筆  6,849   205470
5 2017/4/3 62841    鉛筆HB  30,500  1525000
  ・
  ・
  ・
  ・
  ・
30 2017/4/30
・ツリー全体表示

【79148】Re:ファイルをまたいだ数値の取得および...
発言  γ  - 17/5/25(木) 7:19 -

引用なし
パスワード
   疑問点。
1.単月業績ファイルでは、部門という切り口はどうなっているのですか?
2.製品は"あ"と"い"だけですか?それは固定なんですか?

集計は「作業内容」ファイルで計算式で行い、
その結果を転記する部分だけマクロにするほうが効率がよいかもしれませんね。

なお、表を書くときは、こんな風に書いた方が分かりやすいと思う。
■「作業内容」ファイルの「部門A」シート(元資料)

(上段;予算 下段;実績)
 A      B    C    D ・・・・・
1 作業内容   4月  5月  6月 ・・・・・
2 作図   10,000 11,000 12,000・・・・
3 (製品あ)  9,000 12,000 10,500・・・・
4 組立   15,000 14,000 17,000・・・・
5      13,500 12,000 16,000・・・・
6 要請対応  5,000  4,200  4,800・・・・
7       5,100  4,000  4,700・・・・
8 作図    3,000  2,700  2,800・・・・
9 (製品い)  2,850  2,750  2,900・・・・
・ツリー全体表示

【79147】Re:ファイルをまたいだ数値の取得および...
発言  カリーニン  - 17/5/24(水) 10:35 -

引用なし
パスワード
   先ずは、手作業でやるならどういう手順になるかを日本語で考えてみましょう。
後は、考えた手順をコード化するだけです。
・ツリー全体表示

【79146】ファイルをまたいだ数値の取得および合算
質問  まぐろ  - 17/5/24(水) 8:53 -

引用なし
パスワード
   初投稿です、よろしくお願いします。

以下の、SHEET”部門A”(元資料)から別ファイルのSHEET”○月”(最新の月。
例として6月)へ、ボタンを押すと自動で数値が流れるようにしたいです。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

     SHEET”部門A”(ファイル「作業内容」。元資料)

(上段;予算 下段;実績)
  A1    B1   C1   D1 ・・・・・
作業内容   4月  5月  6月 ・・・・・
  A2・3   B2   C2   D2
 作図   10,000 11,000 12,000・・・・
 (製品あ)  B3   C3   D3
       9,000 12,000 10,500・・・・
  A4・5   B4   C4   D4
 組立   15,000 14,000 17,000・・・・
       B5   C5   D5
      13,500 12,000 16,000・・・・
  A6・7   B6   C6   D6
 要請対応  5,000  4,200  4,800・・・・
       B7   C7   D7
       5,100  4,000  4,700・・・・
  A8・9   B8   C8   D8
 作図    3,000  2,700  2,800・・・・
 (製品い)  B9   C9   D9
       2,850  2,750  2,900・・・・

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

     SHEET”6月”(ファイル「単月業績」)
  
      AV29   AW29   AX29
           予算    実績
      AV30   AW30   AX30
      作図   14,800  13,400→製品"あ"と"い"の合算
      AV31   AW31   AX31
      組立   17,000  16,000
      AV32   AW32   AX32
     要請対応  4,800   4,700

   ※AV,AWといった中途半端な位置にあるのは、SHEET
    ”6月”には「作業内容」以外に他の資料から
    数値を引っ張ってくる為
    
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○備考
・ファイル「作業内容」には”部門A”以外、部門B・C・・と他の部門のSHEET
が入っている。毎月それぞれのシートに最新月の数値を追加していく
・ファイル「単月業績」は毎月、”4月””5月”・・と毎月最新月のSHEETを作っていく

ネットで方法を調べて考えてみましたが、
引用してくる数値が月によって変わること(特定の月の数値を指定して引用する
必要がある)、引用してきた数値を合算すること、ファイル間をまたぐこと
が重なり、どこから手をつければいいかわからなくて質問致しました。
お分かりになれば教えて頂きたいです。すいませんが、よろしく
お願いします。
・ツリー全体表示

【79145】Re:VBEの方の行数の表示
お礼  かな  - 17/5/22(月) 11:28 -

引用なし
パスワード
   ▼カリーニン さん:
回答ありがとうございます。
なかなか目的の記事が見つからず、助かりました。
こちらを参考にデフォでも表示できる方法も探したいと思います。
ありがとうございました。
・ツリー全体表示

【79144】Re:VBEの方の行数の表示
発言  カリーニン  - 17/5/22(月) 10:50 -

引用なし
パスワード
   VBE 行番号 表示
でネット検索してみました。

ht tp://www.koikikukan.com/archives/2014/01/30-015555.php

デフォルトで行番号を表示する機能があるかわ調べていません。
・ツリー全体表示

【79143】VBEの方の行数の表示
質問  かな  - 17/5/22(月) 10:13 -

引用なし
パスワード
   VBE上での行数表示をしたいんですが、そのようような機能はありますか?
・ツリー全体表示

【79142】Re:dictionary item 追加されない
お礼  T-K  - 17/5/21(日) 16:49 -

引用なし
パスワード
   T-Kです
再度ご指摘いただき
ありがとうございます。
ご指摘通りのでした
データ書き込まれました
ほんとに感謝いたします。
・ツリー全体表示

【79141】Re:dictionary item 追加されない
発言  γ  - 17/5/21(日) 12:04 -

引用なし
パスワード
   >それをシート2に作ってあるクロス集計表に、書き込む処理
>をなんとかかんがえてみます。
・書込先シートのB列に品名、
 2行目に日付が間違いなくセットされているか、
・日付の形式がシート1と同じかどうか、
がポイントと思う。
今のロジックでいけるはず。
Do your best !
     
・ツリー全体表示

【79140】Re:dictionary item 追加されない
お礼  T-K  - 17/5/21(日) 9:45 -

引用なし
パスワード
   とりあえず登録されていることがわかりました
いろいろとご迷惑おかけしました
また不明な点ありましたら教えていただけたらとおもいます

ありがとうございました
・ツリー全体表示

【79139】Re:dictionary item 追加されない
お礼  T-K  - 17/5/21(日) 9:43 -

引用なし
パスワード
   T-Kです
早い返信ありがとうございます。
ピボットテーブルの件、ありがとうございます。
確認したら、必要な処理ができました。
目から鱗です
ですが、勉強の意味でもVBAでのクロス集計表の作成を目指します。


イミデイトにて表示させて、Itemが登録されているか
教えていただいた通り確認した結果、予定どおり登録されていました。

ありがとうございます。

それをシート2に作ってあるクロス集計表に、書き込む処理
をなんとかかんがえてみます。
ネットでのっていたサンプルをそのまま使っているため、
手直しが少し必要なようです。
教授ありがとうございました。
・ツリー全体表示

【79138】Re:dictionary item 追加されない
発言  γ  - 17/5/21(日) 7:55 -

引用なし
パスワード
   最初にピボットテーブル関連に触れます。
「ピボットテーブル 連続した日」などで検索すると関連記事があります。
日付のグループ化とフィールドの設定で、「データのないアイテムを表示」を
使うと、データの無い日であっても、連続した日が表示されると思います。

さて、デバッグの話。
こうしたことは、ご自分でトライするものです。

>Debug.Print myVal(i, 4)‘この一文をいれて確認しました。
それはD列に値があるかの確認。

ローカルウインドウで表示されたキーを使って、イミディエイトウインドウで、
? dic(そのキー)
とでもすれば、dictionaryの正しさが確認できるでしょう。

dicの内容を表示するところは、
与えたキーが正しいかどうか、「あなた」が確認すべきです。
・ツリー全体表示

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