エクセルの表をVB上に貼り付け |
エクセルの表をVB上に貼り付け
(019) 動作確認 : WindowsXP(SP2) VB6.0(SP6) / Excel 2000 Excel 2002 Excel 2007 |
|
まず、VBからExcel及びWordを操作する時の注意事項を見て下さい 1.エクセル上の表をクリップボードを経由して、VBのテキストボックス(1)と ピクチャーコントロールに貼り付けます。 2.テキストボックス(1)のデータをまるごとファイルに保存します。 3.保存したファイルを読み込み、項目ごとに切り出し変数に格納します。 4.そのデータをテキストボックス(2)に表示します。 Option Explicit Private Sub Command1_Click() '★プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryに ' チェックを入れておいて下さい。 '基本的な設定は[VBからエクセルを操作する]を参照して下さい。 '================================================================== 'Excel の起動処理 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) '================================================================== 'Excel を操作部分 '------------------ 仮データ作成 ---------------------- 'Excel のセルに値を代入します。 Dim xlCells As Excel.Range Dim i As Integer Dim j As Integer Set xlCells = xlSheet.Cells For i = 2 To 6 For j = 2 To 6 '30〜100 の範囲のランダムなデータを作成 xlCells(j, i).Value = CInt(70 * Rnd + 31) Next j Next i '系列名の設定 xlCells(2, 1).Value = "国語" xlCells(3, 1).Value = "数学" xlCells(4, 1).Value = "英語" xlCells(5, 1).Value = "社会" xlCells(6, 1).Value = "体育" '項目名の設定 xlCells(1, 2).Value = "石原" xlCells(1, 3).Value = "小泉" xlCells(1, 4).Value = "田中" xlCells(1, 5).Value = "平沼" xlCells(1, 6).Value = "森山" 'ここまで[VBとエクセル間でデータのやりとりをする]と同じ '------------------------------------------------------------------ '指定範囲内を格子の罫線を引く xlSheet.Range("A1:f6").Borders.LineStyle = xlContinuous '指定範囲内をクリップボードにコピー'載禁止 xlSheet.Range("A1:F6").Copy '転載禁止 '------------------------------------------------------------------ 'クリップボードの内容をVB側に貼り付け 'クリップボードにテキストデータが入っているかチェック If Clipboard.GetFormat(vbCFText) Then 'テキストデータならテキストボックスに貼り付け Text1.Text = Clipboard.GetText() '転載禁止 End If 'クリップボードにビットマップが入っているかチェック If Clipboard.GetFormat(vbCFBitmap) Then 'ビットマップならピクチャーコントロールに貼り付け Set Picture1.Picture = Clipboard.GetData() '転載禁止 End If '------------------------------------------------------------------ 'テキストボックスにコピーした内容を丸ごとファイルに保存 Dim lngFileNo As Long lngFileNo = FreeFile Open "C:\sample19.txt" For Output As #lngFileNo '転載禁止 'ファイル名 C:\sample19.txt で保存 Print #lngFileNo, Text1.Text Close #lngFileNo '------------------------------------------------------------------ '保存したテキストボックスの内容を読込み配列に保存 Dim strMyTxt As String '使用可能なファイル番号を取得 lngFileNo = FreeFile 'テキストファイルをオープン Open "C:\sample19.txt" For Input As #lngFileNo ' ファイルの終端までループを繰り返します。 Dim myText(5, 5) As String Dim TmpTxt() As String i = -1: j = 0 Do While Not EOF(lngFileNo) '1 行づつ変数に読み込みます。 Line Input #lngFileNo, strMyTxt i = i + 1 'データを TmpTxt = Split(strMyTxt, vbTab) For j = LBound(TmpTxt) To UBound(TmpTxt) myText(i, j) = TmpTxt(j) '転載禁止 Next j Loop 'ファイルを閉じる Close #lngFileNo '------------------------------------------------------------------ '配列の内容をテキストボックスに表示 Dim myDat As String myDat = " " For i = 0 To 5 If i = 0 Then '1行目の読み込み及び表示位置の設定 myDat = myDat & myText(i, 0) & " " & _ myText(i, 1) & " " & myText(i, 2) & " " & _ myText(i, 3) & " " & myText(i, 4) & " " & _ myText(i, 5) & vbCrLf '転載禁止 Else myDat = myDat & myText(i, 0) & " " & _ myText(i, 1) & " " & myText(i, 2) & " " & _ myText(i, 3) & " " & myText(i, 4) & " " & _ myText(i, 5) & vbCrLf '転載禁止 End If Next i '読み込んだデータをテキストボックスに表示 Text2.Text = myDat '================================================================== '終了処理 '保存時の問合せを非表示に設定 xlApp.DisplayAlerts = False ' オブジェクトを解放します。 Set xlCells = Nothing Set xlSheet = Nothing xlBook.Close 'Book を閉じる Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub 表示結果 |
|
おことわり エクセルの表をVBに読み込むのなら”VBとエクセル間でデータのやりとり”のようにするか、エクセルでCSV形式で一旦保存してから取り扱った方が楽なようです。エクセルの表をクリップボードにテキスト形式で貼り付けるとタブ区切りとなり、扱いが少しやっかいです。まあこんな事もできるという事で参考にして下さい。 ファイルの取り扱いは テキストファイル(TXT・CSV)の読込・書込み を参考にして下さい。 以前は Split 関数を使わない方法で掲載していたのですが、現在は、VB もVB6.0 主流なので、Split 関数を使って取得しております。(VB6.0 以前の方は動作しません) |