こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBA初心者です。

エクセルVBA初心者です。

ユーザーフォームを使ったセルの上書きについて質問があります。(以下は自分が作成済みの内容)

  A  B
 りんご 1
 みかん 2

これらがセルにあります。この中から上書きしたいものを取得します。

ユーザーフォーム1にリストボックスとコマンドボタンを1つずつ設置し、そのリストボックスにA列の文字を入れました。リストボックスの中から上書きしたい文字を選択し、コマンドボタンを押すと、ユーザーフォーム2が表れ、そこには2つのテキストボックスと1つのコマンドボタンがあります。

ここからが分からないのですが、例えば上書きしたい文字に「みかん」を選び、ユーザーフォーム2のテキストボックス1に「バナナ」、テキストボックス2に「3」といれると

  A  B
 りんご 1
 バナナ 3

このようにしたいのです。

実際はもっと複雑な内容のものを作成しております。しかし上記の疑問が解決すれば、今自分が抱えている問題も解決すると思います。

以下はユーザーフォーム1のコードです。これを提示することにより回答される方が楽になるかどうかは分かりませんが、一応提示しておきます。(lstRowを使っている理由はA列とB列の文字・値が増加していく可能性があるため)

Private Sub UserForm_Initialize()

CommandButton1.Enabled = False

   Dim lstRow As Long
   Dim i As Long
   Dim q As Long

ListBox1.Clear
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = "200 pt"

   lstRow = Cells(Rows.Count, 1).End(xlUp).Row

q = 0

     For i = 2 To lstRow

With ListBox1
.AddItem
.List(q, 0) = Cells(i, "C").Value
End With

q = q + 1
Next
End Sub
============================================================================
Private Sub CommandButton1_Click()

UserForm2.TextBox1.Value = Me.ListBox1.Value

Unload UserForm1
UserForm2.Show

End Sub

投稿日時 - 2010-02-22 16:30:53

QNo.5697478

暇なときに回答ください

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

質問の表と提示されているコードが矛盾しているので
説明しにくいので、質問の表で流れの説明をします

userform1が表示されている状態から
userform1のlistbox1のlistから「みかん」を選択
commandbutton1をclick
ここで
>Unload UserForm1
するのではなく
userform1.hide
で非表示にする事により
表示はされていないが、userform1の値が参照できる
userform2の表示
textbox1及びtextbox2を変更する
commandbutton1をclick(説明に無いのでclickで上書き処理とします)
表の先頭がセルA1ですので、セルA1を基準にする
listboxの選択行をlistindexで取得すると先頭行は0、2行目は1・・
の様に 選択行-1 となるのを利用しoffsetで入力セルを求める
range("a1").offset(userform1.listbox1.listindex).value=userform2.textbox1.value
これで、セルA2の「みかん」部分の上書きができる
range("a1").offset(userform1.listbox1.listindex,1).value=userform2.textbox2.value
セルB2の数字の部分の上書きをします

以上、参考まで

投稿日時 - 2010-02-22 21:22:26

お礼

問題は解決しました。説明等、つたない点があったのにも関わらず、丁寧なご説明、ありがとうございましたm(__)m

投稿日時 - 2010-02-23 01:18:20

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問