web-dev-qa-db-ja.com

Excelの一部をVBAフォームに表示する方法

.csv形式のファイルがあり、A-S列から、テーブルのようなレコードがいくつかあります。私の完全なプログラムはいくつかの行、列、セル値の編集などを挿入/削除/削除/追加します。私は必要なすべての操作をコード化することができました。今、それをGUIと統合しようとしています。

私が欲しいのは、Ax1からVBAユーザーフォームにレコードがある最後の列までのセルを表示することです。どうやってやるの?

* ps:繰り返しますが、ファイルの形式は.csvで、Excel 2007を使用しています

複数列のリストボックスを使用してデータを表示できます。

[〜#〜]ロジック[〜#〜]

  1. 一時シートにテキスト(Csv)ファイルをインポートする
  2. 複数列のリストボックスにそのデータを表示する
  3. Userformアンロードイベントで一時シートを削除する

テキスト(Csv)ファイルを一時シートにインポート

Private Sub CommandButton1_Click()
    Dim wb As Workbook, wbTemp As Workbook
    Dim wsTemp As Worksheet

    Set wb = ThisWorkbook
    Set wbTemp = Workbooks.Open("C:\MyCsv.Csv")

    wbTemp.Sheets(1).Copy After:=wb.Sheets(wb.Sheets.Count)

    Set wsTemp = ActiveSheet

    wbTemp.Close SaveChanges:=False
End Sub

そして今、あなたはそのデータを複数列のリストボックスに表示することができます。

そのデータを複数列のリストボックスに表示

私は3列から20列までの例をとっています。必要に応じて変更してください

Private Sub CommandButton1_Click()
    Dim wb As Workbook, wbTemp As Workbook
    Dim wsTemp As Worksheet

    Set wb = ThisWorkbook
    Set wbTemp = Workbooks.Open("C:\MyCsv.Csv")

    wbTemp.Sheets(1).Copy After:=wb.Sheets(wb.Sheets.Count)


    Set wsTemp = ActiveSheet

    wbTemp.Close SaveChanges:=False

    With ListBox1
        .ColumnCount = 3
        .ColumnWidths = "50;50;50"
        .RowSource = wsTemp.Range("A1:C20").Address
    End With
End Sub

[〜#〜]スクリーンショット[〜#〜]

enter image description here

serformアンロードイベントで一時シートを削除

一時シートを削除するには、コードの先頭でwsTempを宣言して、UserForm_QueryCloseイベントでアクセスできるようにします。この完全な例を見る

Option Explicit

Dim wsTemp As Worksheet

Private Sub CommandButton1_Click()
    Dim wb As Workbook, wbTemp As Workbook


    Set wb = ThisWorkbook
    Set wbTemp = Workbooks.Open("C:\MyCsv.Csv")

    wbTemp.Sheets(1).Copy After:=wb.Sheets(wb.Sheets.Count)


    Set wsTemp = ActiveSheet

    wbTemp.Close SaveChanges:=False

    With ListBox1
        .ColumnCount = 3
        .ColumnWidths = "50;50;50"
        .RowSource = wsTemp.Range("A1:C20").Address
    End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Application.DisplayAlerts = False
    wsTemp.Delete
    Application.DisplayAlerts = True
End Sub

HTH

19
Siddharth Rout