
Excel2003を使用しています。
SheetAから、あるシート(都度選択)にデータを転記するマクロを作成しています。
当初は、下記のように InputBox で、転記先のシート名を入力して、そこからシート名を取得していましたが、確実にシート名を取得するために、ユーザーフォームのコンボボックスから選択するように、変更したいと思います。
MySht = InputBox("転記するシート名を入力してください")
With Sheets("SheetA")
.Range("H6:J9").Copy
Sheets(MySht).Range("M7") ~
これを、コンボボックスで選択した値を上記のコードでいう、MySht に設定(?)したいのですが、どのようにしたらいいでしょうか?
コンボボックスで選択した値をセルに転記する方法はわかるので、とりあえず、今は一旦セルに転記していますが、コード内で直接(…というと変かもしれませんが)設定できるのであれば、教えていただきたいのです。
自分だけが使用するものならば、InputBox で十分なのですが、選択するシートのシート名に数字が含まれているので、全角や半角の入力ミスを避けるために、コンボボックスで選択するようにしたらどうかと思ったのですが、何か他にも良い方法があれば、あわせて教えていただけると嬉しいです。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
なぜコンボボックスなのでしょう? リストボックスにシート名を表示させれば「誤入力」は起きないはずなのですが?
でもコンボボックスを用いるなら「誤入力の可能性」がありますから、エラーチェックが必要になりますよ。
とりあえず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
お礼が遅くなり、申し訳ありません。
>コンボボックスを用いるなら「誤入力の可能性」がありますから
確かにそうですね。
以前、別件で作成したマクロで、コンボボックス使用し、リストからの選択と手入力と両方できて便利だったという記憶があって、今回もコンボボックスで…と思ってしまいました。
誤入力がおきないよう、リストボックスで検討しようと思います。
今回、教えていただいたマクロも大変参考になりました。
ありがとうございました。
No.3
- 回答日時:
写す方法はいくつかあります。
方法1.コンボボックスチェンジイベントで値を設定する。
※コンボボックスの値が変わると動作するマクロ
Sub combobox_change()
Mysht = combobox.Value
以下継続
方法2.コンボボックスのプロパティのLinkedCellで、特定のセルに値をリンクさせておく
Sub macro()
MySht = WorkSheets("シート名").RANGE("セル座標").Value
以下継続
お礼が遅くなり、申し訳ありません。
具体的な方法を示していただき、助かりました。
いろんな方法があるのですね。勉強になります。
ありがとうございました。
No.2
- 回答日時:
コンボボックスを
(1)ユーザーフォームに貼り付ける場合
(2)ワークシートへ貼り付ける場合
どちらをしたのか、質問には明記のこと。
ーー
Sheet1に(2)として
Private Sub ComboBox1_Click()
MsgBox Worksheets("Sheet1").ComboBox1.List(Worksheets("Sheet1").ComboBox1.ListIndex)
End Sub
をSheet1のイベントのコンボボックスのクリックイベントに入れれば
実験になるでしょう
実際はx=Worksheets("Sheet1").ComboBox1.List(Worksheets("Sheet1").ComboBox1.ListIndex)
として
最終は
Private Sub ComboBox1_Click()
'MsgBox Worksheets("Sheet1").ComboBox1.List(Worksheets("Sheet1").ComboBox1.ListIndex)
x = Worksheets("Sheet1").ComboBox1.List(Worksheets("Sheet1").ComboBox1.ListIndex)
Sheets(x).Select
End Sub
となると思うが。
簡単に
Private Sub ComboBox1_Click()
x = Worksheets("Sheet1").ComboBox1.Value
MsgBox x
Sheets(x).Select
End Sub
でもOKのようだ。
ーー
それにしても、WEBや本ならコントロール(の中のコンボボックス)の説明のところに、選択したアイテムのとり方は必ず載っているよ。
WEB照会でも、Googleなどで「VBA コンボボックス」で照会すれば、沢山実例が出て、すぐ判る。
お礼が遅くなり、申し訳ありません。
丁寧に説明していただき、助かりました。
WEBや参考書でも調べましたが、いまひとつ求めるものと違うようでしたので、質問させていただいた次第です。
No.1
- 回答日時:
>コンボボックスで選択した値をセルに転記する方法はわかるので、
こんな感じかな?
Worksheets(1).Range("A1").Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex)
お分かりと思いますが、シート選択は↓の
ような感じです。
Worksheets("シート名").Select
もうお分かりですね。
Worksheets(Me.ComboBox1.List(Me.ComboBox1.ListIndex)).Select
とすれば、コンボボックスで選択した行の名前のシートを選択できます。
変数を使えばもっと簡潔になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 3 2022/06/10 09:24
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Excel(エクセル) コンボボックス及びリストボックスを5段階連動させる方法をご存知の方ご教授頂きたいです。 Excelで 3 2022/04/03 21:43
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA コンボボックスで選んだ値を取得するには
その他(Microsoft Office)
-
VBAコンボボックスで選択した値をシートに転記したい
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
5
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
6
VBAコンボボックスの内容が反映されない
その他(プログラミング・Web制作)
-
7
エクセルVBAでコンボボックスの非表示について
iOS
-
8
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
9
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
10
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
11
コンボボックスの文字によるif文の作成
Visual Basic(VBA)
-
12
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
13
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
14
VBA コンボボックスで選んだものを各テキストボックスに反映
Visual Basic(VBA)
-
15
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
16
Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。
Visual Basic(VBA)
-
17
複数のテキストボックスに同じ処理をしたい
Visual Basic(VBA)
-
18
ExcelVBA コンボボックスに入力があったらリンクしてテキストボックスを更新したい
Access(アクセス)
-
19
ExcelVBA EnableプロパティがFalseの時に文字の色を変えたくない
Visual Basic(VBA)
-
20
EXCEL VBA コンボボックス、テキストボックスが未入力のときメッセージを表示する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
ハイパーリンクでジャンプした...
-
エクセルでブック内の倍率がバ...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルのシー名を二段表示に...
-
Accessのテーブルを既存のExcel...
-
特定のシートのみ再計算させな...
-
EXCELの図形(テキストボックス)...
-
エクセルのシート連番の振り直し
-
エクセルで複数のシートに画像...
-
エクセル、特定のシートにパス...
-
エクセルの複数シートでのリン...
-
Excelでマクロ設定したが反映さ...
-
EXCELで存在しないシート...
-
DATE関数 4月31日などのあ...
-
エクセル、別のシートの表をポ...
-
エクセルで、シートの名前を変...
-
エクセル シート毎 連続で曜日...
-
Wordで差し込み印刷時に表示す...
-
EXCELの「シートの見出し」のフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
【ExcelVBA】マクロの入ったシ...
-
ハイパーリンクでジャンプした...
-
特定のシートのみ再計算させな...
-
EXCELの図形(テキストボックス)...
-
エクセルで複数のシートに画像...
-
エクセルのファイルサイズが急...
-
エクセル、特定のシートにパス...
-
Accessのテーブルを既存のExcel...
-
エクセルのシー名を二段表示に...
-
エクセルの2つのシートを並び...
-
EXCELで存在しないシート...
-
エクセルの複数シートでのリン...
-
エクセルで、シートの名前を変...
-
EXCELの「シートの見出し」のフ...
-
Wordで差し込み印刷時に表示す...
-
ワークシートそのものの色を変...
-
エクセルを開くとメニューバー...
-
エクセル、別のシートの表をポ...
おすすめ情報