Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1830 / 13645 ツリー ←次へ | 前へ→

【71593】コンボボックスを使って値を取得します VBA初心者 12/3/21(水) 18:51 質問[未読]
【71597】Re:コンボボックスを使って値を取得します ichinose 12/3/22(木) 6:49 発言[未読]
【71603】Re:コンボボックスを使って値を取得します VBA初心者 12/3/22(木) 21:00 質問[未読]
【71614】Re:コンボボックスを使って値を取得します ichinose 12/3/23(金) 6:39 発言[未読]
【71666】Re:コンボボックスを使って値を取得します VBA初心者 12/3/25(日) 14:41 お礼[未読]

【71593】コンボボックスを使って値を取得します
質問  VBA初心者 E-MAIL  - 12/3/21(水) 18:51 -

引用なし
パスワード
   お世話になります、VBA初心者です
次のような処理がしたいのですが、うまく動きません
1.コンボボックスで値を選択し取得する
2.特定のシートをコピーし、取得した値+日付をシートネームとする
下記のコードでは、25RF 80mAのみが書かれていますが、他にも品種が
あります
環境は、Excel2007です
念のため、自分が書いたコードを貼り付けておきます
VBA初心者なので、分かり易く教えて頂ければ幸いです

Private Sub UserForm_Initialize()
  Dim sheetname As String
  Dim myData(0, 1) As Variant
    myData(0, 0) = "25RF 80mA"
    myData(0, 1) = ""
    
  With ComboBox1
    .Column() = myData
  End With
  
  Select Case sheetname
    Case "25RF 80mA"
      Worksheets("日計表").Copy after:=Worksheets("日計表")
      sheetname = InputBox("作成日を入力して下さい")
      On Error Resume Next
      Worksheets("25RF 80mA" & sheetname & "日").Select
      If Err.Number = 9 Then
        MsgBox "シートがありません"
      End If
    Case Else
      Exit Sub

【71597】Re:コンボボックスを使って値を取得します
発言  ichinose  - 12/3/22(木) 6:49 -

引用なし
パスワード
   ▼VBA初心者 さん:
おはようございます。
>次のような処理がしたいのですが、うまく動きません
いくら初心者でもユーザーフォームの基本的な動作は
学ばなければ動くものも動きませんよ!!

>2.特定のシートをコピーし、取得した値+日付をシートネームとする
↑一言で言うと、やりたいことはこれですね!!

これを実現する材料として、ユーザーフォームにコンボボックスを
貼り付けてある、ということですね!!

>Private Sub UserForm_Initialize()
このプロシジャーは、ユーザーフォームの初期設定を行う
プロシジャーです。

コンボボックスの選択メンバを登録するのは、良いですが、
まだ、ユーザーが何もしていないのに
シートをコピーするコードが記述されていますが、これいかに?
(もっとも sheetnameには何も入っていないので何もしませんが)

まず、仕様を明確しましょう。コードなんかその後です。

まず、ユーザーフォーム(UserForm1)に配置するコントロールは、コンボボックスだけですか?

>取得した値+日付をシートネームとする
取得した値というのは、コンボボックスで選択したデータのことですね!!
日付を InputBox("作成日を入力して下さい") で取得しているようですが、
このユーザーフォーム上にテキストボックスを配置して、日付入力をしてもらう方が
簡単ですよね?
よって、ユーザーフォーム上にテキストボックスを配置してください
(TextBox1)。


品種の選択を行い、テキストボックスに日付を入力し、
ユーザーフォーム上にあるコマンドボタンをクリックしたら、
入力されたデータを基に

>特定のシートをコピーし、取得した値+日付をシートネームとする

これを行えば良いですね

ということで ユーザーフォーム上にコマンドボタンも配置してください
(CommandButton1)


1 品種リストの作成
  品種と言うデータをコンボボックスで選択させるのですが、
  この品種データをコードの中に直接

  myData(0, 0) = "25RF 80mA"

  このように設定していますが、これだと
  品種が増えたり、減ったり、内容に変更があったりする度に
  プログラムコードを修正しなければなりませんよね?
  データの増減などでは、プログラムを触らなくても良いような
  つくりにしなければなりません。

  品種リストを適当なワークシートを作成し、
  そこに作成するようにします。
  例
  シート名 品種リスト

     A
  1 品種
  2 25RF 80mA
  3 23RR 25mA
   ・
   ・
 
  一行目は、データではなく、項目名にてください。
  Excelでは、そのようにしておく方が何かと便利ですから・・・・。

  このように品種のデータをシートに配置しておけば・・・、

Private Sub UserForm_Initialize()
  Dim rng As Range
  With Worksheets("品種リスト")
    Set rng = .Range("a2", .Cells(.Rows.Count, "a").End(xlUp))
  End With
  If rng.Row > 1 Then
    With ComboBox1
     .Clear
     .Style = fmStyleDropDownList
     .List = rng.Value
    End With
  End If
End Sub

こんなコードでコンボボックスに選択メンバを登録できます。

まずは、コンボボックスに選択できる品種を登録するところまで
正常に作動するようにしてみください。

【71603】Re:コンボボックスを使って値を取得します
質問  VBA初心者 E-MAIL  - 12/3/22(木) 21:00 -

引用なし
パスワード
   ▼ichinose さん:
ご回答ありがとうございます。
おっしゃる通りに、別シートに品種の一覧を作りユーザーフォームの実行をして
みましたところ、うまくコンボボックスに品種が出て来ました。

>>2.特定のシートをコピーし、取得した値+日付をシートネームとする
>↑一言で言うと、やりたいことはこれですね!!

その通りです!

>まず、ユーザーフォーム(UserForm1)に配置するコントロールは、コンボボックスだけですか?

そのように考えていました。
コンボボックスから品種を選択し、日計表というシートをコピーしてから、シート名を品種名+日付にリネームしたかったのです。
品種が104種類にも及ぶため、とりあえず1品種をselect文で登録して、選択させるようにしたのですが…

>よって、ユーザーフォーム上にテキストボックスを配置してください
>(TextBox1)。

コンボボックスの下に配置しました。

>
>品種の選択を行い、テキストボックスに日付を入力し、
>ユーザーフォーム上にあるコマンドボタンをクリックしたら、
>入力されたデータを基に
>
>>特定のシートをコピーし、取得した値+日付をシートネームとする
>
>これを行えば良いですね

はい、その通りです。

>ということで ユーザーフォーム上にコマンドボタンも配置してください
>(CommandButton1)

テキストボックスの下に配置しました。

>  品種リストを適当なワークシートを作成し、
>  そこに作成するようにします。

品種リストというワークシートを作ってみました

>こんなコードでコンボボックスに選択メンバを登録できます。

うまく、リストが出るようになりました。

>まずは、コンボボックスに選択できる品種を登録するところまで
>正常に作動するようにしてみください。

無事完了しましたので、是非とも続きをご教授下さい。
宜しくお願い申し上げます。

【71614】Re:コンボボックスを使って値を取得します
発言  ichinose  - 12/3/23(金) 6:39 -

引用なし
パスワード
   ▼VBA初心者 さん:
>無事完了しましたので、是非とも続きをご教授下さい。
続きは、御自身が考えてください。

コンボボックスには、品種がメンバ登録されていて、
テキストボックスには、日付が入力可能になり、
コマンドボタンも表示されて
ユーザーフォームがめでたく表示されたのですね!!

だったら、コンボボックスで品種を選択し、
テキストボックスに日付が入力されれば、

>シート(日計表)をコピーし、取得した値+日付をシートネームとする

名前を設定するのは、コマンドボタンをクリックしたら、行うのですよね。


Userform1のモジュールに

Private Sub CommandButton1_Click()

End Sub

上記のイベントプロシジャー内に

>シート(日計表)をコピーし、取得した値+日付をシートネームとする

を実現するコードを記述します。

シート名は、

  Dim newshtnm As String
  newshtnm = ComboBox1.Text & Format(TextBox1.Text, "ggge""年""m""月""d""日""")

 上記のnewshtnmでよいですか?

特定シートコピーは、最初の投稿で提示された

 >Worksheets("日計表").Copy after:=Worksheets("日計表")
 これですね!!
シート名の変更は、マクロの記録でシート名の変更をコード化して
見当を付けてください

【71666】Re:コンボボックスを使って値を取得します
お礼  VBA初心者 E-MAIL  - 12/3/25(日) 14:41 -

引用なし
パスワード
   ▼ichinose さん:
お礼が遅くなり、失礼しました。
ご指導ありがとうございました。
自分自身で試してみて、また分からない時は、ご指導願います。

1830 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free