• ベストアンサー

エクセルVBAの構文を教えてください。

こんばんは。マクロ初心者です。 VBAの構文を教えてください。 ■シート(1)には項目が50ある5年分(60ヶ月)の市場統計データーがあります。50個ある項目名はB列にありDセル2008年1月からBKセル2012年12月まで横に60ヶ月分のデーターを入力しています。 ■シート(2)には50の項目名のデータがあります。項目名はB列にあります。 ■シート(3)にはコンボボックスを作成し、コンボボックスの下に表を作成しました。 シート(3)のコンボボックスの50ある項目から▼ボタンで項目を選びコマンドボタンを押すと シート(3)の下記のセル範囲でシート(1)のデーターを参照させたいのです。 B8セルからM8セルまで(2008年度12か月分のデータ) B11セルからM11セルまで(2009年度12か月分のデータ) B14セルからM14セルまで(2010年度12か月分のデータ) B17セルからM17セルまで(2011年度12か月分のデータ) B20セルからM20セルまで(2012年度12か月分のデータ) コンボボックスは設定できたのですが、構文がうまくできないため参照できていません。 エクセルVBAに詳しい方、どうぞご教授ください。よろしくお願い致します。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

前回のご質問で答えたのですが追加のご質問を見ておりませんで失礼をいたしました。 コンボボックスの設定はうまくできているとのことですがコンボボックスには「フォームコントロール」からのものと「ActiveXコントロール」からのものと2種類があります。おそらく前者で作られたコンボボックスではないでしょうか? ここでは後者の「ActiveXコントロール」からコンボボックスを作ります。 シート3でその操作を行ってシート3にコンボボックスを作ります。 コンボボックスを右クリックして「コードの表示」を選択します。 表示の画面に次のマクロを入力します。 Sub リスト設定() Application.ScreenUpdating = False Worksheets("Sheet3").ComboBox1.Clear With ComboBox1 For i = 2 To 50 .AddItem Worksheets("Sheet2").Range("B" & i) Next End With Application.ScreenUpdating = True End Sub また同時に次のマクロを入力します。 Private Sub ComboBox1_Change() Dim n, i As Integer Set WS1 = Worksheets("Sheet1") Set WS3 = Worksheets("Sheet3") With WS1.Range("B:B") For n = 1 To 50 If WS1.Cells(n, 2).Value = ComboBox1.Value Then Exit For Next For i = 1 To 12 WS3.Cells(8, 1 + i) = WS1.Cells(n, 3 + i).Value WS3.Cells(11, 1 + i) = WS1.Cells(n, 15 + i).Value WS3.Cells(14, 1 + i) = WS1.Cells(n, 27 + i).Value WS3.Cells(17, 1 + i) = WS1.Cells(n, 39 + i).Value WS3.Cells(20, 1 + i) = WS1.Cells(n, 51 + i).Value Next End With End Sub このマクロではコンボボックスで指定した50項目のうちの一つの項目についてシート1の3+i列、つまりはi=1の時はD列、から51+i列、つまりi=1の時はBK列までをシート3に12が月ごとに分けて表示することになります。 マクロの入力が終わったら「開発」タブの「デザインモード」をクリックしてアクティブ状態を解除します。 次の「マクロ」から「Sheet3リスト設定」を選択して実行ボタンをクリックします。この操作によってシート3のコンボボックスにはリストが表示されるようになります。 リストからある項目を選択することで自動的にシート3にデータが表示されます。 データー元であるシート(1)のB3からBK52の範囲データーはどこに書かれておりますでしょうかなどのご質問の内容からすればマクロの初心者にしてはまだまだ努力が足りないような気がしますね。 この種の内容はマクロを使うことなく関数のみを使って十分対応できますので上記のようなマクロではなくそちらで対応されてはいかがでしょう。

kujira_444
質問者

お礼

こんばんは。 問題なく作動しました。ありがとうございます。 VBAは融通のきくツールだと直感的に感じています。 VBAを習得するために、コードを書いて覚え実行し、 一日でも早く『便利』と感じるよう向上心を持って習得したいと思います。 ありがとうございました。

その他の回答 (1)

  • shino719
  • ベストアンサー率50% (11/22)
回答No.1

こんばんわ。 当方エクセル2000ですが、文章での説明は難しいので 実際にサンプルを作成してみました。 参照URLに作成したサンプルのURLを載せてみますので、 ダウンロードできればサンプルエクセルが見えると思います。 しかしこのサンプルには下記制限があります。 ・マクロは使用せずに数式だけで作っています。 ・2008年1月~2012年12月固定で、2013年1月など増えた場合は未対応。 ・コンボボックスは入力規則で作っています。 ・Sheet2の項目名だけあるシートの存在が良く分からなかったので未使用。 こんなものでいいのかどうか分かりませんが、ご参考までに。。

参考URL:
http://www.geocities.jp/shinopo/test4.zip
kujira_444
質問者

お礼

こんばんは。 上記リンクアドレスにアクセスしましたが、『ページが利用できなくなっているというメッセージ』が あり参照することができませんでした。 そのような状態ではありますが、実際にサンプルまで作って下さってありがとうございました。

関連するQ&A

  • VBAで別シートに複数のデーターを参照

    こんばんは。マクロ初心者です。 VBAの構文を教えてください。 ■シート(1)には項目が50ある5年分(60ヶ月)の市場統計データーがあります。50個ある項目名はB列にありDセル2008年1月からBKセル2012年12月まで横に60ヶ月分のデーターを入力しています。 ■シート(2)には50の項目名のデータがあります。項目名はB列にあります。 ■シート(3)にはコンボボックスを作成し、コンボボックスの下に表を作成しました。 シート(3)のコンボボックスから▼ボタンで項目を選びコマンドボタンを押すと シート(3)の下記のセル範囲でシート(1)のデーターを参照させたいのです。 B8セルからM8セルまで(2008年度12か月分のデータ) B11セルからM11セルまで(2009年度12か月分のデータ) B14セルからM14セルまで(2010年度12か月分のデータ) B17セルからM17セルまで(2011年度12か月分のデータ) B20セルからM20セルまで(2012年度12か月分のデータ) コンボボックスは設定できたのですが、構文がうまくできないため参照できていません。 エクセルに詳しい方、どうぞご教授ください。よろしくお願い致します。

  • ExcelのVBAにてキーになるものを入力してデータを振分けたい

    2つのシートがあり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  1   2   3  (行)   1     A   B   C  2     ○   △   ×  3     ア   イ    ウ (1)sheet1にコンボボックスにてAを入力する。A、B、Cは、それぞれ決められたセルにコピーされる。 (2)sheet1にコンボボックスにて○を入力する。○、△、×は、それぞれ決められたセルにコピーされる。 (1)と(2)のコピーされる場所は、同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、あまりよくわかりません。 宜しくお願い致します。

  • Excel VBA コンボボックスの使い方

     VBAでのコンボボックスの使い方をしらべているのですが、うまく見つかりません。コンボボックスのリストに登録するのはどうしたらよいのでしょうか?シート上のセル内のデータを使用しないとリストの登録は出来ないのでしょうか?VBA上で作成して、ユーザーフォームで選択できるようにしたいと思っています。VBAをはじめたばかりなので初歩的な質問で大変恐縮です。どなたかわかる方がいらっしゃったらお願い致します。

  • エクセルシートでVBAについての質問です。

    VBA初心者です。 エクセルのシート上にコンボボックスを配置してリストを選択すると同じシート上のセルに選択されたリストが表示されるようにしたいのですが、よくわかりません。 コンボボックスのオブジェクト名は名前ボックスに表示される名前でいいのでしょうか? 詳しい方ご教授お願いします。

  • ExcelのVBAにてキーになるものを入力すると、その関連データを振り分ける

    2つのシートがあり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  1   2   3  (行)   1     A   B   C  2     ○   △   ×  3     ア   イ    ウ (1)sheet1にコンボボックスにてAを入力する。AはセルA1(固定)に、BはセルC3(固定)に、Cは、セルE5にそれぞれ決められたセルにコピーされる。 (2)sheet1にコンボボックスにて○を入力する。○はセルA1(固定)に、△は、セルC3(固定)に、×は、セル(E5)にそれぞれ決められたセルにコピーされる。 (1)と(2)のコピーされる場所は、同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、あまりよくわかりません。 宜しくお願い致します。

  • Excel VBA コンボボックスについて

    はじめまして、エクセルVBAの超初心者です。 コンボボックスを使ってマクロを組みたいのですが、どうしてで良いか分からず教えていただければと思います。 エクセルのシートに下のようなデータがあるとします A       B りんご     あおもり りんご     ながの みかん     わかやま バナナ     フィリピン コンボボックス1にAセルを重複しないようにセットして コンボボックス2に1で選択されたものをセットしたいのですが。 プロパティのListFillRangeでAの範囲を選択しても、重複してしまい、それからどうして良いのかわかりません。 どなたか教えて頂けませんか?

  • VBAの構文をお願いします Excelです

    宜しくお願いいたします。 Rigth関数をVBAで行うときの構文教えてください。 Sheet1のA1セルに123456があります、Sheet2のA1セルに右から2つすなわち56をコピーするにはどのように構文すればよいのですか。Lefe、Midもこれが分かればできると思います。

  • エクセルVBA コンボボックスからの選択

    コンボボックスにある選択項目を選択した後、 エクセルの指定されたセルへ選択した項目を 貼り付けたいのですが、どのように指示したら よいのでしょうか? 例えば コンボボックス内の選択項目が A・B・Cとあったとします、その項目の 中からAを選択したら、作業中のsheetの A1のセルへAと表示させるにはどうしたら よいのでしょうか? アドバイスお願い致します。

  • Excel VBA コンボボックスで空白を削除

    Excel2010でマクロを作っています。 ユーザーフォームに多数配置済のコンボボックスに、特定のシートの特定のセル範囲(B2:B71)のデータを配列に取り込みたいのですが、セル範囲には空白セルも多数あります。コンボボックス表示時には空白を削除したいのですが、どのようにしたら良いでしょうか? なお、コンボボックスの名前には規則性があり、CbxStp1、CbxStp2、CbxStp3、・・・CbxStp31と連番にしてあるので、For i = 1 to 31 ~ Next で、コンボボックス名を「"CbxStp" & i」と指定して作れると助かるのですがいかがでしょうか。

  • VBAの構文

    VBAの構文を教えてください! 作業内容: 開くファイルの名前は都度違う。(ファイル名の始まりは同じ) 例えばDATA100310.xlsだったりDATA100315.xlsだったり。 マクロを走らせたいシート名は常に同じ。シート名の例)Critical 違うブック(常に同じ。例)フォルダ名:Item)にあるデータをもとに DATA100310.xlsのCriticalシートにVLOOKUPをかけ、フィルタでソート。 マクロを保存するのは、もとデータになる例)フォルダ名:Item のほう。 こんなこと可能ですか? 調べたんですけど、いまいちヒットせず…… すみません、よろしくお願いいたします。

専門家に質問してみよう