システムwiki

範囲と追加アイテムをリストするvba

pom1559 解決済 最終更新日:2020-09-01 15:46

VBAを使用して、(構造化参照を持つ)tableから値のリストを定義します.

以下は、シート「Register」のtable「Register_Table」の7番目の列からリストを取得するために使用されるコード行です:

List5=Sheets( "Register").ListObjects( "Register_Table").ListColumns(7).DataBodyRange.Value

これは完全に機能します.

ここで、このリストと上部に追加の値を提供するコードが必要です.たとえば、列7に次のアイテムがある場合:

アイテム1

アイテム2

アイテム3

その他

新しいリストに最初のリストに「すべて」のアイテムを追加して、リストを次のようにします.

すべて

アイテム1

アイテム2

アイテム3

その他

「ALL」はコードで定義することも、別のセルで定義することもできます(私の設定はコードにあります)が、リストに含めることはできません.

私はそれが簡単なものであると確信していますが、私にとっては十分に簡単ではなく、誰かが以前にこれに答えた場所を見つけることができません.

ありがとう

返信リスト(回答:9)

1 #
Nothing 1

To:pom15595
re:リストをごまかす
これが私のリクエストの解釈です.
'


Sub AlterData()
Dim List5 As Variant
Dim N As Long
List5=Range( "G3:G6").Value '<<<この範囲のデータを入力
List5=Application.WorksheetFunction.Transpose(List5)
ReDim Preserve List5(LBound(List5)To(UBound(List5)+ 1))
For N=UBound (List5)To(LBound(List5)+ 1)ステップ-1
List5(N)= List5(N-1)
Next
List5(1)= "All"
VBA.MsgBox List5(1)&vbCr&List5(2)&vbCr&List5(3)&vbCr&List5(4)&vbCr&List5(5)
End Sub

'


[編集]
次の行の直後のコード:List5(1)= "All"の方がいいかもしれません...

List5=Application.WorksheetFunction.Transpose(List5)
Range( "H3:H7").Value=List5
End Sub

MediaFireのExcelプログラム(現在は無料)...
Custom_Functionsアドインには、X_vLookUp関数を含む20以上の新しいExcel関数があります.
ダウンロード(広告なし)...https://www.mediafire.com/folder/lto3hbhyq0hcf/Documents

---

応答1# ->にスキップ
2 #
pom1559

WOWそれは私が期待していたよりも多くのコードです.これが私の貧しい質問によるものであるかどうかわかりません.ここでより良い文脈を与えるためには、完全なコードがあります:


-

プライベートサブワークシート-SelectionChange(範囲としてのByValターゲット)
application.enablevents= false on Error goto exithAndler
target.column= 17= 17<>target.row<11
'list5= sheets( "register").listColumns(7).databodyrange.value
gcellcurrval6= target.value
userform6.show' popフォームを上げる

を終了した場合、

exithandler:
Application.EnableVents= true
end sub


-

コードが何をするのか、17列目(上部10行を除く)をクリックすると、List5によって入力されるユーザーフォームが開きます.

これは大丈夫です、私の質問は、このアイテムが参照tableに含まれていないとき( "all"の例で)リスト内の別の項目を追加する方法です( "register_table")

その文脈は役立ちますか?

応答2# ->にスキップ
3 #
Nothing

to:pom15595
re: "そのコンテキストヘルプ"

はい、それは助けます.

リストに列ヘッダーを置きたい( "all")
リストボックスのRowSourceを指定して、
画像では、columnHeadsプロパティがtrueで、rowsourceが行います. ヘッダーを含みます.

Excel columnheadsプロパティがtrueの場合、ローソースの上の行を自動的に含みます.

だからあなたがすることは、ヘッダーテキストをセルに追加し、それ以外のセルをあなたのリストで埋めることです...

userform1.listbox1.RowSource=このワークブック.ワークシート(1).Range( "B3:B6")

もちろん、リストのサイズを知る必要があります.

このアプローチは速くて物事が私にとってより簡単になっています.

Professional_Compareワークブックを提供していますこのメソッドを使用しています.

https://www.mediafire.com/folder/lto3hbhyq0hcf/documents.

応答3# ->にスキップ
4 #
pom1559

私の場合私はリストボックスを使って値を選択するには該当する値:

QUSTERS/例では、「all」はこのリストのソースに入っていませんが、選択するオプションとして提供します.このリストのソースにすべてを含める必要がありません.

私はあなたが指示された列ヘッダーを使ってオプションとして選択することを許可しないと思われます.

これは私の状況を完全に説明しますか?そしてそれは可能ですか?

応答4# ->にスキップ
5 #
Nothing 1

宛先:pom15595

re:まだそこにはありませんが、フィニッシュラインは表示されます.
リストの一番下にある「All」ラベルで問題がなければ、数行のコードを削除できます.
'


List5=Sheets( "Register").ListObjects( "Register_Table").ListColumns(7).DataBodyRange.Value
List5=Application.WorksheetFunction.Transpose(List5)
ReDim Preserve List5(LBound( List5)To(UBound(List5)+ 1))
List5(UBound(List5))= "All"
List5=Application.WorksheetFunction.Transpose(List5)
'

「すべて」が一番上に来る必要がある場合は、元のコードに戻ります.

-または-

リストボックスに個別のエントリを1つずつ書き込むことができます.
(遅いようですが、実際はそうではありません)

-または-

7列目の上部または下部に空白セルまたはフィラーセルを作成する場合

「すべて」の値を入力するだけです.

応答5# ->にスキップ
6 #
pom1559

すばらしいこと.上部に「すべて」が欲しかったので、元のコードに行きました.

結局のところ、必要なコードは最初に想像したよりも複雑でした.

これについてご協力いただきありがとうございます.

乾杯

応答5# ->にスキップ
7 #
pom1559

申し訳ありませんが、私はあなたが元の質問によって答えたことを知っています(それについてもありがとう)、しかし.....

今すぐ私は2つの範囲からのリスト(リストボックスに表示されている)を必要とします.どうやってこれを行うことができますか?私はUnion etcで(しかし失敗した)を試みました.

あなたは私を操縦することができますか?

感謝

応答7# ->にスキップ
8 #
Nothing

こんにちはpom15505
re:リストボックスに2つのリストを追加します
自分のコードの問題の1つにぶつかったので、新しい質問を投稿する必要があります.一人ではない.

この問題に対する私の最初の反応は、リストボックスの.AddItemメソッドを使用することです.
Excelヘルプのパスを確認して、詳細を確認してください.
NLtL

応答8# ->にスキップ
9 #
pom1559