• ベストアンサー

リストボックス文字を連結しセルへ入力

cj_moverの回答

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#12、、cjです。 #2補足欄へのレスです。 よく解らないので、とりあえず3例挙げておきます。 添付画像(選択中のセル:B5)の例では、 赤い楕円で示したセル範囲が、上から順番に 以下の3例での出力先を示しています。 ' ' ●(1/3択)●一番上にある空セル、に出力 ' ' ●(2/3択)●アクティブセルより下の行で、一番上にある空セル、に出力 ' ' ●(3/3択)●値が設定されたセルの中で一番下にあるセル、の、一つ下にある空セル、に出力  ← #1の内容 それぞれのコメントの下の行にコードがありますから、 必要なものを活かして、不要なものを削除してください。 ■■ 未入力項目がある場合、メッセージを表示して、何もせずに終了するように書き加えました。 この機能が無い方がよい場合は■■の行を削除してください。 ■■■ リストボックスすべてを選択解除するプロシージャを書き加えました。 これによってユーザーフォームを表示したままの連続入力を可能にしました。 この機能が無い方がよい場合は■■■の行と■■■のプロシージャを削除してください。 ★★ 対象のシートを明示的に指定することを、便宜上、取り止めにしました。 アクティブなシートを対象に処理するように書きましたから、 ユーザーフォームをモードレス表示している場合などは注意してください。 MultiSelect プロパティについての状況が見えてきませんので、 いちいちMultiSelect プロパティを問い合わせて条件分岐するように書き直しました。 この点では(現状では不可避な)無駄が増えています。 ' ' Userform モジュール ' ' Re8253740 Private Sub CommandButton1_Click() ' ★   Dim 氏名_項目(1 To 2) As Variant   Dim nLbNum As Long   Dim i As Long   Dim cn As Long ' ■■   Dim flg As Boolean ' ■■   氏名_項目(1) = ListBox1.Value ' ★   For nLbNum = 2 To 4     With Controls("ListBox" & nLbNum) ' ★       If .MultiSelect Then         flg = False ' ■■         For i = 0 To .ListCount - 1           If .Selected(i) Then             flg = True ' ■■             氏名_項目(2) = 氏名_項目(2) & .List(i)           End If         Next i         If flg Then cn = cn + 1 ' ■■       ElseIf .ListIndex > -1 Then         氏名_項目(2) = 氏名_項目(2) & .Value         cn = cn + 1 ' ■■       End If     End With   Next nLbNum   If IsNull(氏名_項目(1)) Then MsgBox "氏名未入力": Exit Sub   If cn < 3 Then MsgBox "未入力項目あり": Exit Sub ' ■■ ' ' ●(1/3択)●一番上にある空セル、に出力 '  Range("B2:B" & Rows.Count).SpecialCells(xlCellTypeBlanks).Areas(1)(1).Resize(, 2).Value = 氏名_項目() ' ' ●(2/3択)●アクティブセルより下の行で、一番上にある空セル、に出力   Range("B" & ActiveCell.Row & ":B" & Rows.Count).SpecialCells(xlCellTypeBlanks).Areas(1)(1).Resize(, 2).Value = 氏名_項目() ' ' ●(3/3択)●値が設定されたセルの中で一番下にあるセル、の、一つ下にある空セル、に出力 '  Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(, 2).Value = 氏名_項目()   選択解除 ' ■■■ End Sub Private Sub 選択解除() ' ■■■   Dim nLbNum As Long   Dim i As Long   For nLbNum = 1 To 4     With Controls("ListBox" & nLbNum) ' ★       If .MultiSelect Then         For i = 0 To .ListCount - 1           If .Selected(i) Then .Selected(i) = False         Next i       Else         .ListIndex = -1       End If     End With   Next nLbNum End Sub 以上で、お求めの応えになっていたのなら、以下、読み進む必要はありません。 こちらの受け止め方と、質問者さんがやりたいことについての説明と、 どこですれ違ってしまっているのか、考えてもらえるように書きます。 最初のご質問で、 > 尚、行に記入があれば次の空白から順に入力したい。 この意味("行"が何を指しているか)が未だによく解っていません。 もしかして、  シート上のボタンを押すとユーザーフォームが表示される  シート上で選択されている行について   未入力であれば、選択中の行の   既入力であれば、より下の行で、最初に見つかる未入力行の    B、C列にデータを設定する ということだったのかしら?という前提で今回のコードを試しに書いてみました。 それにしても、未入力行を、そのままにしておく理由が私にはよく解りません。 空行を挟んでいると、何をするにしても処理の手間数が増えてしまいますから、 一般的なExcelやVBAとの付き合い方で言えば、努めて空行を無くす方向で 上から順に入力するものなのではないでしょうか? 実際、空行を無くしてから処理を始めるマクロ、なんてオーダーも偶にありますが、 手作業で、ジャンプ機能(F5キー)、セル削除、セルの挿入、などの基本機能で 対応してからマクロを考えれば、訊ねるまでもない程簡単だったという話もよく耳にします。 漠然とした分類をする目的、等々で、何となく空行を挟む、 という使い方をする人がいるのは知っていますが、 それならそれで特殊な事情としてはっきり説明するようにした方が好いです。 #2補足欄で > コード入力で反映来たのですが文字が(B2,C2),(B5,C5),(B10,C10)に入力されていた場合B5,C5の行から順に入力する場合セル番号にてコード表示したいのですが。 総合的に、  リストボックスの値をセル範囲に出力することについては望み通り出来たが、  出力先のセルの位置について、   望み通りではなかった   または   考えているうちに要求仕様を改めた ということなんだと思います。  (B2,C2)・・・最初の添付画像ではタイトル行です。  (B10,C10)・・・最初の添付画像では表の外です。  B5,C5の行から順に入力する場合・・・これは、出力先のセルを、選択中の行を基準に選ぶ、という意味でしょうか?  セル番号にてコード表示したいのですが・・・"セル番号"、"コード表示"ともに、何を指しているか解りません。 結局、どういう要求なのか未だ理解に至っていません。 あらためて補足頂ければと思っております。

kuma0220
質問者

お礼

誠にありがとうございます。

kuma0220
質問者

補足

誠にすみません。内容説明しますと表がありまして大項目が5項目に区切って範囲があり第2項目の小項目2行入力してありそれに続けて3行目から入力したくユーザーフォームもボタンにクリックにより5個呼出せます、貴殿の添付図で表すと10行目が第2の大項目とした場合B列に2行文字が入力されている場合3行目から入力したくCommandButton1_ClickによりコードにRange("B10")以降の空行からリストボックス選択値を入力したいのですが。よってセル値を指定してコード入力になると思いますが、何分説明がうまくなく申し訳ありませんがもし納得いただければご回答の方、よろしくお願いします。

関連するQ&A

  • リストボックス内検索

    マクロ初心者です。 (エクセル2003を使用) ユーザーフォームにテキストボックスとリストボックスを作り、 リストボックス内のデータ(2列;ナンバーと文字、2500行くらい)の検索をテキストボックスに入力した文字で行いたいのですが、どうしていいのかわかりません。 ワークシート上では、Find関数を使ってできるのですが、リストボックス内の検索では使えませんか? inStr関数を使うのでしょうか? 検索がされたときのスクロールもできるといいのですが…。 よろしくお願いいたします。

  • リストボックスについてです。

    リストボックスについてです。 B列をダブルクリックするとリストボックスが立ち上がり、データを選択してB列に表示できるように設定されていますが、困った現象が起こっています。 例えば、sheet1のB10にダブルクリックでリストボックスを表示し、そこから「あいうえお」という名前を表示させて、sheer1編集が終わったとします。 次のsheet2でB1をダブルクリックしているのに、sheet2のB10に勝手に「あいうえお」と表示されてしまいます。 コードは以下になってます。 VBA初心者なのでエクセルのサイト等からコピペ等して作ったコードです。 どこかおかしな箇所があると思うのですが、何処がおかしいのかがわかりません。 お分かりになる方、教えていただければ助かります。 ' ◆Worksheetのコード◆ '---------------------------------------------------- '選択範囲を変更したときに実行される Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) UserForm1.ListBox1.RowSource = "データ!A1:A100"  '表示するデータ範囲 UserForm1.ListBox1.Font.Size = 12    'フォントサイズ If Target.Column = 2 Then 'B列なら 行 = Target.Row '行番号を取得する UserForm1.Show 'ユーザーフォームを表示する End If End Sub '=================================================================================== ' ◆UserForm1のコード◆ '-------------------------------------------------------------------------- Private Sub ListBox1_Click() 'クリックされたときに実行される If 行 <> 1 Then '1行目でなければ Cells(行, 2) = ListBox1.Value 'リストボックスの値をセルにセットする End If UserForm1.Hide 'ユーザーフォームを非表示にする End Sub Private Sub UserForm_Deactivate() '非アクティブになったときに実行される Unload Me 'ユーザーフォームをメモリから削除する End Sub '========================================================================================= '============================== ' ◆標準モジュールのコード◆ Option Explicit Public 行 As Variant '行番号 Sub auto_open() Load UserForm1 'ユーザーフォームをメモリに読み込む End Sub '==============================

  • ExcelVBAでユーザーフォーム内のリストボックスの設定について

     教えてください、ExcelVBAでユーザーフォーム内にリストボックスを作りました。 複数列・複数行のワークシートデータを参照する設定です。  列は12列で、一番左の列に番号をふってあります。  行は31行で、一行目がタイトル表示してあります。  質問なのですが、このリストボックスは全列・全行表示する大きさでユーザーフォーム内に作成してあるのですが、いざマクロを動かすと幅は問題ないんですが、高さが縮んで自動的にスクロールが表示されます。  ユーザーフォームを大きくしてリストボックスも大きくしてやっても同じです。 このリストボックスの高さを固定させる設定はどうすれば良いでしょうか。

  • EXCELの入力規則でリスト入力をさせたいセルがあります。

    そのときのリスト項目ですが、例えばA列に北海道、青森、秋田・・・などの都道府県名が入っており、C列に○か空白が入力されている表があるとします。また行の数は47とします。 (○か空白の意味は、県庁所在地と都道府県名が同じ名前なら○(例に、新潟県と新潟市)、それ以外なら空白(三重県と津市)だとします) C列が"○"の場合のみA列のデーターをみて、それらをリスト項目と してダウンリストで選べるようにしたいのですが、どのようにしたらよろしいでしょうか? VBAのコードでなければできないようですか?教えてください。 よろしくお願いします。

  • エクセル VBAのリストボックス

    エクセルのVBAでユーザーフォーム上のリストボックスに文字を入力すると候補がドロップダウンリストに表示され、候補から一つを選択するとドロップダウンリストをとじるといったコードを教えてください。ただし、最終的にリストボックスの値はリストから選ぶのみで、文字を入力するのは候補を表示するためだけに使いたいのです。どなたか、ご教授願います。

  • エクセル・VBAでテキストボックスに入力された文字を

    エクセル・VBAでテキストボックスに入力された文字を B列から検索し、結果をユーザーフォームのリストbox に表示したいのですがうまくいきません 検索は部分一致・大文字小文字無視で行いたいです よろしくお願いします

  • リストボックスのスクロールバーをマウスで動かしたい

    エクセル2007です。 Sheet1のA列に 1行目から順に 1 2 3 4 5 6 7 8 9 10 といれました。 ユーザーフォームを新規作成し、リストボックスを設置しました。 VBAコードは、 Private Sub UserForm_Initialize() Me.ListBox1.RowSource = "Sheet1!a1:a10" End Sub にしました。 VBE画面でF5を押して、フォームを表示させるとリストボックスにスクロールバーが表示されますが、 フォームをクリックして、マウスホイールでぐりぐりしても、リストは動きません。 画像のように、4にカーソルをあて、グリグリしてもダメです。 どうしたら動くようになるのでしょうか?

  • リストボックス内の文字の配置

    Excel2003を使用しています。 ユーザーフォームのリストボックス内の文字の配置を右寄せにしたいのですが、そういう設定は可能でしょうか? 今のままだとマクロを実行してリストが表示されたときに、若干見にくいので、リスト内の配置が設定可能であれば、教えていただきたいです。 よろしくお願いします。

  • リスト外入力

    アクセス2002を使っています。 フォームでコンボボックスを使用し一覧から選択できるようにしたのですが、一覧にない文字列を入力しようとすると「一覧から選択して下さい」とメッセージが出て入力できません。 一覧にない文字列も入力できるようにしたいのですが、どなたか教えていただけませんか? フォームのプロパティで「リスト外入力」という項目がありますが、このプロシジャでマクロを設定すればできるのでしょうか? よろしくお願い致します。

  • excel リストボックスを使った入力について

    excelにリストボックスを使って、複数の入力を一括で行いたいと考えています。 添付画像のように、横並びに入力する方法、縦並びに入力する方法があるのですが、 番号順に入力を自動で行う手順を作成している段階で詰まっております。 考えとしては アクティブのセル(番号1)から、リストボックスを起動し、for nextを使って順に入力 リストボックスで一度入力されたものは、Selectedコマンドにてfalseとし、 次の入力(番号2)に進むようにする。 それぞれ、3、6の入力後、次の行(列)の1の同行(同列)に移動する。 この3、6の位置で行列が切り替わるようにプログラムを組む方法で詰まっております。 なお、入力するセルの個数につきましては、最低1個、最大で9個となり、変化します。 アドバイスいただければと思います。また、別法でも構いません。 よろしくお願いします。