エクセルとVB6の初めての扱い方

このQ&Aのポイント
  • エクセルとVB6の環境について詳しく解説し、初めての方でも分かりやすく説明します。
  • 初めてエクセルを扱う場合に知っておくべきシートの生成方法やセルへの書き込み方法を解説します。
  • エクセルの起動方法とシートの生成に関する質問に対する回答を詳しく説明します。
回答を見る
  • ベストアンサー

エクセルとVB6

環境は OS XP Visual Basic 6 Excel 2003 です。 エクセルを扱うについては、今回初めてです。 ソースです----------------------------------- Dim ex As Object ' Excel.Application Dim wb As Object ' Excel.Workbook Dim ws As Object ' Excel.Worksheet Set ex = CreateObject("Excel.Application") ex.Visible = True 'エクセルを表示する Set wb = ex.Workbooks.Add '空白の新しいブックを追加 Set ws = wb.Worksheets.Add '新しいシートを追加 ws.Name = "XXX " 'シートの名前を設定 'シートのセルに書き込む '構文:Cells(行, 列).Value = 値 ws.Cells(1, 1).Value = "ID" ws.Cells(1, 2).Value = "PS" III% = 2 For x% = 0 To 135 III% = III% + 1 ws.Cells(1, III%).Value = 問D$(x%, 0) Next x% ----------------------------------- エクセルが起動し、挿入されます。 質問1 シート XXXはsheet3としてに挿入され、それ以外にsheet1 sheet2もできています。 これはなぜですか。 質問2 sheet1 sheet2を生成しないようにできますか。 できないようにするには、どうすればいいですか。 全くエクセルは詳しくありません。 お詳しい方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

新規ブックのシート枚数はデフォルトで3枚と決まっていますが、 そのシートの枚数は、任意で1枚以上を指定できますので、 追加されたがSheet3ならシート枚数が2枚に設定されていたのでしょう。 新規ブックは少なくとも1枚はないといけないので、新規ブックをシートなしで開くことはできません。 なので質問の件は、1枚残して他のシートを削除する、という処理になります。 また、新規ブックのシートにデータを入力するわけですから、その為に新しいシートを追加する必要はありません。 で、コードは以下のようになります。 ●●●で囲まれた部分が追加 ▲▲▲のシート追加は不要 '------------------------------------- Private Sub Command1_Click() Dim ex As Object ' Excel.Application Dim wb As Object ' Excel.Workbook Dim ws As Object ' Excel.Worksheet Dim iii%, x% Set ex = CreateObject("Excel.Application") ex.Visible = True 'エクセルを表示する Set wb = ex.Workbooks.Add '空白の新しいブックを追加 '●●●  Dim S As Integer  For S = 2 To wb.Sheets.Count    ex.DisplayAlerts = False    wb.Sheets(2).Delete    ex.DisplayAlerts = True  Next S  Set ws = wb.Sheets(1) '●●● '▲▲▲Set ws = wb.Worksheets.Add 'これは不要 ws.Name = "XXX" 'シートの名前を設定 'シートのセルに書き込む '構文:Cells(行, 列).Value = 値 ws.Cells(1, 1).Value = "ID" ws.Cells(1, 2).Value = "PS" iii% = 2 For x% = 0 To 135 iii% = iii% + 1 ws.Cells(1, iii%).Value = x% Next x% End Sub '------------------------------------ 因みに、wb.Sheets(2).Delete は 左から2番目のシートを削除するコートですが、 シートか何枚あってもこの(2)という数値を変えてはいけません。 それから、ex.DisplayAlerts = False は シートを削除するときはエクセル側から 「シートを削除しますか?」とメッセージを出すので それを表示させないためのものです。 以上。

daikaisan
質問者

お礼

早速のご回答ありがとうございます。 分かりやすく書いていただき、恐縮です。 excelは今回のプログラムぐらいで、あまりいじることもないので、 不勉強でもあり、とても助かりました。

関連するQ&A

  • AccessからExcelへの出力

    質問します。 AccessからExcelへ、VBAで指定セルに指定データを落としこむコーディングをしています。 とあるサイトを参考に、下記のコードを組みましたが、実行すると砂時計のまま動かなくなってしまいます。 何が悪いのでしょうか? SQLでしょうか? 時間がなくて困っています。 何卒よろしくお願いします。(><) Option Compare Database Private Sub output() On Error Resume Next Dim app As Object Set app = CreateObject("Excel.Application") Dim oRs As Recordset Dim strSQL As String Dim Wb As Excel.Workbook Dim Ws As Excel.Worksheet Dim FileName As String Dim Worksheet As String Dim X As Long Dim Y As Long FileName = "C:\nouhinnsyo.xls" 'エクセルのファイル名 Worksheet = "納品書" 'ワークシート名 Set Wb = app.Workbooks.Open(FileName) 'ワークブックの指定 Set Ws = Wb.Worksheets(1) 'ワークシートの指定 strSQL = "SELECT 日付,伝票番号,品番,商品名,出庫数,摘要" strSQL = strSQL & vbCrLf & "FROM 棚卸マスタ" '出力用レコードセット Set oRs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Y = 12 X = 0 Do Until oRs.EOF Ws.Cells(Y, X + 1) = oRs("日付") Ws.Cells(Y, X + 2) = oRs("品番") Ws.Cells(Y, X + 3) = oRs("商品名") Ws.Cells(Y, X + 4) = oRs("出庫数") Ws.Cells(Y, X + 9) = oRs("摘要") oRs.MoveNext Y = Y + 1 Loop oRs.Close Wb.SaveAs FileName 'ファイルの保存 Wb.Close 'ワークブックのクローズ Ex.Quit 'エクセルセッションをクローズする。 Set Ws = Nothing '変数の初期化 Set Wb = Nothing '変数の初期化 Set Ex = Nothing '変数の初期化 Set oRs = Nothing End Sub

  • visual basic 2005 express edition でエクセル操作ってできます?

    もともとエクセルマクロを使用して 業務ツールを作っていたのですが、 visual basic2005になって無料版がでたのでそちらに移行しようかと考えている者です。 ひとつ確認させてください。 VB2005expressでエクセルのセル値を変更するコードを書いたのですが、 "range"や"cell"の頭部分が大文字になりません。 自動表示(?プルダウンで表示される機能)にも、"range""cell"等の出力はされないのですが、 なぜか、小文字のままでも動作はします。 express editionでは、オフィスの操作は正式対応していないのでしょうか? Dim xl As Object 'Excel.Application Dim wb As Object 'Excel.Workbook Dim ws As Object 'Excel.Worksheet xl = CreateObject("Excel.Application") wb = xl.Workbooks.Open(ファイル名) xl.Visible = True ws = wb.Worksheets("Sheet1") ' シート内のセルに文字を書き込む ws.cells(1, 1).Value = "hogehoge" ws.range("A1").offset(1, 2).value = "gogo"

  • EXCELのセルの値を表示する

    VB6.0を使っています。 エクセルのC5のセルに50という値が入っています。 この値をVBのメッセージボックスで見たいのですが 実行して見てみると 「50」ではなく何故か「0」と表示されてしまいます。 どうしてでしょうか? その部分のコードは下です。 Dim Wb As Excel.Workbook Dim Ws As Excel.Worksheet Dim Ea As Excel.Application Dim atai As Integer Set Wb = GetObject("C:\test\test.xls") Set Ea = Wb.Application Set Ws = Wb.Worksheets("Sheet1") atai = Ws.Cells(3, 5) MsgBox (atai)

  • エクセル2003にて指定されたシートを複写するには?(2)

    エクセル2003にて指定されたシートを複写するには?(2) 同じ件で投稿してすみません。エクセル本を読んでも、ネットで探しても 丸2日進んでいないので、投稿させて頂きました。 以前、以下のURLで投稿したものです。 http://okwave.jp/qa/q5930740.html 【回答して頂いた内容】 Sub aaa() Dim Ws1 As Worksheet, Ws2 As Worksheet Set Ws1 = Worksheets("シート1") Set Ws2 = Worksheets("シート2") Dim Endrow As Long, r As Integer Endrow = Ws1.Cells(Rows.Count, 1).End(xlUp).Row For r = 1 To Endrow     Worksheets.Add After:=Worksheets(Worksheets.Count)    ActiveSheet.Name = Ws1.Cells(r, 1).Value    Cells(5, 1).Value = Ws1.Cells(r, 1).Value    Cells(5, 2).Value = Ws1.Cells(r, 2).Value    Cells(5, 3).Value = Ws1.Cells(r, 3).Value Next r Set Ws1 = Nothing Set Ws2 = Nothing End Sub と、ご回答を頂き、想定していた対応が出来ていますが、 問題が2つほどございます。 (1)ひとつは、シート名及びテキストをA列ではなく、J列から持ってくる必要がある。 (2)もうひとつは、1行目はタイトル行なので、2行目から開始する必要がある。 この2点を解消しようと、色々数字を入れて試したのですが、改善できないので、 どなたか、是非、アドバイス・ご享受を宜しくお願い申し上げます。

  • VB.NETの配列にExcelから読み込んできたデータを格納したい

    今回もお世話になります。 VisualBasic.NETでプログラムを作っています。 Excelからデータを読み込んで配列に格納したいのですが、どうしてもうまくいきません。 原因とその解決法を教えていただけないでしょうか? また、他の解決法や参考にできるサイトがあれば教えていただきたいです。 Excel,VB.NETともに2003を使っています。 以下エラー内容 -------------------- 'System.NullReferenceException' のハンドルされていない例外が 重度障害者用入力装置自動選択システム.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 -------------------- 以下ソースです -------------------- Option Explicit On Imports Microsoft.Office.Interop Public Class Form2 Inherits System.Windows.Forms.Form Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xl As Object 'Excel.Application Dim wb As Object 'Excel.Workbook Dim ws As Object 'Excel.Worksheet xl = CreateObject("Excel.Application")  wb = xl.Workbooks.Open("C:\abc.xls") xl.Visible = True ws = wb.Worksheets("Sheet1") 配列(1, 1, 1) = xl.Cells(2, 1).Value ←ここでエラーが出る 配列(1, 1, 2) = xl.Cells(2, 2).Value 配列(1, 1, 3) = xl.Cells(2, 3).Value 状態表示テキストボックス.Text = "配列(1, 1, 1) = " & 配列(1, 1, 1) & "と" _ & "配列(1, 1, 2) = " & 配列(1, 1, 2) & "と" _ & "配列(1, 1, 3) = " & 配列(1, 1, 3) xl = Nothing wb = Nothing ws = Nothing End Sub End Class -------------------- 回答よろしくお願いします。

  • VBAでエクセルをシート名を気にせず読み込むには?

    ACCESS2000のVBAでエクセルを読んでいるプログラムを作成しています。 今までは、その受け取っているエクセルのシート名が固定だったのですが、次回からシート名が可変になります。そこで相談なのですが、シート名が可変でも読み込む方法はありますか。ちなみにシートは1つです。(インポート以外でお願いします。) 現在のコーディング例 一部抜粋 Dim wb As Workbook 'ワークブック Dim ws As Worksheet 'シート 'マスタのExcelファイルを開く Set wb = Workbooks.Open("test") Set ws = wb.Worksheets("SHEET1") <=ここが可変になります。 i = 0 Do Until IsEmpty(ws.Cells(StartRow + i, StoreNoCol)) nohindate = ws.Cells(StartRow + i, 2) '日 i = i + 1 Loop 宜しくお願いします。

  • エクセルVBAで読み取りパスワード回避

    エクセル2010です。 以下のコードで任意のフォルダ内のエクセルBOOKから所定のデータを取得できます。 しかし、指定フォルダ内に読み取りパスワードが設定されたものがあると、開くことができずに止まってしまいます。 読み取りパスワードが同一で、事前に分かっていればコードにPassword:="AAAABBBB" などと書き入れればいいと思うのですが、事前にはわかりませんし、パスワードもそれぞれ異なります。 そこで、開けなかった場合には、そのBOOKを飛ばしてすすみ、別シートに飛ばしたBOOK名を記録しておきたいのです。 (BOOK作成者にあとからパスワードを聞くため) しかし、残念ながらどのように書けばいいのか思いつきません。 ご指導いただければ幸いです。 Sub TEST001()   Dim wb(1) As Workbook   Dim ws(1) As Worksheet   Dim myFdr As String, fn As String   Dim i As Long   With Application.FileDialog(msoFileDialogFolderPicker) 'フォルダ指定     If .Show = True Then        myFdr = .SelectedItems(1)     Else       Exit Sub     End If   End With   Application.ScreenUpdating = False '画面更新を一時停止   Set wb(0) = ThisWorkbook 'このコピー先ブックをwb(0)とする。   Set ws(0) = wb(0).Sheets(1) 'wb(0)の1枚目のシートをws(0)とする。   fn = Dir(myFdr & "\*.xls*") 'フォルダ内のExcelブックを検索   Do Until fn = Empty '全て検索     Application.EnableEvents = False     Set wb(1) = Workbooks.Open(myFdr & "\" & fn, UpdateLinks:=False, ReadOnly:=True) 'そのブックを開きwb(1)とする。     Set ws(1) = wb(1).Worksheets(1)     i = i + 1     ws(0).Cells(i, "A").Value = ws(1).Range("B2") 'ws(0)に転記     ws(0).Cells(i, "B").Value = wb(1).Name     ws(0).Cells(i, "C").Value = ws(1).Name     wb(1).Close (False) '保存せず閉じる     Application.EnableEvents = True     fn = Dir 'フォルダ内の次のExcelブックを検索   Loop '繰り返す   Application.ScreenUpdating = True '画面更新停止を解除   MsgBox i & "個取得" End Sub

  • VBA(エクセル)で教えて下さい。開いていないBOOKの貼り付け

    VBA(エクセル)で教えて下さい。開いていないBOOKのシートを開いているBOOKのシートに貼り付けで、開いているBOOKから開いていないBOOK名を指定したいのですが、 現在開いているエクセルです。 SHEETS(Type)のRANGE(A1)に閉じているBOOK名を入力します。 SHEETS(In)に閉じているBOOKのSHEETSを貼り付けたいのですが、 Ex = Sheets("Type").Range("A1")  が無いと閉じているEx.xlsを貼り付けます。 このExと言うBOOK以外も多々コピーしたいのですが、どのように書けば良いか分からず、 是非、教えて下さい。 Sub a1() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("In").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select 'If Worksheets(1).Name = "STEP1" Then ' Worksheets(1).Activate ' Cells.ClearContents ' Else 'Worksheets.Add(Before:=Worksheets(1)).Name = "一覧" 'End If   Ex = Sheets("Type").Range("A1")   Set wsSrc = ActiveSheet Workbooks.Open "C:\WINDOWS\デスクトップ\test\Ex.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub

  • VBAエクセルにて開いてないエクセルシートを開いてるシートに所得

    お世話になります。 「同じフォルダー内にBOOKが2つ有ります。1つ(AK.xls)を立上げて もう1つの(EX.xls)を立上げずに、EX.xls内のSheet1をコピーして AK.xlsのシート(STEP1)に貼り付けようとしています。」 どうしてもエラーが出てしまいます。 何方か、分かる方教えて下さい。 また記述して戴ければもっと助かります。 エラーは”1004”EX.xlsが見つかりません。と出てしまいます。 Sub ST() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("STEP1").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select   Set wsSrc = ActiveSheet Workbooks.Open "EX.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub デバックでは Workbooks.Open "EX.xls"この部分が黄色になります。 是非、回答を宜しくお願い致します。

  • ExcelVBAの転記(1つのひな形へ複数シート)

    お世話になります。ExcelVBAを少し学んだ程度の者です。 1つのExcelファイルに複数存在する個別のシートから、1つのひな形シートへ転記する方法に頭を悩ませております。イメージとしては名簿管理のようなものとご理解してください。 複数存在するシート(約200シート)には、項目名に対するデータ(例えば、名前や住所などが定められたセルに入力されています)が揃っておりますが、書式の変更によりひな形のシートへ転記する必要があります。 200ほどのシートには、M10セルには名前が、B15セルには住所、C16セルには電話番号が……という具合に入力されています。これらのデータをひな形シートでは、N5セルに名前、C13セルに住所、D14セルには電話番号などを転記する必要があります(セル番地は適当です)。 ひな形シートは1枚で、マクロを実行する際にひな形シートをコピーして(Xとします)、200ほどの個別のシート(A、B、C……)を転記しようと思っております。A、B、C……に入力された複数の値は項目別にCells(i,j).Valueを、XへCells(x,y).Valueへ転記すれば良いと考えておりましたが、上手くいきません。ひな形をコピーしたXのシートへ上手く転記ができず、Aを転記したシートばかりが量産され、B、C以降のシートへ制御が移っていないようです。恐らく、Workwsheetオブジェクトのカウンタ変数に問題があると思われます。 VBAのコードとしては下記のように記述しております。 Sub SheetCopy() Application.ScreenUpdating = False Dim cnt As Long 'シート数カウント変数 Dim i As Long 'シート用のカウンタ変数 Dim wb As Workbook 'コピー元 Dim ws1 As Worksheet 'コピー元 Dim ws2 As Worksheet 'コピー先 '1がコピー元で2がコピー先 cnt = Worksheets.Count 'シート数をカウント i = 2 Set wb = Workbooks("転記用.xlsm") Set ws1 = wb.Worksheets(i) Set ws2 = wb.Worksheets("ひな形") For i = 1 To cnt ws2.Copy after:=Worksheets(i) Set ws2 = wb.Worksheets(i) ws2.Cells(2, 2).Value = ws1.Cells(2, 13).Value '名前 ws2.Cells(3, 2).Value = ws1.Cells(6, 10).Value '住所 以下、同様の転記処理を記述しています。 Next i End Sub 上記のコードを、パッと見たところ、コピーはしているものの、転記先がコピー元になっているのも原因だと思います(コピー先へ転記する方法が現時点でわかりかねます……ここがネックだと考えております)。 ご知見のある方々から、アドバイスをいただけると幸いです。 どうぞ、よろしくお願い申し上げます。