Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13245 / 13646 ツリー ←次へ | 前へ→

【6346】1つのリストボックスに2行のデータを入... さる 03/6/25(水) 15:34 質問
【6357】Re:1つのリストボックスに2行のデータを入... ichinose 03/6/25(水) 19:44 回答
【6363】Re:1つのリストボックスに2行のデータを入... さる 03/6/26(木) 12:02 質問
【6364】Re:1つのリストボックスに2行のデータを入... Jaka 03/6/26(木) 12:34 回答
【6365】Re:1つのリストボックスに2行のデータを入... さる 03/6/26(木) 12:41 お礼
【6366】しまった。 Jaka 03/6/26(木) 12:48 回答
【6367】Re:しまった。 ichinose 03/6/26(木) 13:27 回答
【6368】しまった2。 Jaka 03/6/26(木) 13:42 発言

【6346】1つのリストボックスに2行のデータを入...
質問  さる E-MAIL  - 03/6/25(水) 15:34 -

引用なし
パスワード
   お久しぶりにお世話になります。

UserFormにListBoxが1つだけあります。
Sheeet1のボタンをクリックすると、UserFormが表示され、
ListBoxにSheet2のA列とC列のデータを表示したいのですが、
うまくいきません。

Sheet1のボタンをクリックしたときのコードはこんな感じです。
1列分のデータならうまくいったのですが・・・。
Sub 摘要参照()

Application.ScreenUpdating = False
  
行 = ActiveCell.Row: 列 = ActiveCell.Column
If 行 > 2 And 列 = 3 Then
 Sheets("摘要・科目").Select
 レコード数 = Range("A1").CurrentRegion.Rows.Count
 UserForm1.ListBox1.MultiSelect = fmMultiSelectSingle
 UserForm1.ListBox1.List = Sheets("摘要・科目").Range(Cells(2, 1), Cells(レコード数, 1)).Value
 Sheets("出納帳").Select
 UserForm1.Show
End If
  
Application.ScreenUpdating = True
  
End Sub

どなたかご教授よろしくお願いします。

【6357】Re:1つのリストボックスに2行のデータを...
回答  ichinose  - 03/6/25(水) 19:44 -

引用なし
パスワード
   ▼さる さん:
こんばんは。

>お久しぶりにお世話になります。
>
>UserFormにListBoxが1つだけあります。
>Sheeet1のボタンをクリックすると、UserFormが表示され、
>ListBoxにSheet2のA列とC列のデータを表示したいのですが、
>うまくいきません。
>
>Sheet1のボタンをクリックしたときのコードはこんな感じです。
>1列分のデータならうまくいったのですが・・・。

列が連続していると簡単なのですが・・・。
方法はいくつかあると思いますが、
作業列を設置したらどうでしょうか?
例では、D列を作業列としました(作業列はどこでもいいです)。

Sub 摘要参照()
  Dim maxlen As Long
  Application.ScreenUpdating = False
 
  行 = ActiveCell.Row: 列 = ActiveCell.Column
  If 行 > 2 And 列 = 3 Then
    Sheets("摘要・科目").Select
    レコード数 = Range("A1").CurrentRegion.Rows.Count
    With UserForm1.ListBox1
     .MultiSelect = fmMultiSelectSingle
     .Font.Name = "MS ゴシック"
'            全角:半角が2:1になるようなフォント選択
     maxlen = Application.Evaluate("max(lenb(" & Range(Cells(2, 1), _
         Cells(レコード数, 1)).Address & "))") + 5
'     ↑(A列の文字列の長さの最大)+5を取得
     Range(Cells(2, 4), Cells(レコード数, 4)).Formula = _
         "=a2&rept("" ""," & maxlen & "-lenb(a2))&c2"
'     ↑作業列のD列に連結数式を入れる
     .List = Range(Cells(2, 4), Cells(レコード数, 4)).Value
'     ↑リストボックスにセット
     Range(Cells(2, 4), Cells(レコード数, 4)).Value = ""
'     ↑作業列の初期化
     End With
    Sheets("出納帳").Select
    UserForm1.Show
    End If
 
  Application.ScreenUpdating = True
 
End Sub

【6363】Re:1つのリストボックスに2行のデータを...
質問  さる E-MAIL  - 03/6/26(木) 12:02 -

引用なし
パスワード
   ▼ichinose さん:
またまたお世話になります。

>列が連続していると簡単なのですが・・・。

昨日の問題はichinoseさんのおかげで解決したのですが、
↑の「列が連続していると簡単」ということですが、
やってみたら全然分かりませんでした。

列が連続しているときの方法も、ご教授お願いします。

【6364】Re:1つのリストボックスに2行のデータを...
回答  Jaka  - 03/6/26(木) 12:34 -

引用なし
パスワード
   さる さん ichinose さん こんにちは。
おじゃまします。

'A,C列
Sub nnnm()
Dim Tb() As String
'Cells(3, 3).Select
行 = ActiveCell.Row: 列 = ActiveCell.Column
If 行 > 2 And 列 = 3 Then
 レコード数 = Sheets("摘要・科目").Range("A1").CurrentRegion.Rows.Count
 UserForm1.ListBox1.MultiSelect = fmMultiSelectSingle
 UserForm1.ListBox1.ColumnCount = 2
 ReDim Tb(1 To レコード数 - 1, 1 To 2)
 For i = 2 To レコード数
   Tb(i - 1, 1) = Cells(i, 1).Value
   Tb(i - 1, 2) = Cells(i, 3).Value
 Next
 UserForm1.ListBox1.List = Tb
 'Sheets("出納帳").Select
 Erase Tb
 UserForm1.Show
End If
End Sub

'A,B列
Sub nnn22()
Dim Tb() As String
'Cells(3, 3).Select
行 = ActiveCell.Row: 列 = ActiveCell.Column
If 行 > 2 And 列 = 3 Then
 レコード数 = Sheets("摘要・科目").Range("A1").CurrentRegion.Rows.Count
 UserForm2.ListBox1.MultiSelect = fmMultiSelectSingle
 UserForm2.ListBox1.ColumnCount = 2
 UserForm2.ListBox1.List = Range("A1:B21").Value
 'Sheets("出納帳").Select
 UserForm2.Show
End If
End Sub

Private Sub CommandButton1_Click()
  MsgBox "右=" & ListBox1.Column(0) & " 左=" & ListBox1.Column(1)
End Sub

【6365】Re:1つのリストボックスに2行のデータを...
お礼  さる E-MAIL  - 03/6/26(木) 12:41 -

引用なし
パスワード
   ▼Jaka さん:
こんにちは。ありがとうございます。
すぐには理解できそうもありませんが、勉強させていただきます。

【6366】しまった。
回答  Jaka  - 03/6/26(木) 12:48 -

引用なし
パスワード
   >'A,B列
> UserForm2.ListBox1.List = Range("A1:B21").Value
   ↓
UserForm2.ListBox1.List = Range("A1:B" & レコード数).Value

【6367】Re:しまった。
回答  ichinose  - 03/6/26(木) 13:27 -

引用なし
パスワード
   Jaka さん、さるさん、こんにちは。

Jakaさん、さすがですねえ・・。

さるさん、
Jakaさんのコードに変えた方がいいかもしれません。
あとは、ColumnWidthsプロパティだけ調整すればOKかと思います。

【6368】しまった2。
発言  Jaka  - 03/6/26(木) 13:42 -

引用なし
パスワード
   ichinose さん こんにちは。

>Jakaさん、さすがですねえ・・。
全然さすがじゃありません。
またポカしました。

逆でしたね。すみません。

MsgBox "右=" & ListBox1.Column(0) & " 左=" & ListBox1.Column(1)
 ↓
MsgBox "左=" & ListBox1.Column(0) & " 右=" & ListBox1.Column(1)

13245 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free