人に聞けない痔の悩み、これでスッキリ >>

質問させていただきます。EXCEL VBAのリストビューコントロールについて、
任意の行を、違う行間に挿入みたいなことはできるのでしょうか?
(例えば、5行目を1行目と2行目の間に挿入)
アドバイスを宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

http://oshiete.goo.ne.jp/qa/6402282.html
>それで話は変わってしまうのですが...
変わりすぎですよね。
だから新スレなのでしょうけど。
#せめて前スレの始末はしたほうが良かったのでは。

(普段ListViewを使わない人なので微妙な回答になるかもしれませんが)
新規挿入して元の行をRemoveするか、
Dim i As Long
Dim LI As ListItem
With ListView1
  Set LI = .ListItems(5)
  With .ListItems.Add(2, , LI.Text)
    For i = 1 To LI.ListSubItems.Count
      .SubItems(i) = LI.SubItems(i)
    Next
  End With
  .ListItems.Remove 6
End With
Set LI = Nothing

SubItemsにソート用のインデックスを予め設定(連番付加)しておいてSortするとか。
'.SubItems(1)をソートインデックスにした場合。(Width 0 でも可)
Dim i As Long: i = 2
Dim j As Long: j = 5
With ListView1
  .ListItems(j).SubItems(1) = i
  For i = i To j - 1
    .ListItems(i).SubItems(1) = i + 1
  Next
  .SortKey = 1
  .SortOrder = lvwAscending
  .Sorted = True
End With

http://officetanaka.net/excel/vba/listview/index …
    • good
    • 0
この回答へのお礼

end-u様
スプレッドの頃からいろいろとアドバイス有難う御座いました。
こちらの質問攻め、話のすり代わりにも真摯にお付き合い頂き、
本当に有難う御座いました!
リストビューの行の変更もアドバイス通りにやったらできました。
スプレッドも別の機会に使いたいと思います。
また何かありましたらご指導よろしくお願い致します!

お礼日時:2011/01/07 19:32

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qリストビューの項目の内容を変更する方法は?

お世話になります。

VS2005を使用しています。
VB.NETのリストビューで一覧を作ったのですが、その中の項目の内容をプログラム内から変更することは出来ないのでしょうか?
色々検索してみたのですが見つかりませんでした。

現在、リストビューには4つの項目があり、100行くらい有ります。
(1つ目の項目にはチェックボックス付き)
その中の、項目の内容を変更したいのです。

やはり、以下のようにしなければいけないのでしょうか。
1)一旦対象行の内容を保存
2)対象行を削除
3)保存先で内容変更
4)リストビューに再追加

よろしくご享受下さい。

Aベストアンサー

ListView1.Items(1).SubItems(2).Text = "ABC"
とかでは?

QEXCEL VBA リストビューの項目編集

質問させさせていただきます。
EXCEL VBAで、フォーム上にEcxelシートのような表形式のコントロールを貼り付けて、編集したいと考えています。
調べたら、見た目はリストビューが良かったのですが、2列目以降が選択できないとの事なので、
他にグリッド系コントロール(無料)で良いものがあったら教えていただきたいと思います。
また、リストビューを使った場合でも、何か案があれば助言いただきたいと思います。
リストビューに期待しただけに、ショックは大きいです・・・

Aベストアンサー

>..それと余談なのですが、スプレッドに限らず2003で作ったマクロは、
>問題なく2007で動くのでしょうか?

下位バージョン互換を考慮されている機能は動きます。
ですがやはりCommandbar関連など、仕様が大きく変わった部分や
FileSearchオブジェクトなどのように、消えた機能を使ってると動きません。
http://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_04_04.html
http://office.microsoft.com/ja-jp/excel-help/HA010198895.aspx
http://technet.microsoft.com/ja-jp/library/cc179188%28office.12%29.aspx
http://msdn.microsoft.com/en-us/library/bb242669%28office.12%29.aspx

QListViewで複数選択された項目を一度に削除する方法

ListViewで選択された複数のアイテムの値の取得方法と複数選択された項目を一度に削除する方法を教えてください。

Aベストアンサー

サンプルです。
一度に取得はムリなので、ループを使用します。

  Dim itmLvw As ListItem
  Dim i    As Long
  
  '選択されているアイテムの情報を調査
  For Each itmLvw In ListView1.ListItems
    If itmLvw.Selected Then
      Debug.Print itmLvw.Index & "番目が選択されています"
    End If
  Next itmLvw
  
  'リストの後ろの方から、選択されているアイテムを削除
  For i = ListView1.ListItems.Count To 1 Step -1
    Set itmLvw = ListView1.ListItems(i)
    If itmLvw.Selected Then
      ListView1.ListItems.Remove itmLvw.Index
    End If
  Next i

QListViewから選択中の文字列を取得

VB2005の初心者です。
タイトル通り、ListViewから選択中の文字列によって処理を変えるプログラムを構築しようとしているのですが、うまくいきません。

ComboBoxの場合では
Private Sub button1_Click~
If ComboBox1.SelectedItem = "テスト" Then
処理
End if

でうまくいったのですが、ListViewの場合では
Private Sub button1_Click~
If ListView1.SelectedItems = "テスト" Then
処理
End if

と指定すると
「エラー1これらの引数で呼び出される、アクセス可能な '=' がないため、オーバーロードの解決に失敗しました」
とエラーがでます。


ListViewから選択中の文字列を取得するには「.SelectedItems」では取得できないのでしょうか?
VBに詳しい方ご教授お願いします。

Aベストアンサー

ComboBoxはSelectedItemと単数形ですよね
ListViewの場合SelectedItemsですから選択された複数の項目といったことになります

SelectedItemsはコレクションになるので 最初の選択項目なら
ListView1.SelectedItems(0)となりますので

if ListView1.SelectedItems(0).Text = "テスト" Then
といった具合に使います

もっとも選択アイテムない場合も考えられるので上記の前に
If ListView1.SelectedItems.Count = 0 then
  Exit Sub
End if
を追加したほうがいいかもしれません

QExcel VBA ListViewサブアイテムの文字色

Excel VBA ListViewにおいて、特定の行のサブアイテム(2列目以降)の文字色を変更することは可能でしょうか?

Aベストアンサー

ListView1.ListItems(?).ListSubItems(?).ForeColor = RGB(?,?,?)
と言う形では

QExcelVBA でリストリストボックスに列見出しをコーディングでつける

エクセルVBAのフォームにリストボックスを作り、データーベースから読み出したデータを表示させています。

この時、各列にテーブル名とはちがう列名をつけたいのですが、シートに記述するのではなく、コーディングでつける事は出来ませんか?

ControlTipTextに「test1;test;test3;」と指定してみたりしましたが、駄目でした。

どなたかご教授、あるいは出来ません、シートに隠しか方法はありません、と全否定をしてください。

Aベストアンサー

Wendy02 です。配列で入れる方法を考えてみましたが、できませんでした。

結局、他の方法としては、ListBox の 上に、白のLabel をそれぞれのColumnにあわせて、表示するぐらいしか、思いつきません。(これは、論外でしょうね)

列見出し(フィールド)は、もともと、Excelのワークシートの、データベース用の仕様のひとつだから、Rangeオブジェクトでしか、ListBox の Header に入れることは、出来ないようです。

QListView 項目の選択/選択解除について

 ListViewに表示する情報が1件しかないとき、その情報が常に選択された状態なので、
困っています。

 1件しかなくても、選択したり、選択を解除したりすることは出来ないのでしょうか?

 または、ListViewでは出来ないけど、他のコントロールなら出来ると言う情報があり
ましたらぜひ教えてください。

 よろしくお願いします。

Aベストアンサー

失礼しました
× HitItem
○ HitTest
でした。

Private Sub Form_Load()
  Dim i    As Integer
  
  With Me.ListView1
    .View = lvwList       '//表示形式:一覧
    .HideSelection = False   '//リストビューがフォーカスを失っても、選択状態を保持する
    .MultiSelect = True     '//複数選択可能
    
    'ダミーデータの登録
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.Add , , "Dmy Data" & i
    Next i
 
  End With
End Sub

Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  Dim itmX  As ListItem
  
  With Me.ListView1
    'マウス位置のアイテムを取得
    Set itmX = .HitTest(x, y)
    '取得できたなら未処理
    If Not (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '現在選択中のアイテムを取得
    Set itmX = .SelectedItem
    '取得できなかったなら未処理
    If (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '選択解除
    Set .SelectedItem = Nothing
    itmX.Selected = False
  End With
  
PGMEND:
  Set itmX = Nothing
End Sub

失礼しました
× HitItem
○ HitTest
でした。

Private Sub Form_Load()
  Dim i    As Integer
  
  With Me.ListView1
    .View = lvwList       '//表示形式:一覧
    .HideSelection = False   '//リストビューがフォーカスを失っても、選択状態を保持する
    .MultiSelect = True     '//複数選択可能
    
    'ダミーデータの登録
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.A...続きを読む

Qcheckbox付きListViewで デフォルトチェック

チェックボックス付きのListViewコントロールで初期値としてチェックボックスにチェック
をして表示したいと思っております。

Listviewにデータを追加して(subitemもあるため)その後
ListView1.Item(i).Selected = True
をしているのですが、チェックして表示されません。

項目が表示された後、何れかの項目をチェックしようとするとチェックが表示されます。

どのようにすれば最初から表示されるのでしょうか?

初歩的な質問かもしれませんが、お願い致します。

Aベストアンサー

Selectedではなく CheckedプロパティをTrueに設定しましょう

ListView1.Item(i).Checked = True
といった具合です

Qリストビューをスクロールさせるには

フォームが表示されたあとリストビューを一番下までスクロールさせたいのですがどうすればいいのでしょうか?

Aベストアンサー

'最後の行を表示する
ListView1.ListItems(ListView1.ListItems.Count).EnsureVisible
'最後の行を選択する
ListView1.ListItems(ListView1.ListItems.Count).Selected = True

QListViewで、非表示列って作れますか?

VB6.0です。

一覧にListViewを使用しているのですが、
非表示にしたい列があるのですが、出来ませんか?
列幅は可変としているので、列幅を0にしておく方法は使えません。

一覧には見せないけど、更新項目なので、
いちいちもう1度読み直すのは面倒なので、非表示で持っていたいのですが…。
何か方法ありますか?

Aベストアンサー

どんな感じで ListView にアイテムを追加してるのか分かりませんが、
見せたくない項目をキーにしてしまうとか? キーが重複しそうなら連番
でも仮につけとけば良いし。

With ListView1.ListItems.Add
  .Key = strKey & Chr(0) & Cstr(lngItemCnt)
  .Text = strText
  .SubItems(1) = strSub1Text
  .SubItems(2) = strSub2Text
  .SubItems(3) = strSub3Text
End With

このようにして、

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

  MsgBox Left$(Item.Key, InStr(Item.Key, Chr(0)) - 1)

End Sub

こんな感じで非表示にしたい項目を拾うのは?

> ただし、SORT機能をつけた場合、ずれますよね。

その通りですが、それが問題になりそうですか?

並びが気になるならソートしたときに非表示の ListView も同時に同項目で
ソートすれば良いだけだし、そもそも配列も非表示の ListView は並び変え
は必要ないと思いますよ。

表示されている ListView の ItemClick イベントなどで Key または Text
は拾えるので、あとはそれを配列や 非表示 ListView から探すだけでは?

表示されていないものに並びは関係ないと思いますが、いかかでしょう?

ただ、こっちの方法は効率悪いですね(´・ω・`)

どんな感じで ListView にアイテムを追加してるのか分かりませんが、
見せたくない項目をキーにしてしまうとか? キーが重複しそうなら連番
でも仮につけとけば良いし。

With ListView1.ListItems.Add
  .Key = strKey & Chr(0) & Cstr(lngItemCnt)
  .Text = strText
  .SubItems(1) = strSub1Text
  .SubItems(2) = strSub2Text
  .SubItems(3) = strSub3Text
End With

このようにして、

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

  MsgBox Left$(...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング