ExcelのVBAでUserformを使ってカレンダー(予定表)に文字数を入力する方法

このQ&Aのポイント
  • ExcelのVBAを使用して、Userformを作成し、カレンダー(予定表)に文字数を入力する方法を教えてください。
  • Userformには、Comboboxを使用して指定の月を選択し、選択した月の列に文字数を入力します。
  • 現在の問題は、作成したコードが正しく動作しないことです。どこが間違っているのか、教えていただけますか?
回答を見る
  • ベストアンサー

ExcelのVBAなんですが・・・教えて下さい。

Userformを使って自分で作成しましたカレンダー(予定表)に文字数を入力しようとしています。 Userformには、Comboboxを使って指定の月を選択し、 予定表の月の列に文字数を入力したいと考えています。 自分なりに考えて作成してみたんですが・・・どうしても上手くいきません。 お手数をおかけしますが、教えて頂けますか? 下記のコードを作成しましたが、どこをどの様にしたら、きちんとした動作ができますでしょうか? Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1月" .AddItem "2月" .AddItem "3月" .AddItem "4月" .AddItem "5月" .AddItem "6月" .AddItem "7月" .AddItem "8月" .AddItem "9月" .AddItem "10月" .AddItem "11月" .AddItem "12月" End With End Sub Private Sub CommandButton1_Click() Dim s As Long Dim rng Select Case ComboBox1.Value Case "1月": rng = "az46" Case "2月": rng = "be46" Case "3月": rng = "bj46" Case "4月": rng = "ak11" Case "5月": rng = "ap11" Case "6月": rng = "au11" Case "7月": rng = "az11" Case "8月": rng = "be11" Case "9月": rng = "bj11" Case "10月": rng = "ak46" Case "11月": rng = "ap11" Case "12月": rng = "au11" Case Else: Exit Sub End Select s = Range(rng, Rows.Count).End(xlDown).Row Range(rng & s + 1).Value = TextBox1.Value End Sub 初心者の為、すいませんが宜しくお願いします。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>Set myRng = Range(rng).End(xlUp).Offset(1) >この部分の .Offset(1)が、そう言う意味になるんですか? Range(rng).End(xlUp) は、最終行から上に向かってデータが入力されている位置を求めます キー操作では [End] + [↑] に当たります。 上記で求められた位置の一つ下の位置、すなわち.Offset(1) が新たに入力する位置となります。 おまけ >Private Sub UserForm_Initialize() >With ComboBox1 >.AddItem "1月" .>AddItem "2月"     ↓ Private Sub UserForm_Initialize()   Dim i As Long   For i = 1 To 12     Me.ComboBox1.AddItem i & "月"   Next End Sub このようにコンパクトに書くことができます。

awmori
質問者

お礼

助かりました。本当に感謝です。 .Offset(1)が、入力開始位置になるんですか。 理解がようやくできました。 また、質問などする事がありますが、また宜しくお願いします。

awmori
質問者

補足

ありがとうございました。以下この様にしました。 Private Sub UserForm_Initialize() Dim i As Long For i = 1 To 12 Me.ComboBox1.AddItem i & "月" Next End Sub Private Sub CommandButton1_Click() Dim myRng As Range Dim rng As String Select Case ComboBox1.Value Case "1月": rng = "az76" Case "2月": rng = "be76" Case "3月": rng = "bj76" Case "4月": rng = "ak41" Case "5月": rng = "ap41" Case "6月": rng = "au41" Case "7月": rng = "az41" Case "8月": rng = "be41" Case "9月": rng = "bj41" Case "10月": rng = "ak76" Case "11月": rng = "ap76" Case "12月": rng = "au76" Case Else: Exit Sub End Select Set myRng = Range(rng).End(xlUp).Offset(1) myRng.Value = TextBox1.Value End Sub

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>入力はできるようになったんですが・・・例えばComboboxで4月を選択し >Textboxに英数字を入力しCommandbuttonで出力すると、 >最終行に入力しないようなんです。 どのセルに入力されましたか? 他の月を選択した場合は、どうですか?(10月~3月) >Case "4月": rng = "ak46" ↓ Case "4月": rng = "ak45" 又は ak44 などで試してください。 それでも希望どうりの動きでない場合はシートレイアウトを詳しく教えてください。

awmori
質問者

補足

ありがとうございます。 解決しました。実は、4月の最終行が"ak41"でした。 すべて最終行に合わせて使うんですね。 先ほどまでは、入力開始位置に合わせて行っていました。 従って、入力開始位置の上の行がタイトルとなっていますので タイトル行に入力されたり開始位置に入力されたリの繰り返しでしたが、 すべて最終行に合わせたらきちんと希望する動作が得られました。 私、勘違いをしていました。 ここでちょっとした疑問なんですが・・・なぜ最終行に合わせないと、 希望した動作ができなかったんでしょうか? Set myRng = Range(rng).End(xlUp).Offset(1) この部分の .Offset(1)が、そう言う意味になるんですか?

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

xlDown だと1月を例に挙げるとセルAZ47が空白だとエラーになりますので xlUpを使って最終行を求めましょう Private Sub CommandButton1_Click()   Dim myRng As Range   Dim rng As String   Select Case ComboBox1.Value     Case "1月": rng = "az85"     Case "2月": rng = "be85"     Case "3月": rng = "bj85"     Case "4月": rng = "ak46"     Case "5月": rng = "ap46"     Case "6月": rng = "au46"     Case "7月": rng = "az46"     Case "8月": rng = "be46"     Case "9月": rng = "bj46"     Case "10月": rng = "ak85"     Case "11月": rng = "ap85"     Case "12月": rng = "au85"     Case Else: Exit Sub   End Select   Set myRng = Range(rng).End(xlUp).Offset(1)   myRng.Value = TextBox1.Value End Sub

awmori
質問者

補足

回答ありがとうございます。早速試してみました。 入力はできるようになったんですが・・・例えばComboboxで4月を選択し Textboxに英数字を入力しCommandbuttonで出力すると、 最終行に入力しないようなんです。 希望の動作は、4月を選択した時に入力の随時、最終行に入力ができると良いのですが・・・ 4月だとセル"ak11"から下の行に入力していく様にしたいです。もちろん他の月も同様にしたいと考えています。

関連するQ&A

  • Excel のVBAに付いて教えて下さい。

    前回、質問しました内容が関連してくるんですが 参考に下記のURLを ご覧になって下さい。 http://okwave.jp/qa/q7472816.html 前回の内容ですと、指定した列を月で指定してComboboxで選択していました。 その指定した列に特定の文字数を入力すると言う動作を作成しました。 特定の文字数を入力すると言う内容ですが、現時点では指定した列に上から下に 順序に入力して行くように作成してます。 そのコードが”Set myRng = Range(rng).End(xlUp).Offset(1)”です。 今回は、Comboboxで指定した列の2つ隣の列に日付が入力されています。 2つ隣と言うのは、左に向かって2つ隣です。 例えばC列を指定したとすればA列を表します。 実際に行いたいことは、指定した列の日付の入った行を検索し、指定した日付の所に 文字数を入力したいと考えています。 Userformを使って入力しているんですが、Combobox1が月の列を選択していますので、 新たにCombobox2を作りCombobox2で指定した日付(行)を選択し入力できる様に作成 したいのですが・・・今、使っているコードを基にCommandbox2を追加して作成できますでしょうか? 現在のコードは下記です。 Private Sub UserForm_Initialize() Dim i As Long For i = 1 To 12 Me.ComboBox1.AddItem i & "月" Next End Sub Private Sub CommandButton1_Click() Dim myRng As Range Dim rng As String Select Case ComboBox1.Value Case "1月": rng = "az76" Case "2月": rng = "be76" Case "3月": rng = "bj76" Case "4月": rng = "ak41" Case "5月": rng = "ap41" Case "6月": rng = "au41" Case "7月": rng = "az41" Case "8月": rng = "be41" Case "9月": rng = "bj41" Case "10月": rng = "ak76" Case "11月": rng = "ap76" Case "12月": rng = "au76" Case Else: Exit Sub End Select Set myRng = Range(rng).End(xlUp).Offset(1) myRng.Value = TextBox1.Value End Sub

  • エクセルのマクロ コンボボックス他について

    下記のプログラムでユーザーフォームを作成しました。 まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。 しかし、エラーは出ていないので文法的には合っているようにおもいます。 それだけに、どこが違うのか尚更わかりません。 なお、Unload UserForm1 を Unload UserForm にした場合、 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を UserForm にした場合、 「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。 どこが悪いのかわかりません。 どなたか、教えてください。 なお、エクセルは2003、OSはXPです。 Private Sub ComboBox1_Change() End Sub Private Sub ComboBox2_Change() End Sub Private Sub ComboBox3_Change() End Sub Private Sub CommandButton1_Click() Unload UserForm1 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value Unload UserForm1 Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value Unload UserForm1 Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value End Sub Private Sub UserForm_initialize() With ComboBox1 .AddItem "U" .AddItem "K" .AddItem "E" End With With ComboBox2 .AddItem "A" .AddItem "B" .AddItem "C" End With With ComboBox3 .AddItem "D" .AddItem "E" .AddItem "F" End With End Sub

  • エクセルVBA コンボボックスの値の転記

    エクセルVBAの質問です。 ユーザーフォームを表示し 年を選択するコンボボックス1 月を選択するコンボボックス2 を入力してもらい ユーザーフォームを閉じるときに sheet1のワークシートのC2セルに 「コンボボックス1の値」+「年」+と「コンボボックス2の値」+「月」をつなげて 入力できるというようなマクロを考えています。 下記の様に考えてみたのですが、 うまく入力できませんでした。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "2021" .AddItem "2022" .AddItem "2023" .AddItem "2024" End With With ComboBox2 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" End With Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 'ユーザーフォームの値をセルC2に入力 With Worksheets("sheet1") .Cells(2, 3).Value = "ComboBox1.Text" & "月" & "ComboBox2.Text" & "日" End With End Sub どのように修正すればいいでしょうか? よろしくお願いします。

  • EXCEL VBA 多種のコンボボックス操作

    こんばんは。 現在ユーザーフォーム上に10個のコンボボックスを配置しています。 1-8は共通リストを、9と10は別々のリストを表示させたいのですが・・ Private Sub UserForm_Initialize() Dim X, No, Y As Integer With UserForm2 For No = 1 To 8 For X = 0 To 7 .Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next For Y = 0 To 7 .ComboBox9.AddItem Worksheets("Letter").Cells(Y + 1, 11).Value .ComboBox10.AddItem Worksheets("Letter").Cells(Y + 1,12).Value Next End With End Sub 上記のコードですが、エラーが出てどうにも行き詰っています。 Private Sub UserForm_Initialize() Dim X, No As Integer For No = 1 To 8 For X = 0 To 7 UserForm2.Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next End Sub ↑だと1-8まで問題なく動くのですが・・・ すみませんが、アドバイスお願いいたします。

  • 同じコンボボックスを二つ以上作る方法

    今同じ内容を表示するコンボボックスを二つ作ろうと思っているのですがつくり方がわかりません。 どのようにすれば一つのプログラムで二つのコンボボックスを作れるのでしょうか 例: 表示では はい いいえ プログラム: Private Sub UserForm_Initialize() ComboBox1.AddItem "はい" ComboBox1.AddItem "いいえ" End Sub Private Sub UserForm_Initialize() ComboBox2.AddItem "はい" ComboBox2.AddItem "いいえ" End Sub ↑のような作り方ではなく簡略化して Private Sub UserForm_Initialize() ComboBox●.AddItem "はい" ComboBox●.AddItem "いいえ" End Sub ●部を変更できれば一つのプログラムでコンボボックスを2つ操作できると思うのですがどのようにすればよろしいでしょうか?

  • エクセルVBAのコンボボックス

    エクセル2002使用です。 生年月日とかを入力できるコンボボックスを作っているのですが、同じコンボボックスを5つ作ろうとしています。例えば和暦を入力するには Private Sub userform_initialize() With ComboBox(1) .AddItem "昭和" .AddItem "平成" End sub でうまくいくのですが、2個目から5つ目まで同じものを作成する場合、 With ComboBox(2) ・・・ With ComboBox(3) ・・・ と、コードを記述していかないと駄目なのでしょうか? できれば With ComboBox(1: 5) とか、 変数を使って Private Sub userform_initialize() Dim i As Integer For i = 1 To 5 With ComboBox(i) .AddItem "昭和" .AddItem "平成" End With Next End sub といった具合にまとめたいのですが、コンパイルエラーとなってしまいます。 初歩的な質問で申し訳ないのですが、よろしくお願いします。

  • エクセルマクロによる条件の条件の件

    エクセルで以下のマクロを作成しました。 Private Sub UserForm_Initialize() ComboBox1.AddItem "SS400,SGP" ComboBox1.AddItem "SUS304" ComboBox1.AddItem "PVC,VP" If ComboBox1.Value = "SS400,SGP" Then ComboBox2.AddItem "丸棒" ComboBox2.AddItem "等辺山形鋼" End If End Sub ComboBox1で SS400,SGP を選択してもComboBox2では何も出ません。どうすれば出るようになるのか教えて下さい。

  • コンボボックスのクリア方法について教えて下さい(vb6.5)

    コンボボックスのクリア方法について教えて下さい(vb6.5) ComboBox1で選択したものによって、 ComboBox2で表示するものを変えたいと思っています。 ただ、一度ComboBox1で選択した後にComboBox2を開くと、 ComboBox2は前回のものがどんどん足されていきます。 コンボボックスのクリア方法について、 どの様にすればよいかご教示のほど、 宜しくお願い致します。 Private Sub ComboBox1_Change() UserForm1.ComboBox2.RemoveItem (0) If ComboBox1.Text = 1 Then UserForm1.ComboBox2.AddItem "A" UserForm1.ComboBox2.AddItem "B" UserForm1.ComboBox2.AddItem "C" ElseIf ComboBox1.Text = 2 Then UserForm1.ComboBox2.AddItem "D" UserForm1.ComboBox2.AddItem "E" UserForm1.ComboBox2.AddItem "F" Else UserForm1.ComboBox2.AddItem "G" UserForm1.ComboBox2.AddItem "H" UserForm1.ComboBox2.AddItem "I" End If End Sub -------------------------------------- Private Sub UserForm_Initialize() UserForm1.ComboBox1.AddItem "1" UserForm1.ComboBox1.AddItem "2" UserForm1.ComboBox1.AddItem "3" End Sub

  • エクセル 複数のComboBoxの連携

    エクセルでフォームを使い、社内各部署での案件の一覧の検索データベースを作成中です。 その際、ComboBoxを3つ使い、1「支店名」2「課名」3「チーム名」を選択するようにしたいのですが、支店により課名やチーム名が異なるため、1で選択した支店名と合致する課やチーム名が選べるようにしたく、以下のようなマクロを組みました。が、実行すると、支店名は表示されるものの、何故か選択できません。また、2つ目(課)の結果から3つ目(チーム名)も得る方法もいまいちよくわかりません。ご教示お願いいたします。 Option Explicit Private Sub ComboBox5_Change() Dim si As Integer With UserForm1 .ComboBox5.Text = "" si = .ComboBox5.ListIndex Select Case si Case 0 .ComboBox6.AddItem "A課" .ComboBox6.AddItem "B課" .ComboBox6.AddItem "C課" 以下必要分続く ’ComboBox6の結果から7を得るには? End Select End With End Sub Private Sub UserForm_Initialize() ' ComboBox がアクティブの時の処理 With UserForm1 .ComboBox5.AddItem "A支店" .ComboBox5.AddItem "B支店" .ComboBox5.AddItem "C支店" .ComboBox6.AddItem "A課" .ComboBox6.AddItem "B課" .ComboBox6.AddItem "C課" .ComboBox7.AddItem "Aチーム" .ComboBox7.AddItem "Bチーム" .ComboBox7.AddItem "Cチーム" End With End Sub

  • エクセルVBA ユーザーフォームのリストボックス

    エクセルVBAのユーザーフォームのリストボックスについて教えてください。 現在、以下のようにコードがされています。 Private Sub UserForm_Initialize() With UserForm.ListBox1 .AddItem "ABC" .AddItem "DEF" .AddItem "GHI" .ListIndex = 0 End With End Sub Private Sub ListBox1_Click() With ListBox2 .Clear Select Case UserForm.ListBox1.List(ListBox1.ListIndex) Case "ABC" .AddItem "123" .AddItem "456" .AddItem "789" Case "DEF" .AddItem "456" .AddItem "789" Case "GHI" .AddItem "789" End Select .ListIndex = 0 End With End Sub それで、ユーザーフォームを起動した時点で、ListBox1には"ABC"、ListBox2には"789"を選択し、青く色がついている状態にすることは可能でしょうか。 よろしくお願いします。