• 締切済み

Excel vba ListVew 右揃え

Excel vba ユーザーフォームにListVewを作成し、数値の部分は「,」付で右揃えにしたいのですが、全て左揃えで表示されます。右揃えにするにはどうしたら良いでしょうか? 以下のコードで使用しています。   'ListVew1に書出し Set rng = ActiveSheet.Cells(1, 1).CurrentRegion With 実績データ確認.ListView2 For i = 2 To rng.Rows.Count .ListItems.Add.Text = rng(i, 18).Value k = 1 For j = 19 To 28 .ListItems(i - 1).SubItems(k) = rng(i, j).Value .ListItems(i - 1).ListSubItems(k).ForeColor = rng(i, j).Font.Color k = k + 1 Next Next End With

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Private Sub CommandButton2_Click() With ListView1 ''プロパティ .View = lvwReport ''表示 .LabelEdit = lvwManual ''ラベルの編集 .HideSelection = False ''選択の自動解除 .AllowColumnReorder = True ''列幅の変更を許可 .FullRowSelect = True ''行全体を選択 .Gridlines = True ''グリッド線 ''列見出し .ColumnHeaders.Add , "_コード", "コード", 46 .ColumnHeaders.Add , "_View", "名称", 46 .ColumnHeaders.Add , "_Text", "計数", 60 .ColumnHeaders(3).Alignment = lvwColumnRight '<==ポイント.計数列を右詰めにする例。 End With '--- Dim i As Long, WS As Worksheet Set WS = Worksheets("Sheet1") '2~6行目のセルを追加 For i = 2 To 6 '左からText,SubItems(index…)の順 With ListView1 .AllowColumnReorder = False End With With ListView1.ListItems.Add .Text = WS.Cells(i, 1) .SubItems(1) = WS.Cells(i, 2) .SubItems(2) = WS.Cells(i, 3) End With Next i End Sub ーーー エクセルのSheet1のA1:C6に コード 名称  計数 111 あ 123 222 い 234 333 う 456 444 え 3456 777 お 23456 とテストデータを置いて、実行しました。 第3列は右詰めになりました。 (注)上記CommandButton2の2には意味はありません。 ユーザーフォrムに1つのリストビューと1つのコマンドボタンを貼り付け コマンドボタンをクリックして、内容を表示させる例です。 WEB記事を寄せ集めて修正したものです。言いたいことは、WEB記事を検索すればわかるということです。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

listbox なら ユーザーフォームに リストボックス1つ コマンドボタン1つ 設けて、コマンドボタンのクリックイベントに Private Sub CommandButton1_Click() UserForm1.ListBox1.AddItem Format(12333, "#,##0") UserForm1.ListBox1.TextAlign = 3 UserForm1.ListBox1.AddItem Format(1233344, "#,##0") UserForm1.ListBox1.AddItem Format(123, "#,##0") End Sub で右詰めになったが。 リストビューではどうかな。

SHTAMA
質問者

お礼

解決しました。有難うございます。

関連するQ&A

  • ExcelのVBAがオーバーフローに!?

    読んで頂きありがとうございます。 以前に質問しました時に回答を頂き凄く助かっていたのですが、何故か「オーバーフロー」と表示されてしまいます。 ひょっとしたら桁なのかも知れません。 下記のVBAを教えて頂きしようしていました。 Option Explicit Sub Test() Dim c(), p(), q(), i, j, l, r, k As Long r = Range("B2").End(xlDown).Row l = Range("D2").End(xlDown).Row ReDim c(r - 2), p(r - 2), q(r - 2) For i = 1 To r - 2 c(i) = Cells(i + 2, 2).Value p(i) = Cells(i + 2, 3).Value q(i) = i + 2 Next i For i = 1 To r - 3 For j = i + 1 To r - 2 If c(i) > c(j) Then k = c(i) c(i) = c(j) c(j) = k k = p(i) p(i) = p(j) p(j) = k k = q(i) q(i) = q(j) q(j) = k End If Next j Next i For i = 1 To r - 2 Cells(i + 2, 7).Value = c(i) For j = 3 To r If Cells(j, 4).Value = c(i) Then Cells(i + 2, 8).Value = p(i) - Cells(j, 5).Value If p(i) - Cells(j, 5).Value <> 0 Then Range("B" & q(i)).Interior.ColorIndex = 6 Range("D" & j).Interior.ColorIndex = 6 End If Exit For End If Next j Next i For i = 3 To r k = 0 For j = 3 To l If Cells(i, 2).Value = Cells(j, 4).Value Then k = 1 Exit For End If Next j If k = 0 Then Range("B" & i).Interior.ColorIndex = 35 End If Next i For i = 3 To l k = 0 For j = 3 To r If Cells(i, 4).Value = Cells(j, 2).Value Then k = 1 Exit For End If Next j If k = 0 Then Range("D" & i).Interior.ColorIndex = 35 End If Next i End Sub デパックのClickすると15行目辺りの「k = c(i)」が黄色くなります。 正直言ってマクロとか全く解りませんが、コピーして使っていました。 どこをどう変更すれば良いのか教えて頂ければ助かります。 よろしくお願いします。

  • シートからのListViewへのやり方

    はじめまして、宜しくお願い致します。 シートからのListViewへの読み込みで 早くListViewへ表示させたいのですが よろしければご教授できればと質問させて 頂きました。 下記のコードは現在利用しているコードです。 Private Sub UserForm_Initialize() With ListView1 .View = lvwReport .FullRowSelect = True .AllowColumnReorder = True .Gridlines = True .AllowColumnReorder = True '列幅の変更を許可 .CheckBoxes = True 'チェックボックスの追加 '.ForeColor = vbBlue .ColumnHeaders.Add , , "NO", 70 .ColumnHeaders.Add , "B", "名前", 100 .ColumnHeaders.Add , "C", "性別", 50 .ColumnHeaders.Add , "D", "血液型", 50 .ColumnHeaders.Add , "F", "生年月日", 100 For i = 4 To Cells(Rows.Count, "B").End(xlUp).Row Application.ScreenUpdating = False With .ListItems.Add .Text = Format(Cells(i, "B"), "0") '.Text = Right(Space(3) & .Text, 3) .SubItems(1) = Cells(i, "C") .SubItems(2) = Cells(i, "D") .SubItems(3) = Cells(i, "E") .SubItems(4) = Cells(i, "F") End With Next End With Application.ScreenUpdating = True

  • VB6.0初心者です。基本的なことですいません

    VB6.0初心者です。基本的なことですいません ListViewコントロールでListItemの追加がよくわかりません。  (1)Listview1.ListItems.Add.Text = objDrive.DriveLetter Listview1.ListItems.Add.SubItems(1) = objDrive.VolumeName と記述すると、1段ずれて表示されてしまいます。  (2)With Listview1.ListItems.Add()   .Text=objDrive.Driveletter  .SubItems(1)=objDrive.VolumeName   End With 又は、  (3)Dim lstItem as ListItem Set lstItem = ListView1.ListItems.Add() lstItem.text=objDrive.DriveLetter lstItem.SubItems(1)=objDrive.VolumeName の記述でうまくいくのですが、 なぜ、(1)だと1段ずれるのか、この理由がわかりません。よろしくお願いします。

  • エクセルVBAの配列について

    エクセルVBAの配列について VBAをはじめたばかりの初心者です。 現在、下記のようにデータを配列の中に入れ、 別シートに書き出そうとしております。 (配列へ読み込むところのみ) Dim 配列(1 To 件数, 1 To 9) As Variant For j =1 To 件数 For i = 2 To L If Cells(i, 2).Value = Tx_month Then For k = 3 To 11 配列(j, k - 2) = Cells(i, k).Value Next k End If Next j,i 現状では、データの最終行のみを「件数」分書き出してしまいます。 jとiのForが重なっているからだと思うのですが、どう書き直したら良いか分かりません。 質問をさせていただくのも初めてなので、分かりづらく恐縮ですが お力添え頂けますと幸いです。 どうぞ宜しくお願い致します。

  • エクセルVBA、ステップモードと結果が異なる

    たとえば、 dim i,j,k as integer for i=1 to 10 for j=1 to 1000 for k=1 to 100 cells(i*1000+j,k).value=worksheets(i).cells(j,k).value next k next j next i みたいなものを実行させると、転記する行がずれることってありますでしょうか。 F8キーを押し続けて一行ずつ実行させたときには問題ないのですが、普通に実行させたときと結果が異なります。 本当はもっと複雑なプログラムを走らせているのですが、決まって同じセルでおかしな値が入力されてしまうのです。 同じような経験をされた方とか、解決方法をご存じの方、よろしくお願いします。

  • 特定行の背景色を変えたいのですが

    vb6で組んでおりますがformの明細行はListView1です。 If ds.RecordCount > 0 Then Do Until ds.EOF Set oListItem = ListView1.ListItems.Add() oListItem.Text = ds.Fields("商品コード").Value oListItem.SubItems(1) = ds.Fields("JANコード").Value oListItem.SubItems(2) = ds.Fields("商品名").Value oListItem.SubItems(3) = ds.Fields("規格").Value if oListItem.SubItems(1) = '' then oListItem.ForeColor = RGB(250, 250, 250) oListItem.BackColor = RGB(250, 180, 180)-->(1)コンパイルエラー endif     ds.MoveNext Loop (1)コンパイルエラー⇒メソットが見つかりません。 がどうしても解消できません・・・初心者です。 ご教示のほどよろしくお願いします。

  • Excel VBAで検索する

    Excel VBAで、Sheet1に貼り付けたテキスト内から Sheet2に記載した(1列ごとの)キーワードを検索し キーワードが含まれている行をSheet3に貼り付ける処理をしているのですが、始めたばかりなので上手くいきません。 下記がソースです。 Dim moji As String Dim word As String Dim result As Integer For i = 3 To 103 For j = 2 To 21 moji = ThisWorkbook.Worksheets("Sheet1").Cells (i, 1).Value word = ThisWorkbook.Worksheets("Sheet2").Cells (j, 2).Value result = InStr(moji, word) If doResult <> 0 Then For k = 1 To 100 ThisWorkbook.Worksheets("Sheet3").Cells (k, 1).Value= moji Next k End If Next j Next i このソースでは上手くいかないのですが、どこがダメなのか分からないので、解決の糸口がつかめません。 アドバイスなどお願いします。

  • VBA For~Next 

    「wsData」の値を「wsInv」の指定セル(=●●●=16)から4つおきに処理したい。 01:Cells(16 + i * 4, 1) とすると「i」が大きいときに   「""」があると16からスタートしない 02:「For k = 0 To 50」を作成したが、何処に入れても上手く処理出来ない。 For i = 0 To 50 '行 For j = 6 To 28 '列 If wsData.Cells(10 + i, 3).Value = "" Then wsInv.Cells(●●●, 1).Value = wsData.Cells(10 + i, 1).Value wsInv.Cells(●●●, j - 2).Value = wsData.Cells(10 + i, 23 + j).Value End If Next j Next i お力添えをお願いいたします。

  • Excel VBAオブジェクト(図形)の保護

    Excel VBAのオブジェクト(図形)の保護について質問させて頂きます。 現在、社内の打合せコーナーの予約表をExcel VBAで作成しておりまして、予約したい開始時間に名前、終了時間に*を入れると、図形の矢印が描画される様になっています。(画像をご参照) しかし、この矢印が動かせてしまう為、開始時間の名前と終了時間の*が入っている間は動かせない様にし、名前と*を消すと矢印が消える様にしたいのですが、どの様にコーディングすれば実現できるでしょうか? ご存知の方、ご教示宜しくお願い致します。 ↓は予約表の現在のVBAのコードです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim stflg As String Dim sth As Long Dim stw As Long Dim edh As Long Dim edw As Long Const maxw = 26 Const maxh = 66 Const cellh = 13.5 Const cellw = 33.85 '入力チェック With ActiveSheet For i = 6 To maxh Step 2 stflg = "" For j = 3 To maxw If .Cells(i, j).Value <> "" Then If .Cells(i, j).Value = "*" Then If stflg = "" Then MsgBox "入力内容が誤りです" .Cells(i, j).Select Exit Sub Else stflg = "" End If Else stflg = "1" End If End If Next j Next i End With '矢印を全て削除する For Each oShape In ActiveSheet.Shapes If oShape.Type = msoLine Then oShape.Delete Next With ActiveSheet For i = 6 To maxh Step 2 stflg = "" For j = 3 To maxw If .Cells(i, j).Value <> "" Then If .Cells(i, j).Value = "*" Then edh = ((i - 2) * cellh) + (cellh / 1.6) edw = 60 + ((j - 2) * cellw) With .Shapes.AddLine(stw, sth, edw, edh).Line .ForeColor.SchemeColor = 0 .EndArrowheadStyle = msoArrowheadStealth .Weight = 1.5 End With stflg = "" Else If stflg = "" Then sth = ((i - 2) * cellh) + (cellh / 1.6) stw = 60 + ((j - 3) * cellw) stflg = "1" Else edh = ((i - 2) * cellh) + (cellh / 1.6) edw = stw + cellw With .Shapes.AddLine(stw, sth, edw, edh).Line .ForeColor.SchemeColor = 0 .EndArrowheadStyle = msoArrowheadStealth .Weight = 1.5 sth = ((i - 2) * cellh) + (cellh / 1.6) stw = 60 + ((j - 3) * cellw) End With End If End If End If If j = maxw And stflg <> "" Then edh = ((i - 2) * cellh) + (cellh / 1.6) edw = stw + cellw With .Shapes.AddLine(stw, sth, edw, edh).Line .ForeColor.SchemeColor = 0 .EndArrowheadStyle = msoArrowheadStealth .Weight = 1.5 End With End If Next j Next i End With End Sub

  • VBA 複数のシートをまたいでの連想配列

    win7、Excelは2013を使用しています。 添付画像の様に、12シートの合計を連想配列に格納しsheet13に書き出したいのですが、プロシージャーの下から6行目のところで、エラーコード451が出ます。 どの様に変更すれば良いか教えて下さい。 Sub 年間集計() Dim Dic Dim i As Integer Dim j As Integer Dim sh As Worksheet Dim rng As Range Dim buf As String Dim num As Integer Set Dic = CreateObject("Scripting.Dictionary") For Each sh In Worksheets For Each rng In sh.Range("J2", sh.Cells(Rows.Count, 10).End(xlUp)) buf = rng.Value num = rng.Offset(, 1).Value If Not Dic.Exists(buf) Then Dic.Add buf, num Else Dic.Item(buf) = Dic.Item(buf) + num End If Next rng Next sh j = 2 With Worksheets("Sheet13") For i = 0 To Dic.Count - 1 .Cells(j, 1) = Dic.Keys(i)   ’エラー箇所 .Cells(j, 2) = Dic.Items(i) j = j + 1 Next i End With End Sub

専門家に質問してみよう