Excel VBA変数ワークシートへ反映

このQ&Aのポイント
  • 支店毎に売上集計を行うVBAを現在作成中です。ユーザーフォームで現在までに入力した内容を記載します。
  • 支店名をリストにしており、ユーザーフォームのテキストボックスとコマンドボックスを配置し、テキストボックスに支店名を入力してコマンドボックスを押す事で商品毎の金額の合算が出る様にしたいと考えています。
  • ユーザーフォームのコマンドでどの様に入力したら良いかという事です。
回答を見る
  • ベストアンサー

Excel VBA 変数 ワークシートへ反映

支店毎に売上集計を行うVBAを現在作成中です。 sheet3に支店名をリストにしており、ユーザーフォームのテキストボックスとコマンドボックスを配置し、テキストボックスに支店名を入力してコマンドボックスを押す事でsheet1の決まったセルに商品毎の金額の合算が出る様にしたいと考えています。 金額の集計表は別にあり、列の一番目に支店名、2番目に商品名、3番目に取引内容が反映されております。 今回ご相談させて頂きたいのは、ユーザーフォームのコマンドでどの様に入力したら良いかという事です。下記にユーザーフォームで現在までに入力した内容を記載します。 Sub 売上集計() If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False End If Dim Result As Long For i = 1 To 100 GroupName = Sheets(3).Cells(i, 1).Value Range("A1").AutoFilter field:=1, Criteria1:=Array("" & GroupName & ""), Operator:=xlFilterValues Range("A1").AutoFilter field:=2, Criteria1:=Array("商品名A"), Operator:=xlFilterValues    Range("A1").AutoFilter field:=3, Criteria1:=Array("売上", "返品"), Operator:=xlFilterValues result1 = WorksheetFunction.Subtotal(9, Range("BF:BF")) If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False End If End Sub 上記希望内容についてユーザーフォームのコマンドに入力すべき内容をご存知の方、何卒ご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

>ユーザーフォームのテキストボックスとコマンドボックス とありますが、文脈からフォームコントロールの事の様に思えます。 リストを用意してあるなら、入力規則で十分と思いますがいかがでしょうか。 Sheet1に入力規則から選択するセルと、結果を表示するセル Sheet2にオートフィルタをかけるデータ Sheet3にリストがあるものとします。 ☆標準モジュール Sheet3のリストに動的な名前をつけ、Sheet1のB2に入力規則を設定します。 Sub makeNameAndValidation() ActiveWorkbook.Names.Add Name:="mylist", RefersToR1C1:="=OFFSET(Sheet3!R1C1,0,0,COUNTA(Sheet3!C1),1)" With Sheets(1).Range("B2").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=mylist" End With End Sub ☆Sheet1モジュール オートフィルタを掛けるところは、試験のため簡略化しています。 お気に召したらご自分でアレンジして下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Dim result1 As Long Dim sh As Worksheet Dim GroupName As String GroupName = Target.Value If Intersect(Target, Range("B2")) Is Nothing Then Exit Sub Application.ScreenUpdating = False Set sh = Sheets(2) With sh If .AutoFilterMode Then .AutoFilterMode = False End If 'ここは適当な範囲に合わせて試験したもの '----------------------------------------------------------- .Range("A1").AutoFilter Field:=1, Criteria1:=GroupName result1 = WorksheetFunction.Subtotal(9, .Range("B:B")) '----------------------------------------------------------- Me.Range("A2").Value = result1 If .AutoFilterMode Then .AutoFilterMode = False End If Application.ScreenUpdating = True End With End Sub ※本当にユーザーフォームを使いたいという場合は、補足して下さい。

その他の回答 (1)

  • nak777r
  • ベストアンサー率36% (49/136)
回答No.1

>支店毎に売上集計を行うVBAを現在作成中です。 >sheet3に支店名をリストにしており、 >ユーザーフォームのテキストボックスとコマンドボックスを配置し、 意味不明、 ユーザーフォームそのものが存在するのか ユーザーフォーム等で使用するテキストボックス等を Sheet3 に貼り付けているのか そもそも、コマンドボックスとは何か? コンボボックスなのか、コマンドボタンなのか それとも、コマンドボックスというコントロールが存在するのか? >sheet1の決まったセルに商品毎の金額の合算が出る様にしたいと考えています。 意味不明、 最初、支店毎に~と言っていて、 テキストボックス等に支店を入力するとか書いているのに、結果は商品毎 >今回ご相談させて頂きたいのは、 >ユーザーフォームのコマンドでどの様に入力したら良いかという事です。 意味不明、 コマンドって何? 例えば、"A" って打ったら、○○支店 みたいな事がコマンドだと思うけど そもそも、支店の数や名称は決まっているのでしょうから テキストボックスでなく、コンボボックスで選ばせれば良いだけではないかと 思うのだが、なぜ、テキストボックスを使用して、コマンド入力させるのか 結局なにがしたいのか、何を質問したいのか

関連するQ&A

  • Excel VBA 任意の日付から1週間分抽出

    VBA素人です。 シート1  A   B   C   D   E 1任意の日付 2日付 曜日 内容 氏名 備考 3 4 5 6 このようなデータ入力です マクロ記録でオートフィルタを用い日付抽出をするマクロを吸出し、ネットで知った今日から前後4日間のマクロを入力し,改変し応用しようと考えたのですが、やはり素人には壁が高くうまいこと行きません。 皆さんに教えていただきたいのは以下の式 Range("A2:E2").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$E$5").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria1:=">=" & Date - 4, Operator:=xlAnd, Criteria2:="<=" & Date + 4 の↓この部分 xlFilterValues, Criteria1:=">=" & Date - 4, Operator:=xlAnd, Criteria2:="<=" & Date + 4 の & Date - 4 を、どう変更すれば A1に入力した任意の日付に出来るのか?です。 きっと基本的な事だとは思うのですが、教えてくださいお願いします。

  • エクセルVBAで住所録を作成

    住所録シートに次のようにコードを作っています。 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$B$1" Then 顧客名検索 ElseIf Target.Address = "$C$1" Then フリガナ検索 ElseIf Target.Address = "$D$1" Then 住所検索 ElseIf Target.Address = "$E$1" Then 郵便番号検索 ElseIf Target.Address = "$A$1" Then オートフィルタ解除 カナ順に設定 Else Exit Sub End If End Sub そして標準モジュールには Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub Sub フリガナ検索() ans = InputBox("顧客カナを入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=3, Criteria1:="=*" & ans & "*" '3つ目のフィルターに検索文字 End With End Sub Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub Sub 郵便番号検索() ans = InputBox("郵便番号を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub Sub オートフィルタ解除() Application.CutCopyMode = False Selection.AutoFilter Range("A1").Select End Sub Sub カナ順に設定() Range("C1").Select ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Clear ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Add Key:=Range("C1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("住所録").Sort .SetRange Range("A2:IV65536") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select Selection.AutoFilter End Sub と入れています。 VISTAで作ったのですが、このファイルを共有にして使おうとすると、XPのパソコンでは、A1セルをダブルクリックすると、コードが黄色になり、マクロが中断されます。 B1~G1は問題なくマクロが実行されるのに・・・。 もう一台のVISTAでは同じ共有状態で使っても問題ありません。 どうすればXPでも問題なく使えるのでしょう?

  • エクセル2007のVBAでオートフィルタのチェック

    エクセル2007のVBAでオートフィルタのチェックを閾値以上の%のみに入れたいのです。  ユーザー設定フィルタでは視覚的に解りつらい為、フィルタの▽をクリックした時に、チェックがされている事を確認したいのです。 【シート1の内容】 セルA1から行方向に数字の1~3 セルB1から行方向に、値1、値2、% セルA3~Bnは列方向に、整数 セルC3から列方向に、“=A3/B3”が入力されており、書式は パーセンテージ(小数点以下の桁数は“1”) セルD1に 閾値として 10.5%・・・書式はC3に同じ 【目的】 動きとしては、閾値以上の結果を出すつもりで書きました。 【質問】 フィルタがかかった▽をクリックした時に、1行、2行及びC列の10.5%以上のチェックボックスにチェックを入れたいのです。 しかし、下記コードの .AutoFilter Field:=3, Criteria1:=Array("%") _ , Operator:=xlFilterValues, Criteria2:=Array(TargetCD) でエラーが出てしまいます。 実行時エラー '1004': Range クラスの AutoFilter メソッドが失敗しました。 Sub Threshol() Dim MaxRow As Integer Dim TargetCD Dim CDDiff As Integer Dim MinCD As Single Dim MaxCD As Single Dim i As Integer Dim j As Single MaxRow = Range("C1").End(xlDown).Row With ActiveSheet.Range(Cells(3, 3), Cells(MaxRow, 3)) MinCD = ThisWorkbook.Worksheets(1).Range("D1").Value * 100 MaxCD = Application.Round(Application.Max(.Cells) * 100, 1) CDDiff = (MaxCD - MinCD) * 10 ReDim TargetCD(1 To CDDiff + 1) For i = 1 To UBound(TargetCD) TargetCD(i) = FormatPercent(MinCD / 100 + j, 1) j = Format(j + 0.001, "#.###") Next .AutoFilter Field:=3, Criteria1:=Array("%") _ , Operator:=xlFilterValues, Criteria2:=Array(TargetCD) End With End Sub 皆様、良いご助言を宜しくお願い致します。

  • エクセルVBA住所録で半角全角問わず検索する方法

    エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub

  • ダブルクリックでエクセル起動

    セルをダブルクリックしてマクロを起動させたいのですが。 B1セルをダブルクリックすると、 Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub を実行させるようにしたいのです。 その方法で、C1、D1、E1、・・・も同様にしたいと思っています。 どなたか教えてください。

  • 下記マクロの意味を教えてください。

    Sub 済() With Worksheets("管理表") If .AutoFilterMode Then .AutoFilterMode = False End If Range("O7:P7").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=*済*", Operator:=xlAnd ActiveWindow.SmallScroll Down:=-12 Range("A1").Select End With End Sub よろしくお願い致します。

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • EXCELのVBAを実行したら止まってしまいます。。。

    お世話になります。 下記のマクロを作ってみたのですが、シート「読込」にコピーされたところまで確認できるのですが、その後マウスが砂時計になって、動かなくなってしまいます。オートフィルタを解除する部分を削って実行してみましたが、同じところで止まりますので、貼付のところに問題があるようなのですが、何がいけないのでしょうか? また、なんかもっとスマートなプログラムになりませんでしょうか? 宜しくお願いします。 Sub test() Sheets("Normal").Select Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:=Sheets("読込").Range("B2"), _ Operator:=xlAnd, Criteria2:=Sheets("読込").Range("C2") Selection.SpecialCells(xlVisible).Copy Sheets("読込").Select Range("C3").Select ActiveSheet.Paste Sheets("Normal").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Selection.AutoFilter End Sub

  • エクセルVBAのチェックボックスを使った検索

    当方、VBA初心者です。 使用しているソフトは、エクセル2007です。 都道府県別で会社検索ができるものを作りたいと考えております。 内容は、ユーザフォームに都道府県別のチェックボックスを作っております。 その都道府県をチェックすると オートフィルタ機能でチェックした都道府県をシート上に抽出するものです。 以下が理想とするイメージです。 会社名   住所 aaa      北海道釧路市1-1 bbb      青森県八戸市2-2 ccc      岩手県盛岡市3-3      ↓※北海道と青森県をチェックした場合 会社名   住所 aaa      北海道釧路市1-1 bbb      青森県八戸市2-2 しかし、北海道と青森県をチェックしても、抽出されるのは青森県だけになります。 どのようにしたら、チェックした都道府県をすべて表示できるようになるのでしょうか。 以下が現在のイメージです。 会社名   住所 aaa      北海道釧路市1-1 bbb      青森県八戸市2-2 ccc      岩手県盛岡市3-3      ↓※北海道と青森県をチェックした場合 会社名   住所 bbb      青森県八戸市2-2 以下が現在作成しているものです。 ---- Private Sub CommandButton1_Click() Unload Me End Sub ---- Private Sub CommandButton2_Click() If CheckBox1.Value = True Then Selection.AutoFilter ActiveSheet.Range("$A$5:$O$1677").AutoFilter Field:=10, Criteria1:="=*北海道*" _ , Operator:=xlAnd End If If CheckBox2.Value = True Then Selection.AutoFilter ActiveSheet.Range("$A$5:$O$1677").AutoFilter Field:=10, Criteria1:="=*青森県*" _ , Operator:=xlAnd End If End Sub ---- お手数ではございますが、どうがご教授をお願いいたします。

  • エクセルのVBAの変更点がわからないので教えてください

    下のようなプロシージャをエクセルに組み込んでいますが、次のようなことができるように変更したいので教えてください。 なお、プロシージャは正常に作動しています。 Private Sub Worksheet_Activate() With Sheets("シート名") .AutoFilterMode = False .Range("A1:d1").AutoFilter .Range("A1:d1").AutoFilter field:=1, Criteria1:="<>" .Range(.Range("d1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False .Range("A1:d1").AutoFilter End With End Sub 修正してできるようにしたいこと 1、with sheets("シート名")のシート名にシートがアクティブになったとき、そのシート名が自動で入るようにしたい。 ※シートの数は6シーとあります。 2、セルd1のデータからその行のデータ全体がコピーされるので、必要なセルのデータのみがコピーできるようにしたい。

専門家に質問してみよう