A列  B列  C列  D列 E列 F列・・O列  
1行 月度 店名 店員名 項目 数量 個数 合計
2行  1  東京 A子  初回  10  12  20
3行  1  東京 A子  5回目  20  40  21
4行  3  東京 A子  5回目  30  28  10
5行  4  東京 A子  初回  32  89  11
6行  1  大阪 C男  初回  11  13  12
7行  2  大阪 C男  5回目  77  22  211
8行  3  大阪 D子  初回  33  31  53
9行  1  京都 E子  最終  44  22  23
10行  2  京都 T男  初回  22  54  23

Sheet1(データベース)に上記のようにデータが約3000行あります。
「1月の東京店、A子の初回の合計は?」といった通常オートフィルタで抽出する作業をSheet2のシートで「絞込みしながら検索」するようにフォーム上でしたいのですが。
まず、リストボックス1で1月を選択すると、その抽出結果のみからリストボックス2で店名を選択。店名東京を選択すると同様にその抽出結果のみから店員名をリストボックス3で選択。同様にリストボックス4で項目「初回」を選択すると合計が表示されると言った具合にしたく思います。
参考までにリストボックスからの選択としていますが、よりベストな方法をご教授願います。
Accessで簡単に解決することと百も承知ですが・・・
ようは絞込みしながら検索していく手法を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

質問内容を具体化してみましたがかなり大変な作業です。

まず、質問に対する疑問から、
1.リストボックスは表示→フォームのリストボックス?またはコントロールツールボックスのリストボックス?
2.『フォーム上でしたい』はユーザーフォームを使ってもいい?それともリストボックスのこと?
3.初期状態はどのような想定?全項目無選択?
4.リストボックスのリスト内容はソートする?
4.あるリストボックスを選択したら、他のリストボックスは当然連動して内容を変える?
5.最後に1件まで絞り込んだら2回目の絞込みは行う?

やってみたことは、手順だけ上げると、(上記疑問は作り易い方にしました)
1.ユーザーフォームにコンボボックスを4つ配置
2.ユーザーフォームを開いたら初期設定で各コンボボックスにソートしたリストをセット
3.任意のコンボボックスで項目を選択したらオートフィルタ結果を表示してシート2にコピー
4.同時にコンボボックスのリスト内容を更新
5.1件になって再度絞り込みを行うために初期化ボタンを配置
概略、この位で実現できると思います。コントロール配列とかも使えないのでコードはかなり長いです。(書ききれません)
労多くして・・・の気がしますね。Accessでもゴタゴタするかもしれません。

>よりベストな方法をご教授願います
多分、リストボックスを作ることはExcelのオートフィルタ機能を、他の道具を使って実現するだけの話で得策でないような気がします。
余り回答らしくなっていないので、思いついた方法を挙げておきます。
シート1しか使いませんが、まずデータ→フィルタ→オートフィルタを実行しておきます。
A.メニューのウインドウから『新しいウインドウを開く』を選択します。
B.メニューのウインドウから整列→上下に並べて表示を選択
C.下のウインドウだけを200%~250%位に大きくします。
D.下のウインドウでツール→オプションで表示タグで
    行番号、
    シート見出し、
    水平スクロールバー、
    垂直スクロールバーのチェックをはずします。
E.A~D列と2行目までを表示するように下のウインドウの大きさを変えます。
  コンボボックスを4つ並べたように見える?
F.上のウインドウは大きくします。
G.下にあったウインドウを好きな位置に配置します。絞り込みはこのウインドウから行います。

不満足かもしれませんが、代替案です。ご参考に。(Excel2000です)

この回答への補足

非常にわかりやすいご回答ありがとうございます。
代替案まで立案いただき本当にありがとうございます。
今回質問したのは誰もがマウス操作だけで処理が出来るようにと思ったからです。

ユーザーフォーム上にコンボボックスを4つ用意し
初期状態は全項目無選択、リストボックス1よりA列「月数」を選択後、
その抽出結果からリストボックス2でB列「店名」を選択、この要領でリストボックス3、4でC列で検索→D列で検索。(この4つの絞込み検索で1行のみとなります)そしてコマンドボタンを押すとその結果をテキストボックス1.2.3等にE,F,G列の内容を表示させたく思います。
欲を言えば1~4まで全項目を選択していないとコマンドボタンを押しても「入力ミスです!」等のダイアログボックスが出れば大満足です。
「AdvancedFilter」というものでやってみてはと助言いただきましたが、意味がわかりません。
Sheet2上で云々というのは無視してもらって結構です。
オートフィルタ機能を手作業ですることと同作業という事は十分わかっています。
大変お手数ですがご教授願います。

補足日時:2001/10/24 22:01
    • good
    • 0

再び こんにちは!


>なぜならリストボックス1~4での絞込み検索する
>事で1行のみの抽出となります。

解が必ず1つなら
DGET関数が使えますが・・・オートフィルタのように
その都度、絞込み複数表示するものではないのでご希望と
違いかもしてませんね!

    A列  B列  C列  D列 E列・・O列
1行 月度  店名  店員名 項目 式・・・合計
2行 リスト リスト リスト リスト 式・・・ 式

E列以降の各式
=IF(COUNTA($A$1:$D$1)<4,"",DGET(表1,E$1,$A$1:$D$2)
これをO列まで複写
データベースのフィールド名(項目)は、全て違うものであることが前提です。
(複数の戻り値があったり、1つもない時はエラーとなり
 ますから、必要によりエラー回避の数式を組み合わせる
 必要があります。)

オートフィルタのようなリアルタイム表示にするには
フィルターオプション機能をVBAで制御することになると思います。
その時は、他の方の書き込みをお待ちください!
    • good
    • 0

こんばんは!



各条件による合計の計を求めればよろしいのでしょうか?

・項目も含めた範囲に名前を定義(仮に表1)
・シート2
   A列  B列  C列  D列  O列  
1行 月度  店名  店員名 項目  合計
2行 リスト リスト リスト リスト 式

式 =DSUM(表1,$O$1,A1:D2)

意図したものと外していたらスミマセン

この回答への補足

早速の回答ありがとうございます。
合計の意は単に値表示するだけで検索して計算した結果ではありません。
なぜならリストボックス1~4での絞込み検索する事で1行のみの抽出となります。理解に苦しむ文面で大変申し訳ありません。

補足日時:2001/10/21 23:09
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

QExcel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法

A列とB列に文字が入っているのですが、下記のようにA列とB列とC列に文字を移動させたいです。
(A列の数字は必ず奇数のA列に入っています。)
VBAのコードを教えて下さい。

例えば
A1 1  B1 cat
A2 空白 B2 猫
A3 空白 B3 dog
A4 空白 B4 犬
A5 2  B5 whale
A6 空白 B6 クジラ
A7 3  B7 rabbit
A8 空白 B8 ウサギ

とデータがある場合

A1 1  B1 cat  C1 猫
A2 空白 B2 dog  C2 犬
A3 2  B3 whale  C3 クジラ
A4 3  B4 rabbit C4 ウサギ

としたいです。

実際、データは、A5196まであります。

Aベストアンサー

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

少しは短縮できると思います。m(_ _)m

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeB...続きを読む

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

QエクセルでA列の数値にB列以降の列の数値を乗じて各列の最終行に合計を出したい

エクセルで集計をしたいのです。
うまく説明できませんが教えてください。
列数が100列以上ある集計表です

A列の1~20行の固定した数値にB列~100列以上の1~20行の各列の数値を乗じてそれぞれの列の合計をそれぞれの列の21行目に出したいのですがどうしたらいいか教えてください。

Aベストアンサー

B21に
=SUMPRODUCT($A$1:$A$20,B1:B20)
とします。後は横にコピーします。

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Q行のデータ(a列b列c列)をd列に表示したい

a1、b1、c1のセルに入力したデータをd1セルに表示したい。可能でしょうか。一例「a1セルに1と入力、b1セルに2と入力、c1セルに3と入力しd1セルに123と表示する」

Aベストアンサー

d1セルに =a1&b1&c1

エクセルですよね?

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

QA列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

Aベストアンサー

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim ...続きを読む

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

Q【VBA マクロ】条件に合うセルを検索して、その行のD列に0を入力する sheet1のA列に4月〜

【VBA マクロ】条件に合うセルを検索して、その行のD列に0を入力する

sheet1のA列に4月〜3月までの月が入っています。
sheet2のA1には4月〜3月のいずれかの月が入っています。
sheet2のA1をsheet1のA列から検索して、その行のD列へ0を入力したいです。
ご教授お願いします。

Aベストアンサー

前提としてsheet1のA列にある4月〜3月までの月というのはA1~A12までの範囲ですか.それともそれ以降にも4月~3月というのが続くのでしょうか?
というのも1つの方法としてA列の上から順にSheet2のA1と合致しているかを見て,
合っている場合にその行のD列に0を打つなら繰り返し演算で良いと思いましたので(For Nextを使う)


Sub test()
Dim i As Integer
For i = 1 To 12
If Worksheets("Sheet1").Cells(i, 1) = Worksheets("Sheet2").Cells(1, 1) Then
Cells(i, 4) = 0
End If
Next
End Sub


関数なら下記式で同じような事ができますね.
=IF(ISERROR(MATCH(A1,Sheet2!$A$1,0)),"",0)


人気Q&Aランキング

おすすめ情報