エクセルの表を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 以前の方は動作しません)


2002/04/19
2006/12/11


VBレスキュー(花ちゃん)
Visual Basic6.0  VB6.0