シート上に配置したコンボボックスの選択されている値を
マクロの中で参照するにはどうすればよいのでしょうか?

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

A 回答 (5件)

>このままのコードを実行するとDropDowns()が定義されてないとエラーになってしまいます。


どんなエラーかよくわかりませんが、少し追記すると、

まず、『ドロップ 1』はコンボボックスの名前です。新規に作成すると名前ボックス(シートの左上)に表示されます。
コンボボックスに別名を付けている場合はそれに変更します。

次に、

 Sub Test1()
   With DropDowns("ドロップ 1")
     MsgBox .ListIndex
   End With
 End Sub

は、Sheet1にコンボボックスがあって、Sheet1のコードウインドウに書く例です。


Sheet1にコンボボックスがあって、標準モジュールに書く場合は、

 Sub TestMoj1()
   With Worksheets("Sheet1").DropDowns("ドロップ 1")
     MsgBox .ListIndex
     MsgBox .List(.ListIndex)
  End With
 End Sub

のようにします。多分メッセージボックスが出ると思いますが・・・(Excel97で確認)
    • good
    • 1
この回答へのお礼

標準モジュールに書いていたのにシートの指定を記述していなかったのが原因でした。
おかげで助かりました、ありがとうございました。

お礼日時:2001/09/25 18:25

表示 → ツールバー → フォーム のコンボボックスなら


Sub Test1()
  With DropDowns("ドロップ 1")
    MsgBox .ListIndex '何番目か(1から)
    MsgBox .List(.ListIndex) 'リスト
  End With
End Sub

表示 → ツールバー → コントロールツールボックス のコンボボックスなら
Sub Test2()
  With ComboBox1
    MsgBox .ListIndex '何番目か(0から)
    MsgBox .List(.ListIndex) 'リスト
  End With
End Sub

のような感じでしょうか。(Excel97です)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
知りたかったのは前者です。後者は知りませんでした。
しかし、このままのコードを実行するとDropDowns()が定義されてないとエラーになってしまいます。
お手数をおかけしますが、再度アドバイスを頂ければと思います。

お礼日時:2001/09/25 13:44

こんにちは。



例えば、Sheet1のComboBox1の値を参照したければ、

Sheet1.ComboBox1.Value

でOKです。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
私の質問の仕方が悪かったようです。
下の方の所へ補足しましたのでもしご存知であれば
再度回答をお願いします。

お礼日時:2001/09/25 13:39

私は…



コンボボックスに着けた名前.Value

…で、参照しています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私の質問の仕方が悪かったようです。
下の方の所へ補足しましたのでもしご存知であれば
再度回答をお願いします。

お礼日時:2001/09/25 13:38

ComboBox1.Valueでできますよ。



Sub b()
ComboBox1.ListIndex = 1’選択した行番号
MsgBox ComboBox1.Value

End Sub
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
知らなかったのですが、上の方の回答にあるようにコンボにも2種類あるのですね。
今回知りたかったのはフォームツールバーから作成したコンボボックスで、Object名を自分で設定できなかったので値の参照方法が分りませんでした。

お礼日時:2001/09/25 13:34

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Qエクセル、フォームでのVBAについて(コンボボックス)

エクセル97でフォームのコンボボックスを使用する場合の質問です。
ワークシートにコンボボックスを10個配置しました。
入力範囲はすべて同じです。
このコンボボックスで特定の項目(入力範囲6番目)を選んだ場合、次のマクロを実行するようにしようと思っています。マクロを10個書いてそれぞれのコンボボックスに登録してもいいのですが、それよりはどのコンボボックスが使用されたか特定できればすべてのコンボボックスに一つのマクロで対応できます。
コンボボックスに番号(たとえばコンボ1~コンボ10)を振ってその番号の取得ができればいいのですが、どのように記述したらよいのか検討がつきません。
お教えください。

Aベストアンサー

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、ヘルプで調べてみてください。引数、ByVal、ByRefなど。

で、更なる質問部分についてですが
DrawingObjects("Combo1")といった表現をする場合はまとめられないんです。。。
が!
もう一度、考え直してみました。

Sub Combo1()
Call NextMacro(1)
End Sub

Sub NextMacro(ByVal SelCombo As Integer)
Dim ans As String
If Sheets("LOG").Range("C1") = False Then
Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex _
= Sheets("LOG").Range("H" & (30 + SelCombo)).Value
Exit Sub
End If
If Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex = 6 Then
ans = InputBox("地域を入れてください。", "地域設定")
Worksheets("LOG").Range("J" & SelCombo) = ans
End Sub

で、いいのでは。
ちゃんと全部キレイにまとまるやん♪
と、言いたいところなんですが、テストしてません。
動かなかったらごめんなさい。(^-^;;;

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、...続きを読む

QEXCEL マクロ リストボックスよりシート名を選択してシートを選択

こんばんは.
エクセルを使って備品の管理システムを構築したいと考えております.
マクロを使います.
VBAは初心者です.

・備品を20種類ほどに分類し,シートも同様に20作りました.
・ウィンドウを2つに分割し,上下に並べています.
・上ウィンドウの最初のシート(シート名:備品一覧)のB2セルにリストボックスを設け,そのリストで20種の備品の中から一つを選択できるようにしています.
・リストボックスの側にマクロ対応のボタンを設置しております

やりたいこととしては・・・
『上ウィンドウのリストボックスで備品を選択し,ボタンをクリックすることによって,下ウィンドウでその選択した備品名のシートに移動する』
です.

私が組んでみたマクロは下記です.
----------------
Sub 備品を選択  

  Dim sheetname As String

'リストボックスからシート名を取得する
sheetname = Range("B2").Value

'下ウィンドウをアクティブにしてシートを選択する
Windows(2).Activate
Worksheets("sheetname").Select

End Sub
------------------

エラーは,『Worksheets("sheetname").Select』のところで
【実行値エラー'9' インデックスが有効範囲にありません.】

参考書やグーグルで調べてもわかりませんでした.
ご教授いただければ幸いです.
よろしくお願い致します.

こんばんは.
エクセルを使って備品の管理システムを構築したいと考えております.
マクロを使います.
VBAは初心者です.

・備品を20種類ほどに分類し,シートも同様に20作りました.
・ウィンドウを2つに分割し,上下に並べています.
・上ウィンドウの最初のシート(シート名:備品一覧)のB2セルにリストボックスを設け,そのリストで20種の備品の中から一つを選択できるようにしています.
・リストボックスの側にマクロ対応のボタンを設置しております

やりたいこととしては・・・
『上ウィン...続きを読む

Aベストアンサー

この辺の問題ではないでしょうか?

  ×Worksheets("sheetname").Select
  ○Worksheets(sheetname).Select

Qコンボボックスの設定  【エクセル】

エクセルのコンボボックスについてです。
コンボボックスのリストとして


黄色
というリストをコンボボックスの‘入力範囲’に指定します。

コンボボックスの
‘コントロールの書式設定’→‘リンクするセル’
でセルを指定すると、赤を選んだとき リンクさせたセルには
「1」とでますが、なぜ1と出るのか、というのと
私は「赤」と表示させたいのですが、そのやり方を教えて頂きたいです。

コンボボックスを初めて使うので初心者的な質問だと思いますが宜しくお願いします。

Aベストアンサー

この質問もあいまいな点あるのだが。
(1)データー入力規則ーリストー元の値のドロップダウンリスト
ガあるのだが知っていて使わないのか?
これだと質問のようなことはない。選択したドロップダウンの出るセルに文字が出る。
(2)シートやユーザーフォームにコンボボックスを貼り付けているのか
A。質問者はどうもフォームのコンボボックスを使っているらしい
(「入力範囲」という言葉から)
下記Bをお勧めします。
しかし現状のままだと別のセルに一旦数字を出して(J2とでも仮定して)赤白黄うお出したいセルに
=INDEX(H1:H3,J2)
と入れると良い。
H1:H3に赤、青、黄といれて置く(入力範囲)。
ーー
B.コントロールツールボックスのコンボぼっくすを使うと
FillListRangeに例えばH1:H3  H1:H3に赤、青、黄といれ
LinkedCellを例えばD2にすれば、選択後出るには赤とでる。
ーー
>「初心者的な」といいながら、一番難しい方法でやっているようだ。

Qコンボボックスの値が変更されたらそのコンボボックスに表示されたURLを開きたい

データ型がハイパーリンクの文字列が入力されたテーブルをコンボボックスに表示させています。(添付画像参考)
希望は、
プルダウンでURLを選択したと同時にリンク先へ飛びたいです。
現在は、
プルダウンでURLを選択→コンボボックスをクリック
でリンク先に飛んでいます。
多分コンボボックスのChangeイベントだと思うのですが
どうすればいいのでしょうか?

アドバイスよろしくお願いします。

Aベストアンサー

No.2です。

> ""を開いています。

このメッセージから、推測される原因を確認した結果、
おおよそ状況がつかめました。

前回回答前のこちらでのテストでは、ハイパーリンク型
フィールドへのファイルのドラッグ&ドロップでアドレス
を記録したのですが、この場合、入力データにカーソルを
合わせた後、F2キーで編集モードにすると
「http//www.goo.ne.jp/#http//www.goo.ne.jp/#」
と、アドレスが二重に表示されます。
(実際には1個目のアドレスは文字列としての表示、
 2個目のアドレスが実際のリンク先)

一方、Webブラウザなどからアドレスをコピー&ペースト
した場合は
「#http//www/goo.ne.jp#」
と、実際のリンク先のアドレスのみが記録されますが、
このデータを「Call FollowHyperlink(コンボ0)」の
形で参照すると、エラーとなってしまうようです。
大変失礼致しました。


対処法としては、「データの先頭文字が『#』かどうかで
切り分け」も考えましたが、今回の件では「Follow」を
使用した方がよさそうです(汗)

Private Sub コンボ0_AfterUpdate()

  If Nz(コンボ0, ") = "" Then Exit Sub

  'コンボ0に記録されたハイパーリンクを実行
  '(FollowHyperlinkと違い、アドレスを引数とする必要
  ' はなし。こちらの詳細もヘルプを参照下さい(汗))
  コンボ0.Hyperlink.Follow

End Sub

No.2です。

> ""を開いています。

このメッセージから、推測される原因を確認した結果、
おおよそ状況がつかめました。

前回回答前のこちらでのテストでは、ハイパーリンク型
フィールドへのファイルのドラッグ&ドロップでアドレス
を記録したのですが、この場合、入力データにカーソルを
合わせた後、F2キーで編集モードにすると
「http//www.goo.ne.jp/#http//www.goo.ne.jp/#」
と、アドレスが二重に表示されます。
(実際には1個目のアドレスは文字列としての表示、
 2個目のアドレスが実際...続きを読む

Qエクセル、コンボボックス/フォームのとコントロールツールボックスの

エクセル2000です。
今まではワークシートにフォームのコンボボックスを貼って使ってきました。
でも色を変えたり出来ないので、今度はコントロールツールボックスからコンボボックスを貼ってみました。

質問ですが、コンボボックスに表示させるリストを設定するのに、これまでのフォームのコンボボックスだと書式設定で入力範囲をカーソルをあてて一度に簡単に指定できたのですが、コントロールツールボックスのコンボボックスだとそれが出来ません。VBEditorのプロパティのところのListFillRangeの右側にいちいち手でSheet1!A1:A5のように打ち込まなければならないようです。これではけっこう手間がかかってしまいます。
わたしのやりかたが間違っているのでしょうか?

Aベストアンサー

#2です。
>この意味が良くわかりませんでした。
エクセル(VBA)ではリストに出す範囲を指定するだけですが、
VBのコンボボックスの項目(アイテム)の登録はListFillRangeがないので、AddItemを項目数だけ、記述
する必要があると言うことを言いたかったのです。
エクセル(VBA)では手数が省けていると思います。

QExcel VBA シートのコピー時に、シート上のコンボボックスもコピーしたい。

こんにちは。
Excel VBAについて質問させていただきます。
やりたいことは、
シートAにボタンとコンボボックスを配置し、
コンボボックスには氏名の一覧を設定しています。
そこで、ボタンを押すとシートAをボタンとコンボボックスごと
シートBという名前でコピーをしたいと思っています。

ActiveSheet.Copy Before:=Worksheets(1)
でシート・ボタン・コンボボックスのコピーはうまく出来たのですが、
コンボボックスに設定していた氏名の一覧はコピーされていませんでした。

コピー先のシートのコンボボックスにもう一度氏名の一覧を
設定するしかないのでしょうか?
それともシートのコピー時に何かいい方法があるのでしょうか。

宜しければアドバイスをお願い致します。
OSはWindows2000Pro
Excelは2000です

Aベストアンサー

こんばんは。再度の登場です。

先の回答は、ListFillRangeプロパティを使用したものですのでコピーしても値は保持されますが、
質問者のように、AddItemメソッドでセットしたものはコピーしても保持されませんので改めてセットする必要があります。

現在”コンボボックスの中身もコピー”されてるようですが、
その中身のコピーを実行するタイミングを誤ると上手くいかない場合があります。
シートのコピーと同時に”中身のコピー”をするとそれは一見上手くいってるようでも
ブックを閉じて再度開いたときにはクリアーされますので、
コピーしてできたシートがActiveになるたびにそのシートのComboboxにも値をセットしなければいけません。
WorkBookOpenイベントでセットしているのは「元のComboboxにのみ」Listをセットしているわけですから。

●要約●
以下、コピーされてできた新しいシートは、見積書2、とする
(方法1)
「見積書2」がアクティブになる度に「見積書」のComoboxのListをコピーする
(方法2)
WorkbookのOpenイベントの”Function SetComboBox()”を標準モジュールへ移し、
「見積書」「見積書2」それぞれのActivateイベントで、”Function SetComboBox()”を呼び出す
その場合、”Function SetComboBox()”のComboboxのコンテナである固有のシート名は使わずに、ActiveSheetに変更しておく
(方法3)
WorkBookのOpenイベントでは、リスト一覧を配列変数に作成しておき
「見積書」「見積書2」がActiveになったときそのシート上のComboBoxのListに配列変数をセットする
 
●もし興味があれば、配列変数をListプロパティに直接セットするコードをアップしてもいいのですが。。。
 
それから、敬称Comboのリストは決まっているようですから、
別なシートのどこかのセルに一覧を作っておき、
ListFillRangeプロパティにセットしておけばいいですね。

以上です。

 

こんばんは。再度の登場です。

先の回答は、ListFillRangeプロパティを使用したものですのでコピーしても値は保持されますが、
質問者のように、AddItemメソッドでセットしたものはコピーしても保持されませんので改めてセットする必要があります。

現在”コンボボックスの中身もコピー”されてるようですが、
その中身のコピーを実行するタイミングを誤ると上手くいかない場合があります。
シートのコピーと同時に”中身のコピー”をするとそれは一見上手くいってるようでも
ブックを閉じて再度開いたとき...続きを読む

Qエクセルに貼りついたコンボボックスについて

パソコン初心者です。よろしくお願いします。

インターネットの画面をコピーしてエクセルに貼り付けました。
余分な部分まで貼り付けてしまい削除したのですが、コンボボックスがどうしても削除できません。(リンクははずしました。)
ドラッグすることもできず、行を削除してもコンボボックスは残っております。どうしたらコンボボックスを削除できるでしょうか?
ご回答よろしくお願いいたします。

Aベストアンサー

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
3)これでツールバーが追加されて「デザインモード」というアイコンが表示され
  ていれば、下記の作業を行ってみて下さい。

次に、コンボボックスの削除を行います。
※添付画像もご覧下さい。

4)ツールバーの「デザインモード」のアイコンをクリックして、くぼんだ状態に
  して下さい。(※デザインモードをONの状態にします。)
5)シート上の消したい「コンボボックス」にマウスを当ててクリックして下さい。
  ※これで「コンボボックス」が選択状態になり、周囲にサイズ変更用の
   マークが表示されると思います。
6)上記5)でコンボボックスが選択状態になったら、[Del]キー(デリートキー)
  を押して下さい。
  ※これで「コンボボックス」が削除されれば完了です。
7)続けて、他のコンボボックスなどのコントロールを削除したい場合は、
 上記5)、6)の作業を繰り返して下さい。

8)なお、シート上のコントロールを全て削除したい場合は、下記の操作を
 行って下さい。
 ◎あらかじめ「デザインモード」をONの状態にします。
   ↓
 ◎メニュー: 「編集」→「ジャンプ」
   ↓
 ◎表示された「ジャンプ」ダイアログの「セル選択」ボタンをクリックします。
   ↓
 ◎表示」された「選択オプション」ダイアログの中の「オブジェクト」という
  項目(オプションボタン)を選択します。
   ↓
 ◎「OK」ボタンをクリックします。
   ↓
 ◎これでシート上の全てのコントロールが選択された状態になります。
   ↓
 ◎ここで[Del]キー(デリートキー)を押せば、全てのコントロールが削除
  されます。

9)作業が終了したら、「デザインモード」アイコンを再度クリックして、
  デザインモードをOFFにします。

以上で作業完了です。

もしも上手くいかなかった場合はすみません。
参考になれば幸いです。

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
...続きを読む

Q全シートを選択し、それぞれ特定のセルの値をシート名とするマクロを教えて

全シートを選択し、それぞれ特定のセルの値をシート名とするマクロを教えてください。

Worksheets.Select
ActiveSheet.Name = Range("A1").Value

ではダメなんですね…
記録マクロ以上のことはほとんど何もわからない、マクロ初心者です。

条件としては、
 ・シート数はその都度変わる
 ・シート名にしたいセル番地は決まっている
です。

具体的には、「請求書」などの決まったフォーマットで作成された複数のシートがあり、
決まったセルに入力された「宛名」をそれぞれのシート名にしたい
というような場合です。

また、同じ「宛名」で複数のシート名があったときに備えて、
新しいシート名の前に数字を振りたいです。

例)
Sheet 1 → 1田中様
Sheet 2 → 2佐藤様
Sheet 3 → 3山田様
Sheet 4 → 4鈴木様
Sheet 5 → 5山田様
のように。

数字は識別できればいいので(エラーがでなければいいので)、なんでも構いません。
シートに順に番号を振るのでも、元のシート名の一番右を取るのでもいいです。
(そんなマクロがあるのかもわからないのですが)
宛名が複数あるものだけ選んで番号を振るのでもいいのですが、大変そうな気がするので・・・

マクロ自体よくわかっていないので、情報が不足しているかもしれませんが、
詳しい方、教えてください。
よろしくお願いいたします。

全シートを選択し、それぞれ特定のセルの値をシート名とするマクロを教えてください。

Worksheets.Select
ActiveSheet.Name = Range("A1").Value

ではダメなんですね…
記録マクロ以上のことはほとんど何もわからない、マクロ初心者です。

条件としては、
 ・シート数はその都度変わる
 ・シート名にしたいセル番地は決まっている
です。

具体的には、「請求書」などの決まったフォーマットで作成された複数のシートがあり、
決まったセルに入力された「宛名」をそれぞれのシート名にしたい
というような場合...続きを読む

Aベストアンサー

こんばんは!
ごく単純にやってみました。
Sheetは1からあるとし、Sheet名はA1セルの名前にするようにしています。
↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。

Sub test()
Dim i As Long
For i = 1 To Worksheets.Count
Worksheets(i).Name = i & Worksheets(i).Cells(1, 1).Value
Next i
End Sub


「決まったセル」が別セルであれば、コード内の
Cells(1, 1) の部分を変更してみてください。

以上、この程度ですが
参考になれば幸いです。m(__)m

QエクセルVBA コンボボックスで強制終了

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボボックス22リスト設定:データ数80

現象
 (1)コンボボックス22を▼でなく入力し、保存すると強制終了
 (2)上記現象発生後、コンボボックス1の▼押下で強制終了
 (3)複数のPCで試したが、性能の良いPCでもたまに起こる。
  性能が悪いPCの場合、確実に起きる。
 (4)他のフォームはいくらやってもこの現象は発生しない。
  但し、コンボボックス2~21のような大量なコンボボックスはない

考えること
 (1)コンボボックスのリストの限界等はあるのでしょうか。
 (2)メモリ等の関係で発生するのでしょうか。
 (3)コンボボックスに入力不可とするか、テキストでNoを入力
  させる方法をとった方がよいでしょうか。

長々とすみません。
よろしくお願いいたします。

   

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボ...続きを読む

Aベストアンサー

こんにちは。

>VBAを組んだのは2007で今、それを動かしているのは2002です。
>こんなことをしているのが悪いのでしょうか・・・。

一般論なのですが、VBAの場合は、下位互換は期待しないほうがよい、ということです。下のバージョンでは、テキストコード(.bas)で、エクスポート・インポートをしたほうが良いかもしれません。特に、2007と2003では、ファイルフォーマットが違いますからね。

>自分で設定しない限りは、Add-inの機能はエクセルに入ってないという認識でよいでしょうか?

今、私は、「自分で設定しない限り」だったか、ちょっとはっきり答えられません。これは、当面、そのままにしておきます。

Q【Excel VBA】コンボボックスで選択した値の取得

Excel2003を使用しています。

SheetAから、あるシート(都度選択)にデータを転記するマクロを作成しています。
当初は、下記のように InputBox で、転記先のシート名を入力して、そこからシート名を取得していましたが、確実にシート名を取得するために、ユーザーフォームのコンボボックスから選択するように、変更したいと思います。

 MySht = InputBox("転記するシート名を入力してください")
  With Sheets("SheetA")
   .Range("H6:J9").Copy
    Sheets(MySht).Range("M7") ~

これを、コンボボックスで選択した値を上記のコードでいう、MySht に設定(?)したいのですが、どのようにしたらいいでしょうか?
コンボボックスで選択した値をセルに転記する方法はわかるので、とりあえず、今は一旦セルに転記していますが、コード内で直接(…というと変かもしれませんが)設定できるのであれば、教えていただきたいのです。
自分だけが使用するものならば、InputBox で十分なのですが、選択するシートのシート名に数字が含まれているので、全角や半角の入力ミスを避けるために、コンボボックスで選択するようにしたらどうかと思ったのですが、何か他にも良い方法があれば、あわせて教えていただけると嬉しいです。

よろしくお願いします。

Excel2003を使用しています。

SheetAから、あるシート(都度選択)にデータを転記するマクロを作成しています。
当初は、下記のように InputBox で、転記先のシート名を入力して、そこからシート名を取得していましたが、確実にシート名を取得するために、ユーザーフォームのコンボボックスから選択するように、変更したいと思います。

 MySht = InputBox("転記するシート名を入力してください")
  With Sheets("SheetA")
   .Range("H6:J9").Copy
    Sheets(MySht).Range("M7") ~

これを...続きを読む

Aベストアンサー

なぜコンボボックスなのでしょう? リストボックスにシート名を表示させれば「誤入力」は起きないはずなのですが? 
でもコンボボックスを用いるなら「誤入力の可能性」がありますから、エラーチェックが必要になりますよ。

とりあえずUserformにComboboxを1つ配置して、ユーザーフォームのモジュールシートに以下のマクロを貼り付けて試してみてください。

Const excpt As String = "SheetA" 'コピー元のシート名
Private Sub UserForm_Initialize()
Dim sht As Worksheet
For Each sht In ThisWorkbook.Worksheets
  If sht.Name <> excpt Then
    Me.ComboBox1.AddItem sht.Name
  End If
Next sht
End Sub

Private Sub ComboBox1_Change()
  If Len(ComboBox1.Text) = 0 Then
    MsgBox "シートを選択するか入力してください"
    ComboBox1.SetFocus
  Else
    On Error GoTo err1
    Worksheets(excpt).Range("H6:J9").Copy _
      Destination:=Worksheets(ComboBox1.Text).Range("M1")
    Unload Me
    Exit Sub
  End If
err1:
  MsgBox "該当するシートがないので再入力してください"
  ComboBox1.SetFocus
End Sub

なぜコンボボックスなのでしょう? リストボックスにシート名を表示させれば「誤入力」は起きないはずなのですが? 
でもコンボボックスを用いるなら「誤入力の可能性」がありますから、エラーチェックが必要になりますよ。

とりあえずUserformにComboboxを1つ配置して、ユーザーフォームのモジュールシートに以下のマクロを貼り付けて試してみてください。

Const excpt As String = "SheetA" 'コピー元のシート名
Private Sub UserForm_Initialize()
Dim sht As Worksheet
For Each sht In ThisWor...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報