Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。
Private Sub ListBox2_Click()
With ListBox2
If .ListIndex = -1 Then
MsgBox "項目を選択してくだい"
Else
’シートが保護されていたら保護を解除
If ActiveSheet.ProtectContents = True Then
ActiveSheet.Unprotect
End If
ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0)
ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1)
ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2)
ActiveSheet.Protect
End If
End With
Unload UserForm3
End Sub
このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。
上のコードをどうかえたらよろしいでしょうか。
No.4ベストアンサー
- 回答日時:
実行できなかったというのは、どこができなかったのでしょう?
リストボックスの表示自体ができなかったと言う事なのかな?
…仕方ない
乗りかかった船だべ
これをThisWorkBook(VBEのシートの下にあるモジュールですよ)に書きます
Option Explicit
Private Sub Workbook_Open()
Dim Newb
Set Newb = Application.CommandBars("Cell").Controls.Add()
With Newb
.Caption = "出でよ!リストボックス"
.OnAction = "AddMyListBox"
.BeginGroup = False
End With
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Cell").Controls("出でよ!リストボックス").Delete
End Sub
これを標準モジュールに書きます
Option Explicit
Sub AddMyListBox()
Dim MyList
Set MyList = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", _
Left:=90, Top:=127.5, Width:=72, Height:=72) 'リストボックス宣言
With MyList
.ListFillRange = "A1:A10"'リストの項目
.Locked = True
End With
End Sub
これでセルの右クリックでリストボックスが出せるハズです
プロパティは、表示されたリストボックスを右クリックでプロパティを表示させ、左の列の項目を上のWithに追加します
あとは、No.1さんのや、前回の俺が提示したロジックを改造すれば、貼り付け部分は何とかなるでしょう
今回のような、したい事にたどり着く為に乗り越えなきゃならない事が複数あるときは、それを個別に質問すると、そのものズバリの返答ができるので、結果的にお互い楽です
なので、今回の場合は
まず質問タイトルは、
『右クリックでシート上にリストボックスを表示したい』
で、出し方を聞いて
貼り付け方は別に質問を立てた方が、良かったように思いますよ
最初の内はしたい事が先行してしまうのは、判らなくないですけど^^;
しっかし、初心者にはなまらハードル高いべや、コレ・・・
No.3
- 回答日時:
初心者と言っても、どの辺から説明すれば良いのか判らない為、なるべく質問内容にのみ返答するようにしています
あれこれ言っても混乱するでしょうしね
このマクロはお伺いの部分以外にも問題を抱えています
クリック=選択 ですが
このマクロはその他に、入力開始の合図を兼用しています
動作としては、例えば
1行目選択→1行目の内容を入力
2行目選択→1行目の内容を入力+2行目の内容を入力
この時1行目の入力は無駄です
普通しません
なので、No.1さんはダブルクリックを入力開始の合図にしてます
また、ActiveCellを使用し、複数選択されていたときの動作を指定していない為、常に同じセルに書き込みに行きます
この為、1行のみしか、結果的に入力されているように見えません
補足の件ですが
すいません
ListBox2.ListIndex(i)=True
は、Multiselectでは使えませんね
自分で言っておきながら何を言ってるんだか
考え方としては、リストボックスのリスト項目をループして
ListBox2.Selected(iCnt) = True
のとき、選択されていたときの動作に入るようにします
が正解です
If ListBox2.Selected(iCnt) = True Then
として選択されているかどうかの判定に使用します
以上を踏まえコードを表示します
動作をダブルクリックで入力開始します
複数選択されていたときは、ActiveCellの下に追加して書き出します
最後リストボックスを削除していますので、リストボックスを最初に作成する時に、プロパティの設定をマクロで行っている必要があります
Option Explicit
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim iCnt As Integer
Dim iMax As Integer
Dim jCnt As Integer
jCnt = 0 '初期化
iMax = ListBox2.ListCount - 1 'ListIndexが0からの為
For iCnt = 0 To iMax
If ListBox2.Selected(iCnt + 1) = True Then '該当行が選択されていたら
ActiveCell.Offset(jCnt, 0).Value = ListBox2.List(iCnt, 0)
ActiveCell.Offset(jCnt, 1).Value = ListBox2.List(iCnt, 1)
ActiveCell.Offset(jCnt, 2).Value = ListBox2.List(iCnt, 2)
jCnt = jCnt + 1
End If
Next iCnt
ActiveSheet.Shapes("ListBox2").Delete
End Sub
変数などは違いますが、やっている事はNo.1さんと同じです
最後にFilListRangeは確かにありません
ListFillRangeだと思われます
この回答への補足
ご回答ありがとうございます。
せっかく、ご指導いただきながら、能力不足のためマクロ実行できませんでした。申し訳ありません。たぶんリストボックスを貼り付けしてないからだとおもわれます。、ユーザーフォーム上に リストボックスをつける方法をあるサイトで見つけました。自分のやりたい事にもっとも近いのですが、これもまたうまく作動できません。情けなかです。
Dim r '行位置を格納しておくフォームレベルの変数
Dim c '列位置を格納しておくフォームレベルの変数
Private Sub ListBox1_Click()
' List([行位置],[列位置])
' 列、行位置ともに 0から始まります。例えば、1行目の2列目を
' 表すときは List(0,1) と記述します。
Dim aSelect() As Variant
Dim i 'リストボックスの列を表す変数
With ListBox1
ReDim aSelect(1 To .ColumnCount)
For i = 1 To .ColumnCount
aSelect(i) = .List(.ListIndex, i - 1)
Next i
End With
With ActiveSheet
.Range(.Cells(r, 7), .Cells(r, 7 + ListBox1.ColumnCount - 1)) = aSelect
End With
'行位置カウンタを +1しておく
r = r + 1
End Sub
Private Sub UserForm_Initialize()
' ListBox1の表示データを作成する
For r = 1 To 10
For c = 1 To 3
Cells(r, c) = Cells(r, c).Address
Next
Next
' ListBox1の表示設定
ListBox1.ColumnCount = 3
ListBox1.RowSource = "Sheet1!A1:C11"
'フォーム表示時に基準行位置を設定しておく
r = 10
End Sub
No.2
- 回答日時:
ヘルプに
>リスト ボックス (ListBox) コントロールで、MultiSelect プロパティを使って複数選択を許可している場合、選択されている行を調べるには、ListIndex プロパティの代わりに Selected プロパティを使います。
とあります
考え方としては、リストボックスのListIndexをループして
ListBox2.ListIndex(i)=True
のとき、選択されていたときの動作に入るようにします
さほど難しくないと思いますので、コードはつけません(No.1さんが書いてますし)
何か問題あれば、補足して下さい
この回答への補足
超初心者の自分。VBAのいろんな参考書を本屋でみましたが、複数行を選択するコードばかりで、それをセルに書き込むコードが見当たりません。表示させるだけで意味があるのでしょうか。不思議です。
補足日時:2008/05/06 09:13No.1
- 回答日時:
シートにコントロールツールボックスのリストボックスを1つ張り付け。
プロパティのFilListRangeはG1:G10りんご
いちご
バナナ
みかん
パイナップル
キウイ
イチジク
ーー
ダブルクリックイベントに
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
j = 1
d = Range("a65536").End(xlUp).Row
For 選択行 = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(選択行) Then
x = ListBox1.List(選択行, 0)
Cells(d + 1, j) = x
j = j + 1
End If
Next 選択行
End Sub
ーーー
使い方
いちご、キウイ、イチジクを選択する場合
いちごをクリック、キウイをクリック、最後にイチジクをダブルクリック
ーーー
それでシートには
いちごバナナキウイ
りんご
りんごバナナパイナップル
いちごキウイイチジク <---
の最後の行のようになる。
この回答への補足
ご回答ありがとうございます。
シートにコントロールツールボックスのリストボックスを1つ張り付け・・・・・貼り付けでなく、シートのB列を右クリックするとリストボックスがあらわれる仕様にしたいです。
プロパティFilListRange が表示されません。ヴァージョンが違うかも・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA リストボックス内の値を複数選択し別シートに転記するには
Visual Basic(VBA)
-
VBA リストボックス複数選択からセルへの反映についての質問です。 リストボックス1では1つ選択 リ
Visual Basic(VBA)
-
VBAのListBoxで複数選択してExcelの1つのセルに反映
Visual Basic(VBA)
-
-
4
excelのリストボックスで選択した項目をアクティブセルに入力方法
Excel(エクセル)
-
5
エクセルVBA「リストボックスで選択した値をテキストボックスで変更してシート上セルに反映したい」
Excel(エクセル)
-
6
Excel VBA 複数選択したリストボックスからテキストボックスに転記したいです。
Visual Basic(VBA)
-
7
複数選択のListBoxでClickイベントが拾えません
Visual Basic(VBA)
-
8
UserForm1.Showでエラーになります。
工学
-
9
Excel にて、 リストボックスのデーターを別ブックのセルに転記するVBAをご教授願います
Excel(エクセル)
-
10
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
-
11
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
-
12
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
13
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
14
EXCELファイルに誰がアクセスしたかを見たい
Access(アクセス)
-
15
エクセルVBAで複数選択できるように設定したリストボックスの、選択され
Visual Basic(VBA)
-
16
エクセル ユーザーフォームにオートシェープ(図形)を貼り付けるこは可能なのでしょうか?
Excel(エクセル)
-
17
リストボックスの選択解除
Visual Basic(VBA)
-
18
VBA 半角スペースを入れるには...
その他(Microsoft Office)
-
19
Worksheet_Changeの内容を標準モジュールから実行するには?
その他(プログラミング・Web制作)
-
20
リストボックスの複数データをセルに転記する
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
7文字以上のフルーツをできるだ...
-
スイカが炭酸の味!
-
何という名前の虫か教えてください
-
ハーブソルトを代用できるもの...
-
【ぶどう】 友人からデラウェア...
-
ラズベリーの種の抜き方を教え...
-
煮物こんにゃくの冷凍保存について
-
教えてください!!
-
国産ブルーベリーのほうがいい?
-
こんなスイカは食べても大丈夫...
-
Excelでの全通りの組み合わせ出...
-
冷蔵庫の中に虫が・・・
-
東京モノレールはスイカで乗れ...
-
ふにゃふにゃになったキウイっ...
-
ブルーベリージャムに種?
-
とうもろこし 粒の根元がオレ...
-
中黒「・」か読点「、」か?
-
パイナップル果汁はなぜ泡立ち...
-
すいかは発酵しても食べられるか。
-
外はふわふわで(柔らかい)、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
7文字以上のフルーツをできるだ...
-
ハーブソルトを代用できるもの...
-
4歳の子供がさくらんぼを種ご...
-
教えてください!!
-
筍の上の部分が緑色になってい...
-
ラズベリーの種の抜き方を教え...
-
中黒「・」か読点「、」か?
-
さくらんぼを塩水で洗うのは?
-
Excelでの全通りの組み合わせ出...
-
Excel MATCH関数で検索範囲内...
-
スポンジケーキってどのくらい...
-
煮物こんにゃくの冷凍保存について
-
梶井基次郎の檸檬
-
メロンとヨーグルトは合わない...
-
パイナップルにたかる虫
-
さくらんぼに似ているが、さく...
-
ふにゃふにゃになったキウイっ...
-
パイナップル果汁はなぜ泡立ち...
-
「であり」と「であって」の使...
-
エクセルで数字を入力したら文...
おすすめ情報