[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『リストボックスの値をセルに記述する』(ひで)
VBA初心者です。よろしくお願いいたします。
ユーザーフォーム上にリストボックスを貼り付け
Rowsourceに範囲を設定し、選択したデータをセルに記述する方法について教えてください。 どこに何を書いたり、設定したりすればよいのでしょうか。
たとえば現在のアクティブセルの列がDだった場合 ユーザーフォーム上のテキストボックスが D列上のアクティブセル行のデータを表示す るように設定してあります。
ここでリストボックス内のデータをクリック(確定ボタンが必要?)すると、
AW列のアクティブセル行に入力されるようにしたいのです。
また、隣のE列だった場合は
AY列のアクティブセル(1行空かし)に入るようにしたいのです。
図で書くと([ ]はユーザーフォーム上のアクティブセルを表しています。)
例1 D E F・・・・・・・AW AX AY
12 [ ] [AW12に入る]
13
14
例2 D E F・・・・・・・AW AX AY
12
13 [ ] [AY13に入る]
14
という具合です。 よろしくお願いいたします。
ListBoxの名前が ListBox1 UserFormモジュールへ貼り付け UserFormのデザイン画面でフォームを右クリックして「コードの表示」
Private Sub LlistBox1_Click() With ListBox1 If .ListIndex > -1 Then If ActiveCell.Column = 4 Then Range("aw" & ActiveCell.Row).Value = .Value ElseIf ActiveCell.Column = 5 Then Rnage("ay" & ActiveCell.Row).Value = .Value End If End If End With End Sub (seiya)
seiyaさん。早速ありがとうございます。できました。
もう一つお願いできますか。
元のセル(D列12〜AH列53)には数式でデータ(△、□など)が表示されていたり、 空欄表示になっています。
ここが空欄でなのに、リストボックス内データを選択しようとしたとき メッセージボックスを表示させることが可能でしょうか。(ひで)
seiyaさん。早速確かめてみましたが、 一つ私の言い方が悪かった部分があります。
元のデータ入力するセルは D列〜AH列です。 また、リストボックスにて入力するセルは AW列〜DE列まであります。
作っていただいたコードはD,E列のみですよね。 追加する方法を教えていただければ自分で書いてみます。
(ひで)
If .ListIndex > -1 Then If ActiveCell.Column = 4 Then Range("aw" & ActiveCell.Row).Value = .Value ElseIf ActiveCell.Column = 5 Then Rnage("ay" & ActiveCell.Row).Value = .Value End If End If
の部分を
If .ListIndex > -1 Then ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column * 2 + 41).Value = .Value End If に変更
> ここが空欄でなのに、リストボックス内データを選択しようとしたとき > メッセージボックスを表示させることが可能でしょうか。 よく意味がわからないのですが? (seiya)
ありがとうございます。と同時に、すみません。タイプミスです。
まずD列〜DE列には数式が入っており、○や△や空欄表示になっています。
たとえば
D12=数式によって○や△が表示されている ↓ D12がアクティブになっているときリストボックスにて AW12にデータを入力しようとするとそのままリス トボックス内データが入力できる。
しかし
D12=数式によって空欄になっている ↓ D12がアクティブになっているときリストボックスにて AW12にデータを入力しようとすると メッセージボックスが表示される ”D12にデータを入れてください”
という具合です。
これがD12:AH53内のセルに適応させたいのですが。。。 (ひで)
こんな感じですか?
Private Sub LlistBox1_Click() With ListBox1 If .ListIndex > -1 Then If Intersect(ActiveCell, Range("d12:ah53")) Is Nothing then Exit Sub If ActiveCell = "" Then MsgBox ActiveCell.Address(0,0) & " にデータを入れてください" Exit Sub End If ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column * 2 + 41).Value = .Value End If End With End Sub (seiya)
seiyaさん。返信が遅くなってすみません。完璧にできました。 感謝いたします。またよろしくお願いいたします。 (ひで)
たとえば
D12セルをアクティブにし,リストボックス内からデータを選択したとします。 この場合たとえば「あ」がAW12に入力され,リストボックス内も「あ」が選択されています。 このアクティブセルを上下左右に移動したときに 先ほどD12の時に選択した「あ」がそのまま選択されて(青く反転)いますが, たとえばD13が未入力だったときに選択されている「あ」の反転をなくすにはどうすればよいでしょう か。 さらに既に入力済みのD12に移動したときには再び「あ」が反転するという具合に
元のセル(D列12〜AH列53)内でセルを移動したときにリストボックスで
反転させた(選択した)セルはそのまま反転させ,何も選択したなかったセルは反転をさせない これをセルの移動とともに連動させることは可能でしょうか。(ひで)
> たとえばD13が未入力だったときに選択されている「あ」の反転をなくすにはどうすればよいでしょうか。 If ActiveCell = "" Then .ListIndex = -1 '<- この行を追加
> さらに既に入力済みのD12に移動したときには再び「あ」が反転するという具合に 入力済みか否かは ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column * 2 + 41)に値があるか否かで 判断するのですか? ActiveCell の値はこちらにはわかりませんので。 (seiya)
> さらに既に入力済みのD12に移動したときには再び「あ」が反転するという具合に 入力済みか否かは ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column * 2 + 41)に値があるか否 かで 判断するのですか?
できればそうしたいです。
しかし,D列12〜AH列53内アクティブセルに「△」「□」「キ」「テ」が入力されたとき リストボックスから追加データを選択するようにしたいので アクティブセルにこれら4つの文字が入力されているとき 反転させるのでも大丈夫だと思います。 (ひで)
If ActiveCell = "" Then .ListIndex = -1 '<- この行を追加
追加しました。左に移動して空欄セルをアクティブにしましたが,
D12で選択した反転が消えないのですが。。。
(ひで)
その下に DoEvents を追加してみてください。 (seiya)
> しかし,D列12〜AH列53内アクティブセルに「△」「□」「キ」「テ」が入力されたとき > リストボックスから追加データを選択するようにしたいので > アクティブセルにこれら4つの文字が入力されているとき > 反転させるのでも大丈夫だと思います。
ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column * 2 + 41)にある値を選択する ということですか? ListBox の中にその値が含まれていない場合もあるのですか? (seiya)
リストボックスによって入力するAW列〜DE列内 にはリストボックスの中に含まれない値はありません。 ただ,28個のデータがあります。 一つ一つ設定しなければなりませんか。 (ひで)
ということは、WorksheetのSelectionChange event で制御ですね? Userformのコードを元に戻して
シートモジュールへ
Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If Intersect(.Cells, Range("d12:ah53")) Is Nothing Then Exit Sub If .Value = "" Then UserForm1.ListBox1.ListIndex = -1 DoEvents Exit Sub Else UserForm1.ListBox1.Value = Cells(.Row, .Column * 2 + 41).Value DoEvents End If End With End Sub (seiya)
If ActiveCell = "" Then
.ListIndex = -1 '<- この行を追加 <=この行を削除ですか。
(ひで)
そうです。 (seiya)
お手数をおかけしました。
ありがとうございます。
(ひで)
'
Range("D12:D53,I12:I53,N12:N53,S12:S53,X12:X53,AC12:AC53,AH12:AH53,AI12:AI53"). _ Select Range("AI12").Activate With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlHairline End With Selection.Borders(xlInsideVertical).LineStyle = xlNone End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub saikeisen()’罫線を横に引く
'
' saikeisen Macro
'
'
Range("B16:AL16,B21:AL21,B26:AL26,B31:AL31,B36:AL36,B41:AL41,B46:AL46,B51:AL51,B53:AL53").Select
' With Selection.Borders(xlEdgeLeft) ' .LineStyle = xlContinuous ' .ColorIndex = 0 ' .TintAndShade = 0 ' .Weight = xlMedium ' End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous ' .ColorIndex = 0 ' .TintAndShade = 0 .Weight = xlThin End With ' With Selection.Borders(xlEdgeRight) ' .LineStyle = xlContinuous ' .ColorIndex = 0 ' .TintAndShade = 0 ' .Weight = xlHairline ' End With ' Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Range("AG12").Select ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー の2つのマクロを実行し、罫線を引こうとすると
If .Value = "" Then
にエラーが出るのですが、
どうすればいいのでしょうか。
また、このエラーは行、列などを範囲設定し、
d12:ah53が含まれるとエラーが発生するようですね。
たびたび申し訳ありません。(ひで)
With Target If .Count > 1 Then Exit Sub '<- この行を追加 (seiya)
(ひで)
Select するコードは避けたほうがよいですよ?
Sub saikeisen()’罫線を横に引く
' saikeisen Macro
With Range("B16:AL16,B21:AL21,B26:AL26,B31:AL31,B36:AL36,B41:AL41,B46:AL46,B51:AL51,B53:AL53")
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlHairline End With End Sub (seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.