個人事業主の方必見!確定申告のお悩み解決

今データ入力用のフォームmainがあります。
そこで複数のデータを入力していくのですが、そこでわからなくなりました。
入力用コンボボックスがひとつだけのときは
Private Sub userform_Initialize()
Dim 配列(2)
配列(0) = "データ1"
配列(1) = "データ2"
配列(2) = "データ3"
入力用コンボ.List = 配列
End Sub

Private Sub 入力用コンボ_Change()
MsgBox 入力用コンボ.ListIndex
End Sub
としていたのですが、複数になった場合の理屈を含めわかりません。
一つの入力用フォームにコンボボックスが複数あった場合はどうすればよいのですか?

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

A 回答 (6件)

こんばんは。



LINERSさん、前回の続きを書いているのですね。

#1 の回答に対する補足 の場合だったら、このようになりますね。

Private Sub UserForm_Initialize()
Dim myData1 As String, myData2 As String
myData1 = "データ1,データ2,データ3"
myData2 = "データA,データB,データC"

 入力用コンボ1.List = Split(myData1, ",")
 入力用コンボ2.List = Split(myData2, ",")
End Sub


もちろん、AddItem でもよいです。
hanahana3さんが、既にお書きになっていますが、

こんな風に省略しますね。

Private Sub UserForm_Initialize()
With 入力用コンボ1
  .AddItem "データ1"
  .AddItem "データ2"
  .AddItem "データ3"
End With
With 入力用コンボ2
  .AddItem "データA"
  .AddItem "データB"
  .AddItem "データC"
End With
End Sub

お好きなほうを。
    • good
    • 0
この回答へのお礼

お礼が遅くなりすみませんでした。
本当にいつも丁寧なご解答有難うございます。おかげ様で出来ました。

お礼日時:2005/07/14 15:28

いろいろ回答が出ていますが、エクセルではコンボボックスのアイテムを定義するのは、「プロパティ」に「RowSource」があり、C1:C4のように定義します。


これをコンボボックスごとに定義すれば、配列などは考える必要ないですよ。
エクセルのシート上のセルの仕組みそのものが配列に似せた性格を持っています。
コンボのアイテムデータをセットするやり方は、エクセルのバージョンごと、アクセスかエクセルかVBかでややこしい点ですが。
    • good
    • 0
この回答へのお礼

お礼が遅くなりすみませんでした。
なるほどです、おかげ様で出来ました。有難うございました。

お礼日時:2005/07/14 15:30

>[AddItem]を使う場合はどうすれば



Private Sub UserForm_Initialize()
入力用コンボ1.AddItem "データ1"
入力用コンボ1.AddItem "データ2"
入力用コンボ1.AddItem "データ3"
End Sub

ヘルプやネット、関連書籍などを参考に使い方を勉強してください。

参考URL:http://www.moug.net/skillup/nksw/nksw10-01.htm
    • good
    • 0
この回答へのお礼

お礼が遅くなりすみませんでした。
おかげ様で出来ました。有難うございました。

お礼日時:2005/07/14 15:27

こんにちは。

Wendy02 です。

コードを読んでいて基本的な疑問なのですが、どうして、「配列」という変数を使いまわしするのですか?

そのまま見ている限りでは、配列から、ComboBox のList に渡す意味があまり感じません。他のモジュールで作った配列を、Userform 内の ComboBox に入れるなら分かるのですが、UserForm_Initialize からでは、単に、ComboBox に AddItem で入れるのと変わらないはずです。

この回答への補足

よろしければ
[AddItem]を使う場合はどうすれば良いのか教えていただけますでしょうか?

補足日時:2005/07/07 15:47
    • good
    • 0
この回答へのお礼

お世話様です。
>どうして、「配列」という変数を使いまわしするのですか?

すみません、こういうアプローチの仕方しか解らなかったのです。
有難うございました。

お礼日時:2005/07/07 15:47

同じ名前の関数を複数宣言したらだめですよね?



Private Sub UserForm_Initialize()
Dim 配列(2)
配列(0) = "データ1"
配列(1) = "データ2"
配列(2) = "データ3"
入力用コンボ1.List = 配列

配列(0) = "データA"
配列(1) = "データB"
配列(2) = "データC"
入力用コンボ2.List = 配列
End Sub

Private Sub 入力用コンボ1_Change()
MsgBox 入力用コンボ1.ListIndex
End Sub

Private Sub 入力用コンボ2_Change()
MsgBox 入力用コンボ2.ListIndex
End Sub

としたらいいのでは?
    • good
    • 0
この回答へのお礼

ご解答感謝します。
解りました!そういうことなんですね。
有難うございました。

お礼日時:2005/07/07 15:43

入力用コンボ1


入力用コンボ2
入力用コンボ3

他のコントーロール同様に、それぞれに名前を付ければ良いだけです。

この回答への補足

下記のようにしてみましたが、実行しようとすると[Private Sub UserForm_Initialize()]←名前が不適当です。とエラーになります。

Private Sub UserForm_Initialize()
Dim 配列(2)
配列(0) = "データ1"
配列(1) = "データ2"
配列(2) = "データ3"
入力用コンボ1.List = 配列
End Sub

Private Sub 入力用コンボ1_Change()
MsgBox 入力用コンボ1.ListIndex
End Sub

Private Sub UserForm_Initialize()
Dim 配列(2)
配列(0) = "データA"
配列(1) = "データB"
配列(2) = "データC"
入力用コンボ2.List = 配列
End Sub

Private Sub 入力用コンボ2_Change()
MsgBox 入力用コンボ2.ListIndex
End Sub

補足日時:2005/07/07 13:12
    • good
    • 0
この回答へのお礼

ご解答有難うございます。
補足のようにしました、Private Sub名がダメみたいで、すみませんもう一度教えて下さい。

お礼日時:2005/07/07 13:20

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

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

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

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

QExcel VBA コンボボックスの初期値の設定について

いつもお世話になっています。
Excel VBA コンボボックスの初期値の設定について教えてください。
ユーザーフォームを表示させた時、そこにあるコンボボックスには何も表示されていません。
コンボボックスのボタンを押すとちゃんと
「アジア」「ヨーロッパ」「アメリカ」等の語群が表示されます。

ユーザーフォームを表示させた時点でコンボボックスに「アジア」を表示させるにはどうすればいいか教えてください。
よろしくお願いします。

Aベストアンサー

UserForm Initialize
ComboBox1.Text = ComboBox1.List(0)

QVBA コンボボックスで選んだ値を取得するには

ユーザーフォーム上のコンボボックスから値を選択し、その値を変数として使いたいのですが、うまくいきません。

コンボボックスのコードで
Private Sub ComboBox1_Change()
moji1 = ComboBox1.Text
Range("A1").Value = moji1
のようにすれば、コンボボックスから値を選んだ時点でA1セルにその値をコピーできるのですが、同じユーザーフォーム上にあるコマンドボタンをクリックして実行する「マクロ1」にてこのmoji1という変数を使いたいのです。

マクロ1にて、上記と同じ
Range("A1").Value = moji1
というコードを記述しても、ユーザーフォームで選択した値が消えており、empty値となってしまいます。

原因をご存知の方はお教えください。

Aベストアンサー

原因については下記を参考にしてください。
http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/eg5.shtml

QExcelのコンボボックスに2次元配列を入れたい

お世話になります。

やりたいことはとても一般的なことです。
以下のような名前と、IDが対になったデータがあります
名前  ID
----------
りんご 1
ばなな 2
いちご 3

コンボボックスには名前だけを表示し、りんごを選択したら「1」を取得したいのです。

普通に
ComboBox.AddItem "りんご"
ComboBox.AddItem "ばなな"
ComboBox.AddItem "いちご"

とやるとIDとの関連がなくなってしまい、りんごを選択しても「1」と判断することができません。

お知恵をお貸しください。

Aベストアンサー

#5です。
その「お礼」部分のご質問に関し
http://www.seraphyware.jp/dev/tips/vb.tips.array.html
をご覧になれば参考になりませんか。

参考URL:http://www.seraphyware.jp/dev/tips/vb.tips.array.html

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QエクセルVBA ユーザーフォーム 複数のコンボボックス 同一リスト

ユーザーフォームにコンボボックスが複数あります。
その内の3つについては、同一のリストを設定します。
リストの個数は30個ぐらいで、できればセルを使用
したくありません。
下記を3回記述するよりも短くしたいのですが、どのよ
うな方法がありますでしょうか?
現状では、ComboBox1、4、6ですが、連番にする必要が
あれば、変更可能です。
With ComboBox1
.Clear
.AddItem "いくら"
.AddItem "たこ"
.AddItem "まぐろ"
・・・
End With
お手数ですがよろしくお願いします。

Aベストアンサー

下記で如何でしょう。

Dim myArr As Variant
Dim i As Variant
myArr = Array("1", "4", "6")
For Each i In myArr
   With Me.Controls("ComboBox" & i)
      .Clear
      .AddItem "いくら"
      .AddItem "たこ"
      .AddItem "まぐろ"
   End With
Next

Qコンボボックスの名前を変数にしたい。

シートに任意の数でコンボボックスがCombobox1~100の間で
作成されます。
たとえば、ある数Nが47になったら、Combobox47のvalueを自動的に拾い、N=20ならばCombobox20のValueを拾いたいたいのですが
合理的な方法ありますでしょうか。

(if 文であらかじめ100個作る以外に)

Aベストアンサー

次のようにOLEObjectsを使ってみてください。

myVal = Sheets("Sheet1").OLEObjects("Combobox" & N).Object.Value

以上です。
 

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QVBAでシートからコンボボックスにデータを設定する方法

VBAにてフォーム起動時にシート内に設定した
値をコンボボックスに取り込みたいのですが・・。
たとえばA列に連続で入力されているデータを
取り込むなど・・。
設定データ数は動的に変化します。

Aベストアンサー

もうほとんど同じですが…

Private Sub UserForm_Initialize()
Dim i As Integer

 ComboBox1.Clear
 For i = 1 To Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row
  ComboBox1.AddItem Worksheets("sheet1").Cells(i, 1).Value
 Next
End Sub

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub


人気Q&Aランキング