Excel VBA質問箱 IV

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

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


1517 / 13645 ツリー ←次へ | 前へ→

【73852】データ抽出、作成について shouw 13/2/25(月) 13:00 質問[未読]
【73853】Re:データ抽出、作成について UO3 13/2/25(月) 13:38 発言[未読]
【73854】Re:データ抽出、作成について shouw 13/2/25(月) 15:40 回答[未読]
【73856】Re:データ抽出、作成について UO3 13/2/25(月) 16:27 発言[未読]
【73857】Re:データ抽出、作成について shouw 13/2/25(月) 16:37 回答[未読]
【73859】Re:データ抽出、作成について UO3 13/2/25(月) 17:47 発言[未読]
【73869】Re:データ抽出、作成について shouw 13/2/26(火) 19:05 質問[未読]
【73877】Re:データ抽出、作成について UO3 13/2/27(水) 10:09 発言[未読]
【73884】Re:データ抽出、作成について shouw 13/2/28(木) 13:17 質問[未読]
【73886】Re:データ抽出、作成について UO3 13/3/1(金) 15:50 発言[未読]
【73887】Re:データ抽出、作成について UO3 13/3/1(金) 15:51 発言[未読]

【73852】データ抽出、作成について
質問  shouw  - 13/2/25(月) 13:00 -

引用なし
パスワード
   いつもお世話になっております。

質問なのですが、例えばシート1に「りんご」、「みかん」、「ぶどう」の入荷個数・売上・在庫残数のデータが日ごとに入っているとします。

シート2に管理表を作り、【商品名】で「りんご」を選択し、【日付】で選択した日のA1に入荷個数・B1に売上・C1に在庫残数を抽出したいです。

また、品名ごとの決まった項目(例:定価 りんご(100円)、みかん (80円)、ぶどう (150円))をD1に表示させたいのですが、うまく考えがまとまらずどのように組めばいいかもわかりません。

どなたかご指導、ご鞭撻のほどよろしくお願い致します。

【73853】Re:データ抽出、作成について
発言  UO3  - 13/2/25(月) 13:38 -

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

こんにちは

シート1、シート2の【具体的なレイアウト】を教えていただけませんか?

それと、
>
>シート2に管理表を作り、【商品名】で「りんご」を選択し、【日付】で選択した日のA1に入荷個数・B1に売上・C1に在庫残数を抽出したいです。

【選択】というのが、具体的にどういう指定をされようと考えておられますか?
たとえば「りんごを選択」というのは、具体的にどういった操作になりますか>

【73854】Re:データ抽出、作成について
回答  shouw  - 13/2/25(月) 15:40 -

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

リストボックスで作成し、選択、入力をするようにしようと考えておりました。

よろしくお願い致します。

【73856】Re:データ抽出、作成について
発言  UO3  - 13/2/25(月) 16:27 -

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

>リストボックスで作成し、選択、入力をするようにしようと考えておりました。
>

いやぁ・・・・・・

これではまったくわかりませんねぇ。
逆に、shouwさんは、これだけの説明がほかの人からアップされたとして
コード案作成も含めて、対応できますか?

最低でも【シートのレイアウト】は必要ですし。

それと、【考えておられる】リストボックスは、
シート上のコントロールですか(フォームツール あるいは ActiveX)
それともユーザーフォームですか?

【73857】Re:データ抽出、作成について
回答  shouw  - 13/2/25(月) 16:37 -

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

説明不足大変申し訳ありません。
不愉快な思いをさせてしまい申し訳ありません。

選択欄はユーザーフォームを使用します。

【73859】Re:データ抽出、作成について
発言  UO3  - 13/2/25(月) 17:47 -

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

不愉快ということではありませんのでご安心を。
3度目のお願いになりますが
【各シートのレイアウト】を説明いただけませんか?

【73869】Re:データ抽出、作成について
質問  shouw  - 13/2/26(火) 19:05 -

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

ご返信遅くなり、大変申し訳ありません。

レイアウトですが、シート1はデータシートとなっております。

   A  B  C  D   E  F  G  H
1    り  ん  ご   み  か  ん 
2    在庫 入荷 売上 在庫 入荷 売上
3  3日 2  3  4  4  3  2
4  2日 1  1  8  6  7  6
5  1日 6  7  2  9  1  8

A列には日付が入るようになっており、A3が最新の日付で下に行くにつれ古い日付となっております。
更新ボタンを作成しており、ボタンクリックでA3に一行挿入され新しいデータを入れれるようになっております。
B1からD1が結合されており、品名(りんご)とあり、B2/C2/D2がそれぞれの項目名、B3/C3/D3からはその日ごとのデータを入力してあります。
E1列からは同様に違う品名のもののが繰り返えされております。

次にシート2が管理表になっており、ユーザーフォームで作成した品名を選択できるリストボックスが一番上にあります。
B4からD4までが日付選択欄、B6が在庫の平均数、C6が在庫の最大値、D6が在庫の最小値でB7からは入荷の平均数、C7は入荷の最大値、D7は入荷の最小値、B8からは売上の平均数、C8は売上の最大数、D8が売上の最小値を表示させたいと考えております。

そこで商品名を選び、なおかつ2日〜3日のように日付を選択するとシート1のデータシートから該当する日付の各々のデータを抽出し、上記で記した箇所に自動で表示させるようにしたいと考えておりました。
また、各々の固有のデータ、例えば定価や産地などデータベースには入力していない固定された項目をB10,C10に表示させたいです。

長文になり、説明下手で申し訳ないのですがご考察よろしくお願い致します。

【73877】Re:データ抽出、作成について
発言  UO3  - 13/2/27(水) 10:09 -

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

おはようございます

ごめんなさい。追加説明いただいた後も、イメージがつかめません。
以下、疑問点を列挙します。

1.まず、【ユーザーフォームで新規日付行をSheet1の3行目に挿入する】というところは
  今回のテーマとは離れて、別途、そういう仕掛けがあるというぐらいの理解でいいですね。
2.なので、あくまで、【出来上がりの状態】としてのSheet1 を相手にするということですね?
3.【選択欄はユーザーフォームを使用します。】という説明がありました。
  この選択が日付のことか、商品のことかはわからないのですが、別の説明として
  【シート2が管理表になっており、ユーザーフォームで作成した品名を選択できるリストボックスが一番上にあります。】
  という表現があります。これはシート上に配置したフォームツール(あるいはActiveXですか?)のリストボックス?
  要は、今回使おうとしているものがユーザーフォームなのか、シート上のコントロールなのかがわからないんです。
4.商品、日付を選択するリストボックスが、何者なのかは上記のとおりわかりませんが、いずれであれ、
  商品のリストボックスのリストにある文字列(りんご とか)と、Sheet1 の1行目の結合セルにある文字列は
  【同じ値】ですね?(アップされた例では、り  ん  ご と記載されていますので心配になりました)
5.日付なんですが、Sheet1のA列、アップされた例では 3日 とか 2日 となっていますね。
  これは、文字列としての値として、このようになっているのですか?
  それとも、値は日付型(2013/2/10 とか)で、表示書式で 3日 等の表示がされているだけですか?
6.リストボックスがわの日付は、どういった値でしょう。 文字列として 3日 とか 2日 となっているのですか?
7.Sheet1の1行目、例では りんごとみかんですが、右のほうにたくさん商品があると考えていいですか?
  それとも、ほんとうに、この2つの商品だけですか?

Sheet2になると、もっとイメージがつかめません。上でふれた
【シート2が管理表になっており、ユーザーフォームで作成した品名を選択できるリストボックスが一番上にあります。】
が気になりますし・・・

8.【B4〜D4が日付選択欄】?
  日付は3つ選択するんですか?B列の日付、C列の日付、D列の日付?
  もしそうなら、B列、C列、D列は、縦方向には同じレイアウトだと思うんですが
  【B6が在庫の平均数、C6が在庫の最大値、D6が在庫の最小値】列によって項目が違いますねぇ?
9.【B7からは入荷の平均数】といった表現と、【C7は入荷の最大値】といった表現を使い分けておられますね。
  ということは【からは】という表現は、縦ないしは横に同じ項目が続く、【からは】がないものはそのセルだけ?
10.【また、各々の固有のデータ、例えば定価や産地などデータベースには入力していない固定された項目をB10,C10に表示させたいです。】

  まず、これら固有の情報は、ユーザーフォーム(ですか?)の上で、操作者が手打ちするんですか?
  それとも、どこかに品名をキーにしたテーブルがあって、そこからひっぱってくるんですか?
11.なによりも、要件としては
 ・なんらかの方式で指定された特定の日付の商品の 在庫、入荷、売上 を 
  Sheet1からユーザーフォームのテキストボックスあたりに抽出。
 ・それとはべつのテキストボックスに定価や産地をいれる。
 ・更新ボタンで、Sheet2 に【何かを書き込む】
 こういった流れですか?

【73884】Re:データ抽出、作成について
質問  shouw  - 13/2/28(木) 13:17 -

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

お疲れ様です。

たびたびの説明不足申し訳ありません。

1、別途そういうふうに作ってあります。

2、Sheet1に打ち込んだデータをSheet2に作った管理表へ抽出して表したいので作成しているのはSheet2のほうです。

3、商品の選択欄でSheet2上に配置したフォームツールです。

4、同じ値です。結合したセル内の文字を表すのにあのような表記になってしまいました。すいません。

5、文字列の表現としてあのようになりましたが実際は【平成25年1月1日】のようになっています。

6、日付はリストボックスで選択するようにはなっておりません。
Sheet1のデータをSheet2で商品を選びなおかつ日付を選択することにより、Sheet1の該当する商品の選んだ日の入力したデータを抽出したいと考えております。
(このへんはまだ考えがまとまっていなくどのようにするのが一番良いか迷っています。選んだ日(平成25年1月2日〜平成25年1月6日など)のデータを抽出するために最善の方法があればご指導願います。)

7、右のほうにまだまだ商品があります。約50項目くらいです。

8、B4:平成25年1月1日、C4:〜、D4:平成25年1月6日です。
こちらも説明不足過ぎました。本当に申し訳ありません。

9、【からは】は言葉の選択ミスです。
前述したセル内に抽出した最大値、最小値、平均値がでれば良いと考えております。

10、りんごを選択するだけでとB10,C10セルに【産地:津軽】、【定価100円】を自動ででるようマクロで組めないものか考えておりました。

11、Sheet1に日々入力してあるデータはただのデータとして存在しているので、Sheet2へそのデータを抽出し、1品目(りんご、みかんなど)ごとに見やすくまとめた形式として表したいのです。
例えば【りんご】の1日〜6日までのデータを見る際に今まではSheet1の打ち込んだデータの該当する日付から探し出し、手計算していたものをSheet2に自動で表せるようにしたいです。
その際にSheet1には入力していない【りんご】に関係するものも表示できたら良いなと思っておりました。

U03さんにはいつもお忙しいところご考察頂き、本当に感謝しております。

言葉足らずで説明不足な点は本当に申し訳ありません

よろしくお願い致します。

【73886】Re:データ抽出、作成について
発言  UO3  - 13/3/1(金) 15:50 -

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

こんにちは

とりあえず書いてみました。

・リストボックスをクリックして実行する手もありますが、操作性がおちると思われますので
 別途、フォームツールのボタンを配置して、そこに以下のマクロを登録してください。
・産地や価格情報のテーブルを "マスタ" というシートに作ってください。
 A列が商品名、B列が産地、C列が価格です。

★しばらく、この板にこれないかもしれません。何かあれば書き込みは読めますのでアップしてください。

Sub Sample()
  Dim fdt As Variant
  Dim tdt As Variant
  Dim com As String
  Dim x As Variant
  Dim c As Range
  Dim stk() As Long
  Dim inp() As Long
  Dim sls() As Long
  
  With ActiveSheet.DrawingObjects("List Box 1")    '実際の名前に
    If .ListIndex < 0 Then
      MsgBox "リストから選択してから実行してください"
      Exit Sub
    End If
    com = .List(.ListIndex)
  End With
  
  fdt = Range("B2").Value '開始日
  tdt = Range("D2").Value '終了日
  
  If Len(fdt) = 0 Or Len(tdt) = 0 Then
    MsgBox "開始日、終了日をいれてから実行してください"
    Exit Sub
  End If
  
  If Not IsDate(fdt) Or Not IsDate(tdt) Then
    MsgBox "日付が正しくありません"
    Exit Sub
  End If
  
  If fdt > tdt Then
    MsgBox "開始日と終了日の関係が正しくありません"
    Exit Sub
  End If
  
  With Sheets("Sheet1")
    x = Application.Match(com, .Rows(1), 0)
    If Not IsNumeric(x) Then
      MsgBox "指定のデータがありません"
      Exit Sub
    End If
    
    ReDim stk(1 To 1)
    ReDim inp(1 To 1)
    ReDim sls(1 To 1)
    
    For Each c In .Range("A3", .Range("A" & .Rows.Count))
      If c.Value2 < fdt Then Exit For
      If c.Value2 <= tdt Then
        stk(UBound(stk)) = .Cells(c.Row, x).Value
        inp(UBound(inp)) = .Cells(c.Row, x + 1).Value
        sls(UBound(sls)) = .Cells(c.Row, x + 2).Value
        ReDim Preserve stk(1 To UBound(stk) + 1)
        ReDim Preserve inp(1 To UBound(inp) + 1)
        ReDim Preserve sls(1 To UBound(sls) + 1)
      End If
    Next
    
    If UBound(stk) = 1 Then
      MsgBox "範囲内の日付がありません"
      Exit Sub
    End If
    
    ReDim Preserve stk(1 To UBound(stk) - 1)
    ReDim Preserve inp(1 To UBound(inp) - 1)
    ReDim Preserve sls(1 To UBound(sls) - 1)
    
  End With
  
  'シートにセット
  Application.EnableEvents = False
  
  Range("B6").Value = WorksheetFunction.Average(stk)
  Range("C6").Value = WorksheetFunction.Max(stk)
  Range("D6").Value = WorksheetFunction.Min(stk)
  
  Range("B7").Value = WorksheetFunction.Average(inp)
  Range("C7").Value = WorksheetFunction.Max(inp)
  Range("D7").Value = WorksheetFunction.Min(inp)
  
  Range("B8").Value = WorksheetFunction.Average(sls)
  Range("C8").Value = WorksheetFunction.Max(sls)
  Range("D8").Value = WorksheetFunction.Min(sls)
  
  With Sheets("マスタ")
    x = Application.Match(com, .Columns("A"), 0)
    If IsNumeric(x) Then
      Range("B10").Value = "【産地:" & .Cells(x, "B").Value & "】"
      Range("C10").Value = "【価格:" & .Cells(x, "C").Value & "】"
    Else
      Range("B10:C10").ClearContents
    End If
  End With
  
  Application.EnableEvents = True
End Sub

【73887】Re:データ抽出、作成について
発言  UO3  - 13/3/1(金) 15:51 -

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



Application.EnableEvents = False

Application.EnableEvents = True

は、ともに不用でした。

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