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

解決済みの質問

【ExcelVBA】ワークシートからListBoxへ取得

はじめまして。最近VBAを始めたばかりです。
今回ご指導戴きたいのは、以下の内容になります。

Excelのsheet1に入力されているリストを、ユーザフォームのListBoxに取得したいのですが、思うようにできません。
sheet1に入力されているリストの構成は、【年次|コード|名称】となっており、【年次+コード】でユニークになっています。

今回私が行いたい操作は、『コードを重複せず取得し、コードに紐付く名称をListBoxに表示』という操作です。

一応AdvancedFilterを使い、一意に抜き出したリストを別シートにコピーしてリストを解除することで、ListBoxに設定することはできました。
ですが、できれば別シートを使うことなくsheet1だけで処理を済ませたいと思っています。

環境は、WindowsXP/Excel2003/VB6です。
ご存知の方がいらっしゃいましたら、ご指導お願い致します。

投稿日時 - 2008-10-10 02:25:23

QNo.4390569

すぐに回答ほしいです

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

標題が不適当。
>ワークシートからListBoxへ取得
ではなくて、
重複しない行の取得が重点内容のはず。
ーー
それとリストボックスへのアイテムへの設定
ーー
一方法を挙げておくが、色々な方法がありそうです。
私は関数の応用で簡潔にできないかとやったが。
リストの2列設定も含め、コントロールのことを勉強してください。
>最近VBAを始めたばかりです、の人には難しすぎるとおもう。
その分、回答丸写しにならざるを得ないだろう。
例データ
I列   J列
コード名称
12-111aa
13-222bb
12-111aa
13-222bb
15-345cc
18-435dd
20-225ee

Sub test01()
Dim mylist(2, 20) '2 列 21行の例
UserForm1.ListBox1.ColumnCount = 2
UserForm1.ListBox1.Clear
d = Range("I65536").End(xlUp).Row
MsgBox d
k = 0
For i = 2 To d
If Application.WorksheetFunction.CountIf(Range("I2:I" & i), Cells(i, "I")) = 1 Then
mylist(0, k) = Cells(i, "I")
mylist(1, k) = Cells(i, "J")
k = k + 1
End If
Next i
'---
UserForm1.ListBox1.Column() = mylist
UserForm1.Show
End Sub

投稿日時 - 2008-10-10 09:40:16

お礼

早い回答ありがとうございました。

>標題が不適当。
>>ワークシートからListBoxへ取得
>ではなくて、
>重複しない行の取得が重点内容のはず。
ご指摘ありがとうございます。次に質問させていただく際には、一目で疑問内容が分かるよう表題に気をつけさせていただきます。

>最近VBAを始めたばかりです、の人には難しすぎるとおもう。
やはり、処理としては難しい部類に入るのでしょうか・・・。

>リストの2列設定も含め、コントロールのことを勉強してください。
ご指摘ありがとうございます。コントロールは知らない事が多々あるため、重点的に勉強していこうと思います。

それと、上記内容はシート側に記述するものであってますか?
質問に明記するのを忘れていましたが、実際はユーザフォーム側で処理を行うことになります。
上記回答を元に自分でいじってみるつもりですが・・・。

また、重ねての質問になるのですが、リストに設定したアイテムを選択してユーザフォームのボタンを押下した場合、別シートにある表の最終行へ追加させる事って可能なのでしょうか?

投稿日時 - 2008-10-14 00:40:07

ANo.1

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

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

回答(1)

あなたにオススメの質問