[[20170912093617]] 『VBAリストボックスについて』(ヘルプミー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAリストボックスについて』(ヘルプミー)

アクティブシートからリストボックスの値を取得し、下記のコードで別のシートにリストボックスの値を返したいのですが、できません。教えてください。
 Private sub commandbutton1_click()
Dim lastrow as long
Dim i as integer
With worksheets("aaa")
Lastrow = .cells(rows.count, 1).end(xlup).row + 1
For i = 1 to 2
.cells(lastrow, i ).value = listbox.list(listbox1.listindex, i - 1)
Next i
End with
End sub
です。よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


これは、シートにActiveXのListBoxとCommandButtonを貼っている、という事でしょうか?

まず間違っているのか転記ミスなのか判りませんが、ListBoxの名前が、数字付きと無しで混在しています。これではエラーになっているかと思います。

次に、ListBoxのListプロパティは2次元ではないので、2つも引数指定できません。追加時に2つ指定できるのは、アイテムとインデックスであり、リストで表示されるのはアイテムだけです。 リスト上も横に2つ並んではいないと思いますが、これはどういうリストから、何を抜き出したいのでしょうか? 詳しく説明できますか?(ListBox1.List(i - 1)、とかなら1件ずつ抜き出せますが…)
(???) 2017/09/12(火) 11:10


ご回答ありがとうございます。
名前は私の転記ミスです。全てリストボックス1です。
ユーザーフォーム上にリストボックス1とコマンドボタンを配置しています。
リストボックスの中身についてですが、
Private sub userform_initialize()
Dim lastrow as long
With activesheet
Lastrow = cells(rows.count,3).end(xlup).row
End with
With listbox1
.columncount = 2
.columnwidths = "50;50"
.rowsource = "b1:c"&last row
End with
End sub
でb列に番号があり、c列に氏名があります。
その名簿の中から、任意の人間をシートaaaに転記したいです。
上記のコードでコマンドボタンを押すと、1番の人間しかシートにaaaに転記されず、困っています。
(ヘルプミー) 2017/09/12(火) 12:10

なるほど、ユーザーフォームを使っていて、.columncount を増やしていたのですね。それなら2次元でアリです。

そうなると、元のコードで正しく転記できるはずですよ? ListBox1.ListIndex番目を見ているので、どれか1つクリックしてListBoxを選択状態にしてからでないとエラーになるかと思いますが。(細かく言うと、Initialize時もClick時も、lastrowをセットする際、CellsとRowsの頭にドットを付けるべきですが、そのままでもとりあえず動くようです)
(???) 2017/09/12(火) 13:59


なんとなく想像すると、ActiveSheet と Worksheets("aaa") の関係が逆、とかだったりしませんか? いちいち元データのあるシートを表示しておいてからフォーム表示している、というのが面倒そうで。

現状のコードだと、ActiveSheetからリスト項目を作り、ボタンを押すとaaaシートに貼っています。 更には、With文の内側なのにドットを省略しているから、ActiveSheetがいろいろ元になって計算されてしまっている、とか? 省略せず、親となるシートを明記してみてください。
(???) 2017/09/12(火) 14:14


返信が遅れましてすみません。
すべて書かせていただきます。
まず、月ごとのシートがあります。(全角数字のシート名です。)
それに加え、名簿のシートが複数あります。(シート名は半角英数字で1-1や1-2等となっています。)
その名簿シートから、複数の人間を特定のシートに選び、最終的に月のシートにコピーしたいです。(シートaaaです。)
Private sub commandbutton1_click()
Dim aa as string
Range("B55") = textbox1.value
Range("C55") = textbox2.value
aa = activesheet.range("A56")
Worksheets(aa).select
Unload userform3
Userform2.shoow
End sub
月のシートにコマンドボタンを配置してこのユーザーフォーム3を呼び出すようにしてあります。
A56のセルに(B55&"-"&C55)と関数が入っています。
ユーザーフォーム3のデザインはテキストボックス2つにコマンドボタン1つです。
ユーザーフォーム2のデザインは、リストボックスが1つコマンドボタンが4つあります。
コマンドボタンは「追加」コマンドボタン1「他の名簿の選択」コマンドボタン2「完了」コマンドボタン4「終了」コマンドボタン3です。
「追加」コマンドボタン1に2回目の返信で書かせていただいたシートaaaに転記するコードが書いてあります。
「他の名簿の選択」コマンドボタン2には
Unload userform2
Unload userform3
とコードを入れました。
「完了」コマンドボタン4には
Unload userform2
Userform4.show
と入っています。
「終了」コマンドボタン3には
Unload userform2
です。
ユーザーフォーム4のデザインはテキストボックスが1つコマンドボタンが1つです。
コードは
Dim aa as string
Worksheets("aaa").range("D2").value = textbox1.text
Aa = worksheets("aaa").range("D2")
Sheets("aaa").range("a2:b50").value = sheets(aa).range("i2:j50").value
Worksheets("aaa").range("a2:b50").clearcontents
Sheets(aa).select
Unload me
End sub
となっています。
リストボックス追加のコマンドボタンで名簿の一番上の氏名しかシートaaaに反映されず、ユーザーフォーム4のコピーも上手くいきません。
ユーザーフォームのテキストボックスで月を指定してもらい、aaaの名簿のをコピーし選択したいです。
どうぞ、よろしくお願いします。

(ヘルプミー) 2017/09/13(水) 09:32


環境を再現してみましたが、正しくaaaシートに選んだ項目が追記されていきましたよ? 上手くいかない、だけだと、どこかでエラー停止しているのか(止まっているなら、エラーメッセージは何か?)、何も起きずに終わってしまう(代入しているのだし、どこかのシートに出力していそうですが…)とか、もう少し詳しく教えてください。

しかし、当初のご質問の、aaaシートに転記するまでは問題ありませんでしたが、ユーザーフォーム4のコードには問題があります。ここにくるまでに、aaaシートのA:B列にはリストから選択した内容が転記されているのに、ボタンを押すとこれを消そうとする方向で代入しようとしていますが、これ、逆じゃないですかね?

    Sheets("aaa").range("a2:b50").value = sheets(aa).range("i2:j50").value
  ↓
    Sheets("aaa").Range("a2:b50").Copy Sheets(aa).Range("i2:j50")

こんなとかでは?(つまり、問題ないコードだけ見せておいて、実は問題はその先にあった、と…)
(???) 2017/09/13(水) 10:27


正しく表示されるんですね?!
エラーは出ません。
ですが、書いたように1番の氏名しか反映されず、ユーザーフォーム4のコピーもできません。
すべてのコードを書きました。
(ヘルプミー) 2017/09/13(水) 12:08

ユーザーフォーム4のコードで、ClearContentsしている部分をコメントアウトしてから動かしてみてください。ここでコピーできた後は消してしまっているので、セットが成功しているのか、それともコピーに失敗しているか切り分けられないのかと思います。 aaaシートのA:B列に選択した文字列がセットされているなら、その後の月別シートへの転記に失敗しています。 コメントアウトしても何もセットされていないならば、リストボックスからの転記に失敗しています。

ただ、コードは正常動作したので、後はシート名が違うとか、入力が違うとか、全角半角のミスや、シート名末尾にスペース文字が付いていて気づかなかったとか、なにかつまらない原因(しかし見つけにくい)がありそうに思います。

もうひとつ気づいた点としては、ユーザーフォーム上のテキストボックスに入力した内容はaaaシートのD2セルに代入していますが、これの全角半角はシート名と一致していますかね? たとえ全角数字を入力しても、セルの書式が標準のままだと、Excelが勝手に半角変換してしまうと思いますが、ちゃんと対策しているのでしょうか?(セルの書式を文字列にしておくだけ)
(???) 2017/09/13(水) 13:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.