[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『AddItem以外の追加方法』(ピューマ)
こんにちは。昨日回答いただいた方ありがとうございました。
また質問させていただきます。
あるブックから指定の条件をもとにとってきたデータをリストボックス1に表示させています。
リストボックス1にあるデータはシート2の一覧表のB列に全て載っています。
B列は、あらかじめ降順でも昇順でもない任意の順番に並べてあります。
このB列の順番をもとに、リストボックス1も並べ替えをしたいのですが、どのように記述すれば良いでしょうか。
UserForm1.ListBox1.AddItem Cells(Row, "B")
一覧表のA列にある文字と、あるデータを一行ずつ比較して同じならB列の文字をリストボックスに入れるという処理です。
リストボックスのRowSourceに「シート名!B:B」と入れて、動かしてみたところ、上記のコードでエラーがでました。
実行時エラー '70';
書き込みできません。
B列の任意の並びをもとにリストボックスを並べ替えるにはRowSourceしかないのでしょうか。
その場合、AddItem以外でリストボックスにデータを追加する方法はありますでしょうか。
どうぞ宜しくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
With Sheets("シート2") UserForm1.ListBox1.List = .Range("B2", .Range("B" & Rows.Count).End(xlUp)).Value End With
でB2からB列最終行まで表示されるはずですが? あらかじめRowSource プロパティを空白にしておかないとエラーになりますよ? (seiya) 2016/02/05(金) 12:48
書き方がわかりにくく申し訳ないのですが、シート2のB列をすべて表示させたいわけではなく、
シート2のA列にある文字と、あるブックのデータを比較して、一致すればその行のB列にあるデータをリストボックスに入れたい、ということです。
これはfor文を使ってA1:A50までを見ています。
リストボックスに入れるまではできているのですが、並びを任意の並び(シート2のB列のように)にしたいのです。
(ピューマ) 2016/02/05(金) 13:05
seiyaさんからコメントあるように、ListBox や ComboBox の RowSource 指定 と Listへの格納は、二者択一です。
AssItem も Listへの格納ですから、RowSource は空白にしておかなければいけません。
(β) 2016/02/05(金) 13:09
RowSourceを空にしておく場合は、どのように任意の並び替えを指定すれば良いでしょうか?
すみません、これ以外の方法が調べても見つからなかったので。。
(ピューマ) 2016/02/05(金) 13:11
>あるブックから指定の条件をもとにとってきたデータをリストボックス1に表示させています。
ここのところの処理がどうなっているのかが不明 (seiya) 2016/02/05(金) 13:20
For Each Rng In c.Range("A1:A50")
If Rng.Value <> "" Then If p = Rng.value Then UserForm1.ListBox1.AddItem c.Cells(Rng.Row, 2) Exit For End If End If Next
こんな感じになっています
Rng = シート2のA列
p = 比較するデータ
(ピューマ) 2016/02/05(金) 13:29
c.Range("A1:A50") は別ブックのシート上のセル範囲ですね? Exit For でループを抜けていますが,ListBox1には1データのみですか? (seiya) 2016/02/05(金) 13:37
すみません、別ブックではなくて、フォルダ上のファイル名と比較していました。
今のコードと相違があったので、再度UPします。
Set xlAPP = Application
vntPathName = xlAPP.InputBox("参照するフォルダ名を入力して下さい。", _ cnsTitle, "C:\") If VarType(vntPathName) = vbBoolean Then Exit Sub strPathName = vntPathName
If Dir(strPathName, vbDirectory) = "" Then MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle Exit Sub End If
strFileName = Dir(strPathName & cnsDIR, vbNormal)
Do While StrFileName <>""
For Each Rng In c.Range("A1:A50")
If Rng.Value <> "" Then If StrFileName = Rng.value Then UserForm1.ListBox1.AddItem c.Cells(Rng.Row, 2) Exit For End If End If Next strFileName = Dir() Loop
(ピューマ) 2016/02/05(金) 13:43
一度Dictionaryに格納して Set dic = CreateObject("Scripting.Dictionary") Set xlAPP = Application vntPathName = xlAPP.InputBox("参照するフォルダ名を入力して下さい。", _ cnsTitle, "C:\") If VarType(vntPathName) = vbBoolean Then Exit Sub strPathName = vntPathName If Dir(strPathName, vbDirectory) = "" Then MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle Exit Sub End If strFileName = Dir(strPathName & cnsDIR, vbNormal) Do While StrFileName <>"" For Each Rng In c.Range("A1:A50") If Rng.Value <> "" Then If StrFileName = Rng.value Then dic(c.Cells(Rng.Row, 2).Value) = Empty Exit For End If End If Next strFileName = Dir() Loop
With Sheets("シート2")
For Each Rng In .Range("b2",.Range("b" & Rows.count).End(xlup)) If dic.Exists(CStr(Rng.Value)) Then UserForm1.AddItem Rng.Value Next End with
こんなことですか? (seiya) 2016/02/05(金) 13:54
複数表示されていませんか? もしかして、並べ替えをしたいのですか? (seiya) 2016/02/05(金) 14:31
複数表示もありますし、並べ替えもしたいです。
うまく書けるかわかりませんが、詳しく書いてみます。
フォルダ内のファイル名は品名と記号番号が書かれていまして、その記号番号と
シート2のA列にある記号番号を比べて、同じならB列にある正式な品名をとってくるというものです。
フォルダの中に「ケーキ S0001」「ケーキ K0001」「ケーキ H0001」「ケーキ K0002」の4つファイルがあった場合、
A列と比べて、記号番号が合致したB列の「いちご」「クリーム」「クリーム」「薄力粉」の順番でリストボックスに表示させたい、ということです。
この順番とは、シート2のB列の順番です。
試してみたら、「いちご」「クリーム」「薄力粉」という風になったので、連続して同じデータでも複数表示できないかなと思いました。。
(ピューマ) 2016/02/05(金) 14:47
シート2のA列にある記号番号に合致する分は全て表示されるはずですが? A,B ケーキ S0001,いちご ケーキ S0001,いちご ケーキ S0001,いちご ケーキ K0001,クリーム ケーキ K0001,クリーム ケーキ K0001,クリーム
ということであれば、 いちご いちご いちご クリーム クリーム クリーム
になりませんか? (seiya) 2016/02/05(金) 14:57
>シート2のB列にいちご、りんご、みかん、とあって、みかんの行のA列と合致したファイル名が A列と比較?
If dic.Exists(CStr(Rng(,0).Value)) Then UserForm1.AddItem Rng.Value
こういうこと? (seiya) 2016/02/05(金) 14:59
シート2は、
A B
A000 小豆
C000 チーズ
H000 薄力粉
K000 クリーム
N000 納豆
S000 いちご
という感じになっていて、Likeを使用して「*S000*」としています。
なのでシート2には同一のものはないんですが、ファイル名に「S0001」「S0002」と複数ある場合があります。
これが、今は複数ファイルがあっても一つしかリストボックスには表示されません。。
追記します。
シート2に同一のものはないと書きましたが、一部同一のものがあります。
例えると、「オーディオプレーヤー」という商品名で、記号番号が「IP000」「SO000」「PA000」と複数記号番号がある場合は、連続して書いています。
A B
IP000 オーディオプレーヤー
SO000 オーディオプレーヤー
PA000 オーディオプレーヤー
(ピューマ) 2016/02/05(金) 15:10
もしかして
c.Range("A1:A50") このcはシート2のことで、A/B列は同一シート上?
>Likeを使用して「*S000*」としています。 どこで? (seiya) 2016/02/05(金) 15:34
> c.Range("A1:A50")
> このcはシート2のことで、A/B列は同一シート上?
シート2のことで、同一シート上です。
Likeは、
If StrFileName = Rng.value Then
ここで使用しています。正確には、
If StrFileName Like "*" & Rng.value & "*" Then
でした。
また、
>If dic.Exists(CStr(Rng.Value)) Then UserForm1.AddItem Rng.Value
この部分で、システムエラー(H80004005)が起きてしまいました。
(ピューマ) 2016/02/05(金) 16:06
>Do While StrFileName <>"" >For Each Rng In c.Range("A1:A50") > If Rng.Value <> "" Then > If StrFileName = Rng.value Then dic(c.Cells(Rng.Row, 2).Value) = Empty > Exit For > End If > End If >Next >strFileName = Dir() >Loop を strFileName = Dir() >Loop を Do While StrFileName <>"" dic(StrFileName)=Empty strFileName = Dir() Loop
>With Sheets("シート2") > For Each Rng In .Range("b2",.Range("b" & Rows.count).End(xlup)) > If dic.Exists(CStr(Rng.Value)) Then UserForm1.AddItem Rng.Value > Next >End with
を Dim e With Sheets("シート2") For Each e in dic For Each Rng In .Range("b2",.Range("b" & Rows.count).End(xlup)) If e Like "*" & Rng(,0).Value & "*" then UserForm1.AddItem Rng.Value Next Next End with
では?
(seiya) 2016/02/05(金) 16:19
前回の質問に回答したが、全然違う話になってるよねぇ。 前回何を学んだか教えてほしいわ・・・ (稲葉) 2016/02/05(金) 16:27
前回のコードは並べ替えしていませんよ? つまり解決してないのに、次の質問は別の内容ということですか?
私のコードではAddItemではなく、Listを使って値を取り込んでいます。 コードを理解してもいないくせに、よくそういうこと言えますねぇ。 (稲葉) 2016/02/05(金) 17:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.