セルにデータ及び式を入力する(VB6.0 基本編) (No.1の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/08 15:21
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:データを入力する,数式を入力する,関数を入力する * ***********************************************************************************
基本的な事であるわりには、Cells プロパティの使用方法を間違って使用されている場合が 多いので書いておきます。
----------------------------------------------------------------------------------- セルにデータ及び式を入力する - 花ちゃん 2007/08/08 -----------------------------------------------------------------------------------
テスト環境の基本設定 のコードの[Excel 操作部分]を下記のコードと入れ替えて下さい。
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分 ' Excel のセルに値を代入します。 xlSheet.Cells(1, 1).Value = "12" xlSheet.Cells(2, 1).Value = "34" 'Formula プロパティを使ってセルに式を挿入します。 xlSheet.Cells(3, 1).Formula = "=A1+A2"
xlSheet.Range("B1").Value = 12 xlSheet.Range("B2").Value = 34 xlSheet.Range("B3").Value = "=sum(B1:B2)"
xlSheet.Range(xlSheet.Cells(1, 3), xlSheet.Cells(1, 3)).Value = 12 xlSheet.Range(xlSheet.Cells(2, 3), xlSheet.Cells(2, 3)).Value = 34 xlSheet.Range(xlSheet.Cells(3, 3), xlSheet.Cells(3, 3)).Value = "=sum(C1:C2)"
'下記でもエラーが表示されずに同じように答えも求められますが 'プロセスが残ったままになります。 'プログラムを終了するとプロセスも解放されるので勘違いする人もあるようです。 ' xlSheet.Range(Cells(1, 4), Cells(1, 4)).Value = 12 ' xlSheet.Range(Cells(2, 4), Cells(2, 4)).Value = 34 ' xlSheet.Range(Cells(3, 4), Cells(3, 4)).Value = "=sum(D1:D2)" '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
上記のコードのコメントを外して試して見て下さい。
上記コードがじっこうされ、Excel が閉じた後に(VB は起動状態のまま)プロセスが 解放されているか確認して見て下さい。
|
セルのカラーを設定及び取得・カラー値の変換(VB6.0 基本編) (No.2の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/08 15:45
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:書式設定,カラー,色,セル色,, * ***********************************************************************************
元質問: VBからエクセルのセルの色指定 - 今回匿名 2001/06/23 19:21 No.2333 既存のエクセルのセルに何色がついているか判断する方法を教えてください。
元質問: Excelで色の判別 - VAL 08/23-09:44 No.159 VB6でExcelを操作したいのですが、セルの色を判断することはできないのでしょうか?
----------------------------------------------------------------------------------- RE:VBからエクセルのセルの色指定 - 花ちゃん 2001/06/24 1:05 No.2336 ----------------------------------------------------------------------------------- ヘルプにもここにも載っていますよ! まず自分で解かる範囲は調べましょう Color とか RGB とかをヘルプで見るとか! MyColor = xlSheet.Range("A1:A1").Interior.Color xlSheet.Range("A3:A4").Interior.Color = MyColor
----------------------------------------------------------------------------------- セルのカラーを設定及び取得・カラー値の変換 - 花ちゃん 2007/08/08 -----------------------------------------------------------------------------------
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(セルのカラーを設定・取得) With xlSheet.Range("G2").Interior 'セルのカラーを設定する下記のどの方法でも可 .Color = QBColor(10) .Color = RGB(255, 0, 255) .Color = vbMagenta .ColorIndex = 20 .Color = 255 .ColorIndex = xlNone 'セルの色(内部色)を標準にする End With Dim co As Long, i As Integer, r As Integer, g As Integer, b As Integer 'ColorIndex 値の一覧を表示 For i = 1 To 56 'セルに色を設定 xlSheet.Cells(i, 1).Interior.ColorIndex = i 'セルの色を取得 co = xlSheet.Cells(i, 1).Interior.Color 'セルの色を長整数型(Long)で表示 xlSheet.Cells(i, 2).Value = co '16進表記に変換表示 xlSheet.Cells(i, 3).Value = "&H" & Hex(co) 'RGB 値表記に変換 r = co And vbRed g = (co And vbGreen) \ &H100 b = (co And vbBlue) \ &H10000 'セルの色をRGB値で表示 xlSheet.Cells(i, 4).Value = "RGB(" & r & "," & g & "," & b & ")" Next i '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
----------------------------------------------------------------- ColorIndex 値の一覧を表示した画像 http://hanatyan.sakura.ne.jp/samplepic/excel-1-1.gif
|
Excelのシートに画像を表示及びサイズ変更(VB6.0 基本編) (No.3の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/09 14:17
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:画像,イメージ,クリップボード * ***********************************************************************************
元質問:VBからExcelのシートへ画像転送 - ogaway 2002/08/21-11:28 No.92
VBからExcelのシートへ画像を貼り付けたいと思います。 詳細はVBのフォームにイメージコントロールか、ピクチャーコントロールに表示されている画像を、Excelのシートのあるセルに転送したいと思っています。
----------------------------------------------------------------------------------- Excelのシートに画像を表示及びサイズ変更 - 花ちゃん 2007/08/08 -----------------------------------------------------------------------------------
1.Pictureオブジェクトを使って表示 Excel2002 からの機能です。簡単だけど画像サイズが元のサイズより大きく表示される (この事はExcel上で画像を呼び込んでも同じである。)
2.クリップボード経由での貼付け こちらは元のサイズで表示します。
3.Excel上に表示したPictureにVBから指定の画像を表示する方法です。 予め、Excelファイル内にマクロを作成しておきそのマクロをVBから操作する
4.Excel上に表示した画像を拡大表示する
5.Excel上に表示した画像を縮小表示する
----------------------------------------------------------------------------- 上記サンプルコードは、当サイト内に掲載しております。 http://hanatyan.sakura.ne.jp/vbhlp/Excel12.htm
----------------------------------------------------------------------------- 元質問:EXCELに画像貼り付け - もんきい 2002/10/22-16:22 No.1098 ----------------------------------------------------------------------------- エクセルのテンプレートの特定のセルに、画像を貼り付けたいのですが、特定の位置に張り付けの指定方法が解りません。
----------------------------------------------------------------------------- Re: EXCELに画像貼り付け - A221 2002/10/22-17:24 No.1099 ----------------------------------------------------------------------------- Private Sub Form_Load() Dim strExcelFile As String Dim objExcelbook As Excel.Workbook
strExcelFile = "C:\test.xls" Set objExcelbook = GetObject(strExcelFile, "Excel.Sheet") 'セルに画像を貼り付け
objExcelbook.Windows(1).Visible = True objExcelbook.ActiveSheet.Range("F10").Select objExcelbook.ActiveSheet.Pictures.Insert("C:\aalogo.bmp").Select
End Sub
|
保存確認のメッセージを表示させない(VB6.0 基本編) (No.4の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/16 23:27
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:保存時,終了時,ダイアログ, * ***********************************************************************************
元質問:EXCELの上書きしますかを出さない方法 - けんじ 2002/08/27-20:00 No.244
VBから既存のEXCELシートを起動しデータをセットしてから保存するプロプラムを作成しました。 しかし、保存する時に「この場所に〜既にあります置き換えますか?」のメッセージBOXが表示 されてしまします。メッセージを出さず、上書き保存する方法は無いでしょうか
----------------------------------------------------------------------------------- 保存確認のメッセージを表示させない - 花ちゃん 2007/08/08 ----------------------------------------------------------------------------------- 当サイト内や過去のログにも掲載されてはいるのですが、質問が多いのでここにも掲載して おきます。
保存処理をするまでに下記の1行を、どこかに記入して下さい。 xlApp.DisplayAlerts = False
と書いておいたら起動する前に書かれた方もあったので具体例を下記に書いておきます。
'================================================================== '終了処理 '保存時の問合せを非表示に設定 xlApp.DisplayAlerts = False '下記の保存処理の直前に書いて下さい。 'Worksheet を名前をつけて保存します 'xlSheet.SaveAs xlFilePath 'オブジェクトを解放します Set xlSheet = Nothing xlBook.Close 'Book を閉じる Set xlBook = Nothing xlApp.Quit 'Quit メソッドを使って Excel を終了します。 Set xlApp = Nothing End Sub
|
セルの書式設定を設定する(VB6.0 基本編) (No.5の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/10 19:31
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:書式設定,文字列,日付,桁区切り * ***********************************************************************************
元質問:VBからExcelセルの書式指定 - StepJun 2002/08/26-00:46 No.200 VBよりExcelセルに値を設定したときにセル書式を設定したいのです。 表示書式の初期値は”標準”になっていますが、数値を文字列として表示したいのですが、小さい数字はよいのですが、20桁ぐらいの数値を代入するとエラー表示されます。 表示スタイルを文字列に指定するのはどうしたらよいですか?
----------------------------------------------------------------------------------- Re: VBからExcelセルの書式指定 - あき☆彡 2002/08/26-02:09 No.201 -----------------------------------------------------------------------------------
エクセルのマクロ記録を有効に使うと良いです(^o^)/
エクセルでマクロ記録を開始して、 表示スタイルを文字列にすると ------------------------- Range("B3").Select Selection.NumberFormatLocal = "@" ------------------------- と書かれています。
表示スタイルを文字列にするには、 NumberFormatLocalプロパティに"@"を設定すれば良い事が分かります。
----------------------------------------------------------------------------------- セルの書式設定を設定する - 花ちゃん 2007/08/09 ----------------------------------------------------------------------------------- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(セルの書式を設定する)
xlSheet.Range("A:A").NumberFormat = "@" '文字列の場合はこちらでも可 'NumberFormatLocal プロパティは、コード実行時の言語の文字列で設定したい時に使用します。 xlSheet.Range("B:B").NumberFormatLocal = "@" '文字列
xlSheet.Range("B2:B3").NumberFormatLocal = "G/標準" '標準 xlSheet.Range("C:C").NumberFormatLocal = "yyyy""年""m""月""d""日""" '日付 2007年8月9日 xlSheet.Range("D:D").NumberFormatLocal = "#,##0_ " '数値で桁区切り
'NumberFormat プロパティ と NumberFormatLocal プロパティの表示形式の文字列は、Format '関数で使う表示形式の文字列とは異なります。 '表示形式の文字列は、メニュー →書式→表示形式→分類のリストのユーザ定義を選択した時に 'コンボボックスに表示される書式の文字列が使用できます。
'NumberFormat プロパティ と NumberFormatLocal プロパティ 共 [97][2000][2002][2003] で '使用可能です。
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
列幅を取得・設定・セルの文字列長に合て列幅を設定(VB6.0 基本編) (No.6の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/09 11:11
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:列幅,列の幅,自動設定,オートフィット * ***********************************************************************************
元質問: Excelの列幅を設定したいです。 - ゆうや 2002/10/08-18:12 No.917
Excelで列幅(行幅)をダブルクリックすると、セル内容にあわせて自動的に幅を変更できますが、VBからExcelに対してこれをやりたい時、何かコマンドで一発実行できるのでしょうか。
----------------------------------------------------------------------------------- Re: Excelの列幅を設定したいです。 - batchman 2002/10/09-08:58 No.932 ----------------------------------------------------------------------------------- SheetオブジェクトのColumnsプロパティで列のRangeオブジェクトを取得して、AutoFitメソッド実行すれば出来ますよ。
----------------------------------------------------------------------------------- 列幅を取得・列幅を設定・セルの文字列長に合せて列幅を設定 - 花ちゃん 2007/08/09 ----------------------------------------------------------------------------------- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(列幅を取得・列幅を設定・セルの文字列長に合せて列幅を設定する) '列幅を取得(列幅の単位は、標準スタイルの 1 文字分の幅に相当します。 'プロポーショナル フォントでは、数字の 0 の幅が列幅の単位になります) Debug.Print xlSheet.Range("A:X").ColumnWidth '8.38(72ピクセル) '列幅を取得(ポイント単位) Debug.Print xlSheet.Range("A:X").Width '1296 'A列〜X列までの列幅を20に設定 xlSheet.Range("A:X").ColumnWidth = 20 '仮データを入力 xlSheet.Range("B1:G1").Value = 1234567 '仮データの文字列長に合せて列幅を自動調整 xlSheet.Range("B:G").Columns.AutoFit '下記でも設定できますが、上記が正しいようです。 ' xlSheet.Columns("B:G").AutoFit
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
シート数・シート名の取得及びシートの追加・削除(VB6.0 基本編) (No.7の個別表示) [スレッド一覧へ] |
- 日時: 2008/07/19 14:11
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:シート数,シート名,追加・削除,シート名の一覧 * ***********************************************************************************
元質問:VBからExcelシートを操作したいのですが。 - ゆうや 2002/10/04-17:52 No.847
VBから新規Bookを作って、データを書き込んで保存したいのですが、Sheetの枚数を追加、削除したいと思っているのですが、よく分かりません。 あと、同時に、Sheet名をVBから変更したいのですが、方法が分かりません。
----------------------------------------------------------------------------------- Re: VBからExcelシートを操作したいのです.. - Say 2002/10/05-00:53 No.850 ----------------------------------------------------------------------------------- Excel Object 操作のコードがわからないときは、Excelで「新しいマクロの記録」を用いて 一連の操作をやってみる、というのは常道手段です。
Sheets → WorkSheets に置き換える必要があったりしますから、得られるコードはあくまで参考資料に過ぎませんが・・・。
----------------------------------------------------------------------------------- シート数・シート名の取得及びシートの追加・削除 - 花ちゃん 2007/08/09 ----------------------------------------------------------------------------------- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(シート数・シート名の取得及びシートの追加・削除) Dim xlSheet1 As Excel.Worksheet 'シート数の取得 Debug.Print xlBook.Worksheets.Count '3 '新規にシートを追加 Set xlSheet1 = xlBook.Worksheets.Add '追加したシートの名前を取得 Debug.Print xlSheet1.Name 'Sheet4 '追加したシートの名前を変更 xlSheet1.Name = "Test1" '変更したシート名を取得(確認) Debug.Print xlSheet1.Name 'Test1 'シート数を取得 Debug.Print xlBook.Worksheets.Count '4 '追加したシートを削除 xlBook.Worksheets("Test1").Delete 'シート数を取得 Debug.Print xlBook.Worksheets.Count '3 'シート名の取得 Dim Sheet As Excel.Worksheet For Each Sheet In xlBook.Worksheets Debug.Print Sheet.Name Next
'----------------------------------------------------------------------- '新規にBook を開いた時に表示したいシート数を設定する場合 'Excelのツール→オプション→全般→新しいブックのシート数 の設定と同じ
xlApp.SheetsInNewWorkbook = 1 'Book をオープンする前に書いて下さい。 '-----------------------------------------------------------------------
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
Excelの関数の使用例及び入力済み範囲の取得・他(VB6.0 基本編) (No.8の個別表示) [スレッド一覧へ] |
- 日時: 2013/07/21 07:45
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:シート数,シート名,追加・削除,シート名の一覧 * ***********************************************************************************
元質問: Excelの関数の使い方について - 秋風 2002/11/12-11:16 No.1335
Excelで、データを読み込ませた後、データ値のMIN値を出したいのですが、どのように範囲選択するのか分かりません。 データ表は、 A(MIN値) B C D E F 1 4 4 5 8 9 2 3 3 5 9 3 1 7 1 6 4 3 のような感じでA列にMIN値をオートで入れたいのです。
データ値(列に入る)と行数が可変なものですから、Rangeの所で、":"がうまく使用できません。列に関しては、256まで全て選択で固定させようと思っています。
----------------------------------------------------------------------------------- Re: Excelの関数の使い方について - A221 2002/11/12-11:59 No.1336 ----------------------------------------------------------------------------------- Rangeの指定は文字列ではなかったかと。セルにまんま式を入れてしまう方法です。 #動作の確認はしていません。
Dim Col As Long Dim Row As Long Dim MinRange As String 'Rows=データの行数 For i=0 To Rows Col = lngkikakugyou - 1 minrange = "B" & i & ":" & Code2Alphabet(Col) & i xlSheet.Cells(i, 1).Value = "=Min(" & minrange & ")" Next i
Public Function Code2Alphabet(ByVal X As Long) As String Dim Lcode As String Dim Scode As String If (X \ 27) Then Lcode = Chr$(64 + ((X + (X \ 27)) \ 27)) X = (X Mod 27) + (X \ 27) Scode = Chr$(64 + (X Mod 27)) Code2Alphabet = Lcode + Scode End Function
----------------------------------------------------------------------------------- Excelの関数の使用例及び入力済み範囲の取得・他 - 花ちゃん 2007/08/09 ----------------------------------------------------------------------------------- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(Excelの関数の使用例及び入力済み範囲の取得・他) 'テスト用データの作成及び入力(Range オブジェクトを使ってのデータの入力例) Dim xlRange As Excel.Range Dim Dat(1 To 3, 1 To 6) As Variant Dat(1, 1) = 4: Dat(1, 2) = 4: Dat(1, 3) = 5: Dat(1, 4) = 8: Dat(1, 5) = 9: Dat(1, 6) = "" Dat(2, 1) = 3: Dat(2, 2) = 3: Dat(2, 3) = 5: Dat(2, 4) = 9: Dat(2, 5) = "": Dat(2, 6) = "" Dat(3, 1) = 1: Dat(3, 2) = 7: Dat(3, 3) = 1: Dat(3, 4) = 6: Dat(3, 5) = 4: Dat(3, 6) = 3 'R1C1形式の数値で指定したアドレスをA1形式に変換する関数を使用 Set xlRange = xlSheet.Range(ToA1Style(1, 1, 6, 3)) 'データの入力セル範囲 xlRange.Value = Dat 'セルへデータの入力 'データの入力範囲の取得 '指定のセル位置を含む空白行と空白列に囲まれた最小のセル範囲を取得 'Activateなセル("A1")があるActivateセル領域を選択します。 xlSheet.Range("A1").Activate xlApp.ActiveCell.CurrentRegion.Select '---------------------------------------------- 'Address プロパティでその範囲を A1 形式で取得。 xlSheet.Cells(5, 1).Value = "セル A1 があるActivateセル領域は " & _ xlApp.ActiveCell.CurrentRegion.Address(False, False, xlA1) & _ " の範囲です。" 'A1:F3 '---------------------------------------------- 'xlSheet 上の使用済みのセル範囲を取得 xlSheet.Cells(6, 1).Value = "使用済みセル領域は " & _ xlSheet.UsedRange.Address(False, False, xlA1) & " です。" 'A1:F5
'----------------------------------------------- 'Excel の関数の使用例(Excel 標準の取得値と同じです) 'データの個数を取得 xlSheet.Cells(8, 1).Value = "個数" xlSheet.Cells(8, 2).Value = "=COUNT(" & ToA1Style(1, 1, 6, 3) & ")" '15 'データの最小値を取得 xlSheet.Cells(9, 1).Value = "最小値" xlSheet.Cells(9, 2).Value = "=MIN(" & ToA1Style(1, 1, 6, 3) & ")" '1 'データの最大値を取得 xlSheet.Cells(10, 1).Value = "最大値" xlSheet.Cells(10, 2).Value = "=MAX(" & ToA1Style(1, 1, 6, 3) & ")" '9 'データの合計を取得 xlSheet.Cells(11, 1).Value = "合計" xlSheet.Cells(11, 2).Value = "=SUM(" & ToA1Style(1, 1, 6, 3) & ")" '72 'データの平均値を取得 xlSheet.Cells(12, 1).Value = "平均" xlSheet.Cells(12, 2).Value = "=AVERAGE(" & ToA1Style(1, 1, 6, 3) & ")" '4.8 72÷15 '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
'セルのアドレスの形式をA1形式に変換する関数 Private Function ToA1Style(ByVal C1 As Integer, ByVal R1 As Integer, _ ByVal C2 As Integer, ByVal R2 As Integer) Dim i As Integer, A1 As String, A2 As String i = Int((C1 - 1) / 26) A1 = IIf(C1 > 26, Chr$(64 + i), "") i = C1 - 26 * i A1 = A1 & Chr$(64 + i) i = Int((C2 - 1) / 26) A2 = IIf(C2 > 26, Chr$(64 + i), "") i = C2 - 26 * i A2 = A2 & Chr$(64 + i) ToA1Style = A1 & R1 & ":" & A2 & R2 End Function
------------------------------------------------------------ 上記の実行結果 http://hanatyan.sakura.ne.jp/samplepic/excel-8-1.gif
注意 ----------------------------------------------------------------------------------- 上記のセルのアドレスの形式をA1形式に変換する関数は、Excel 2007 では、703列目以降の 列で、正しい値が返らないようです。 (普通は、700列以上のセルを使用する事は無いと思いますが) その場合は、下記のリンクの魔界の仮面弁士さん作の関数を使わせて頂いて下さい。 http://yaplog.jp/orator/archive/77
|
Excel ファイルを読み取り専用で開く(VB6.0 基本編) (No.9の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/16 13:18
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:オープン,開く,読み取り専用,リードオンリー * ***********************************************************************************
元質問:Excelを読み取り専用で開く - かず 2003/01/24-18:47 No.2409
排他的に人がつかんでるExcelファイルを読み取り専用で開きたいと思っております。
EXCELファイルを読み取り専用で開くには - まっぴー 2005/01/21-13:59 No.1695
----------------------------------------------------------------------------------- Re: Excelを読み取り専用で開く - 花ちゃん 2003/01/24-19:26 No.2413 -----------------------------------------------------------------------------------
Excel の起動処理の部分を下記に変更して見て下さい。
'------------------------------------------------------------------------------------ ' Excel の起動処理(既存のファイルを使用する場合) ' オブジェクトへの参照を格納する変数を宣言 (事前バインディング) Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlFilePath As String xlFilePath = "c:\Test.xls" Set xlApp = CreateObject("Excel.Application") 'Open メソッド の引数に ReadOnly:=True を指定すれば、読み取り専用で開けます。 'Open メソッド の引数 はExcel のバージョンにより違いがありますので注意して '下さい。特に参照設定を外して、実行時バインディング(レイトバインディング)で '使用されているような場合は注意して下さい。 Set xlBook = xlApp.Workbooks.Open(xlFilePath, ReadOnly:=True) Set xlSheet = xlBook.Worksheets(1) xlApp.Visible = True '------------------------------------------------------------------------------------
因みに、ReadOnly で開いても書込み及び名前を付けて保存はできますが、上書き保存は 出来ません。 又、パスワードの設定も同様に、Open メソッド の引数で指定するば実行できます。
|
セルに同じ数式を入れるには(行の横計等を求める場合)(VB6.0 基本編) (No.10の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/10 15:16
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:同じ式,式をコピー,小計,合計 * ***********************************************************************************
元質問:Excel の列に同じ数式を入れたい場合は? - チョコ 2003/01/24-20:43 No.2417
| A B C ------------- 1 | 1 5 2 | 2 6 3 | 3 7
という数値があって C1=A1+B1 , C2=A2+B2 , C3=A3+B3 という数式を入れるプログラムにしたいのですが、
----------------------------------------------------------------------------------- Re: Excel の列に同じ数式を入れたい場合は.. - 魔界の仮面弁士 2003/01/25-00:14 No.2420 ----------------------------------------------------------------------------------- xlsSheet.Range("C1:C3").FormulaR1C1 = "=RC[-2]+RC[-1]"
----------------------------------------------------------------------------- Excel 上なら範囲を選択して、Σ で一発なのでマクロを取ってみると内部では別々に 求めているようで下記より複雑でした。 ---- by 花ちゃん ---- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(Excelの関数の使用例同じ式を入れたい) Dim xlRange As Excel.Range Dim Dat(1 To 3, 1 To 4) As Variant Dat(1, 1) = 4: Dat(1, 2) = 4: Dat(1, 3) = 5: Dat(1, 4) = 8 Dat(2, 1) = 3: Dat(2, 2) = 3: Dat(2, 3) = 5: Dat(2, 4) = 9 Dat(3, 1) = 1: Dat(3, 2) = 7: Dat(3, 3) = 1: Dat(3, 4) = 6 Set xlRange = xlSheet.Range(ToA1Style(1, 1, 4, 3)) xlRange.Value = Dat '縦計を求める xlSheet.Range("A4:D4").FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" '横計を求める及び総合計を求める xlSheet.Range("E1:E4").FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
行・列・セルの挿入及び行・列・セルの削除(VB6.0 基本編) (No.11の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/10 23:44
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:書式設定,カラー,色,セル色,, * ***********************************************************************************
元質問: VBからExcelに行を挿入 - ニキ 2003/02/25-11:50 No.2879
既存のexcelファイルの任意の行にを行を挿入し表等を描画する事は可能なのでしょうか? データのやりとりや、セルに値を入れるのはわかるのですが、行を挿入するというのがわかりません。
----------------------------------------------------------------------------------- 行・列・セルの挿入及び行・列・セルの削除 - 花ちゃん 2007/08/10 ----------------------------------------------------------------------------------- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(行・列・セルの挿入及び行・列・セルの削除) '何も記入していないと解らないので仮データを記入 Dim i As Long For i = 1 To 20 xlSheet.Cells(1, i).Value = i xlSheet.Cells(i, 1).Value = i xlSheet.Cells(i, 3).Value = i Next i '--------------------------------------------------------- '4行目と5行の間に1行挿入します。 xlSheet.Rows(5).Insert xlSheet.Rows(5).Insert shift:=xlShiftDown '上記と同じ(有効にならない) '4行目と5行の間に1行挿入します。 '下記の場合は、"A1" のように指定するとセルの挿入になる xlSheet.Range("5:5").Insert '下記の場合は、"B5" として行の挿入になる xlSheet.Range("B5").EntireRow.Insert '4列目と5列の間に1列挿入します。 xlSheet.Columns(5).Insert xlSheet.Range("E:E").Insert xlSheet.Range("E:E").EntireColumn.Insert 'C列の5行目にセルを挿入します。 xlSheet.Range("C5").Insert 'C列の5行目のセルを右に挿入します。 xlSheet.Range("C5").Insert shift:=xlShiftToRight '5行目を削除します。 xlSheet.Rows(5).Delete xlSheet.Range("5:5").Delete xlSheet.Range("A5").EntireRow.Delete '5列目を削除します。 xlSheet.Columns(5).Delete xlSheet.Range("E:E").Delete xlSheet.Range("E:E").EntireColumn.Delete 'C列の5行目にセルを削除します。 xlSheet.Range("C5").Delete '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
Insert メソッド Delete メソッド の引数 CopyOrigin は、[97][2000]では使用できません。
EntireRow プロパティ EntireColumn プロパティ は、指定したセル範囲を含む行又は、 列全体を扱う場合に使用します。
|
複数のCSVファイルを1つのBookに読み込む(VB6.0 基本編) (No.12の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/11 20:46
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:オープン,開く,CSVファイル,まとめる * ***********************************************************************************
元質問:複数のCSVデータ⇒XLSブック - Blue 2003/05/30-17:12 No.4200 CSVデータを1枚のXLSシートのように扱ってブックにすることはできないでしょうか?
----------------------------------------------------------------------------------- Re: Excelを読み取り専用で開く - 花ちゃん 2003/01/24-19:26 No.2413 ----------------------------------------------------------------------------------- ひとつにまとめるだけなら、こんな方法も
Private Sub Command1_Click() Dim AFilePath As String Dim BFilePath As String Dim CFilePath As String AFilePath = App.Path & "\AFile.CSV" & " + " BFilePath = App.Path & "\BFile.CSV" & " " '半角スペースを付加 CFilePath = App.Path & "\CFile.CSV" Shell "command.com /c copy " & AFilePath & BFilePath & CFilePath, 0 End Sub
----------------------------------------------------------------------------------- 元質問:一つのBookで複数のCSVを読み込む - TOM 2005/01/13-18:25 No.1573 ----------------------------------------------------------------------------------- a.csv、b.csvという二つのCSVファイルがあります。 Sheet1にa.csvを、Sheet2にb.csvを読み込みたいのですがどのようにすればいいのでしょうか?
----------------------------------------------------------------------------------- Re: 一つのBookで複数のCSVを読み込む - Say 2005/01/14-03:52 No.1583 ----------------------------------------------------------------------------------- 各WorksheetオブジェクトのQueryTables.Add メソッドで可能ではないかと。
----------------------------------------------------------------------------------- 複数のCSVファイルを1つのBookに読み込む - 花ちゃん 2007/08/11 ----------------------------------------------------------------------------------- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(複数のCSVファイルを1つのBookに読み込む) Dim CSVFile(1 To 3) As String CSVFile(1) = "c:\Test1.CSV" CSVFile(2) = "c:\Test2.CSV" CSVFile(3) = "c:\Test3.CSV" Dim AllTextFormat(255) As Integer Dim i As Long For i = 0 To 255 AllTextFormat(i) = 2 '全ての列を文字列型にする為の配列 Next i For i = 1 To 3 'ファイル数分シートがあるかを調査 If xlBook.Worksheets.Count >= i Then Set xlSheet = xlBook.Worksheets(i) Else '無ければシートを追加 Set xlSheet = xlBook.Worksheets.Add End If With xlSheet.QueryTables.Add(Connection:="TEXT;" & CSVFile(i), _ Destination:=xlSheet.Range("A1")) .TextFilePlatform = 932 'Excel 2000 の場合は、xlWindows で .TextFileCommaDelimiter = True '全ての列をテキスト型に設定(無難なので) .TextFileColumnDataTypes = AllTextFormat .Refresh End With Next i '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
TextFilePlatform プロパティ の定数は、xlMacintosh xlMSDOS xlWindows の3つしか 書いていないなのですが、Excel 2002 では、どれを使っても文字化けしてしまいます。 色々調べた結果、932 にすると文字化けせず読み込まれました。Excel 2000 では、逆に xlWindows でないとだめとか? 必ず、ご自分の使用環境で確認して下さい。
|
指定列のデータから重複しないデータを抽出(VB6.0 基本編) (No.13の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/13 14:46
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:オートフィルター,抽出,重複しないリスト,, * ***********************************************************************************
元質問: オートフィルタのドロップダウンリスト取得 - marl55 2003/12/03-09:57 No.6863
オートフィルタで抽出した値をゲットしたいわけではないのです。オートフィルタのドロップダウンリストに出てくる項目を取得したいのです。だから、その列のセル内容を全てゲットして重複を消すのと同じことなのですが、
----------------------------------------------------------------------------------- 指定列のデータから重複しないデータを抽出 - 花ちゃん 2007/08/13 -----------------------------------------------------------------------------------
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(指定列のデータから重複しないデータを抽出) '仮データの書込み Dim Dat(1 To 10, 0) As Variant Dat(1, 0) = "品 名": Dat(2, 0) = "みかん": Dat(3, 0) = "トマト" Dat(4, 0) = "いちご": Dat(5, 0) = "みかん": Dat(6, 0) = "トマト" Dat(7, 0) = "いちご": Dat(8, 0) = "みかん": Dat(9, 0) = "トマト" Dat(10, 0) = "いちご" Dim xlRange As Excel.Range Set xlRange = xlSheet.Range("B2:B11") xlRange.Value = Dat '下記は、表示確認の為に1秒間待ってリストを抽出しているだけです。 xlApp.Wait Now + TimeValue("0:00:1") '------------------------------------------------------------------ 'B列のデータリストから重複したものを除いたリストだけを表示 xlSheet.Range("B2:B11").AdvancedFilter _ xlFilterInPlace, xlSheet.Range("B2"), , True Dim Count As Long, i As Long '抽出したデータ件数を取得 Count = CStr(xlSheet.Range("B2").End(xlDown).Row) For i = 3 To Count If xlSheet.Cells(i, 2).RowHeight > 0 Then '抽出したデータを取得 Debug.Print xlSheet.Cells(i, 2).Value End If Next i
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
マクロをVBのコードに変換する場合の注意事項(VB6.0 基本編) (No.14の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/17 08:39
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:マクロ,コード,プロセス,タスク,終了しない,解放されない * *********************************************************************************** ----------------------------------------------------------------------------------- マクロをVBのコードに変換する場合の注意事項 - 花ちゃん 2007/08/16 ----------------------------------------------------------------------------------- http://hanatyan.sakura.ne.jp/vbhlp/caution.htm http://hanatyan.sakura.ne.jp/vbhlp/ExcelErr.htm ここの[Excel & Word 関係]のところにも書いているのですが、何時まで経っても同様の質問 がありますので、敢えて、こちらの方にも書いておきます。
----------------- 魔界の仮面弁士 さんの投稿より抜粋 ------------------------------ http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=781#782
Excel VBAの場合は、「自分自身」が持っているシートである事が明確なので、 上位のオブジェクト(ApplicationやWorkbookなど)の記述を省略できますが、 外部から制御する時は、省略できないのです。(Excelの起動数が1個であっても同様です)
上位オブジェクトの記述を省略しても、(参照設定を行っていれば)エラーにはなりませんが、 省略してしまうと、暗黙のうちに、Excelへの参照が内部で生成されてしまうため、 そのオブジェクトを、プログラムから解放できず、終了しない要因となります。 -----------------------------------------------------------------------------------
行の挿入・列の挿入等をマクロで記録してみますと下記のようになります。
Selection.EntireColumn.Insert '列の挿入 Selection.EntireRow.Insert '行の挿入
ここで、VBAのヘルプで Selection プロパティ を調べてみますと、対象が Application オブジェクト と Windows オブジェクト になっているのが解るかと思います。 従って、上記のコードをそのまま使用すれば、当然、上位オブジェクトを省略した記述になり オブジェクトを解放することが出来ず、プロセスが終了(タスク上に残る)しない事になります。
では、下記ではどうでしょう。 ----------------------------------------------------------- 列の挿入 - いし 2004/12/24-11:30 No.1354 http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=1354&page=1410
列を挿入させたいのですが、次のコードで実行したところエラーが発生します。 「オブジェクトは、このプロパティまたはメソッドをサポートしていません」
Set objExcelApp = CreateObject("Excel.Application") objExcelApp.DisplayAlerts = False objExcelApp.Visible = False objExcelApp.Workbooks.Open FileName:=FileName, updatelinks:=False Set objExcelWkb = objExcelApp.Workbooks(Right(FileName, Len(FileName) - InStrRev(FileName, "\")))
(略) objExcelWkb.Worksheets(1).Columns("C:C").Select objExcelWkb.Worksheets(1).Selection.Insert Shift:=-4161 ←ここでエラー
見ての通りの実行時バインディングですが関係あるでしょうか? Excelでマクロ記録して流用しました。-4161のところは”xlToRight”になっていましたが そのままでは使えないようなので定数を入れました。 ----------------------------------------------------------- 回答例、
objExcelWkb.Worksheets(1).Range("c1").Activate objExcelWkb.Worksheets(1).Selection.Insert Shift:=xlToRight
c1とかc列の適当な所をActivateにすると大丈夫だと思います
----------------------------------------------------------- 一見すると、どちらも問題がないように見えますが、先のヘルプにも書いてある通り、 又、エラーメッセージの内容のように、「オブジェクトは、このプロパティまたは メソッドをサポートしていません」、即ち objExcelWkb.Worksheets(1) オブジェクトに Selection プロパティがありませんと言う事になります。
特に、今回のように参照設定せずに、実行時バインディングで使用された為に、自動メンバー 表示等の機能が使えなかった事にも一因はあるかと思いますが、対象オブジェクトを省略したり 間違えないように十分注意して下さい。 従って、正しくは、objExcelApp.Selection.Insert Shift:=-4161 のように書けば残る事は ありません。
そもそも、今回の場合、Selection プロパティ を使うのが目的ではなく、EntireRow プロパティ を使う事が目的なので、EntireRow プロパティ の対象オブジェクトを調べると Range コレクションになっているので、下記のように変換してやれば、Selection プロパティを 使用せずとも目的が達成できます。
変換前 Selection.EntireColumn.Insert '列の挿入
変換後 xlSheet.Range("E:E").EntireColumn.Insert
変換前 Selection.EntireRow.Insert '行の挿入
変換後 xlSheet.Range("5:5").Insert 又は、xlSheet.Range("B5").EntireRow.Insert
----------------------------------------------------------------------------------- マクロでは、オブジェクトを省略して書かれているもの(よく変換間違いをされているもの)を 下記に上げておきます。 ----------------------------------------------- 誤 Application.CentimetersToPoints Application では、どれを指しているのか特定できないので、NG!
正 xlApp.CentimetersToPoints のように明示して下さい。 ----------------------------------------------- 誤 ActiveSheet
正 xlBook.ActiveSheet 又は xlSheet のようにシート名を指定するようにして下さい ----------------------------------------------- 誤 ActiveCell
正 xlSheet.Activate や xlApp.ActiveCell のように明示して下さい。 ----------------------------------------------- 誤 Key1:=Range("C2")
正 Key1:=xlSheet.Range("C2") どのシートかを明示する事 ----------------------------------------------- 誤 xlSheet.Range(Cells(1, ・・・略
正 xlSheet.Range(xlSheet.Cells(1, ・・・略 ----------------------------------------------- 誤 Selection.ClearContents
正 xlSheet.Activate xlApp.Selection.ClearContents ----------------------------------------------- 以下投稿されたコードより抜粋(正解は上記参照)
誤 .Range(Selection, Selection.End(xlDown)).Select 誤 .Range(Selection, Selection.End(xlToRight)).Select 誤 Selection.Paste 'ここでエラーになります 誤 xlsSheet.Shapes("txtNendo").Select: Selection.Characters.Text = "年度です"
省略されて書かれているのは上記以外にもありますので、マクロを流用する場合は十分注意して そのまま、マクロをペーストするのではなく、VB上でインテリセンス機能等を活用しながら手入力 するようにして下さい。
------------------------------------------------------------------------- マクロとは関係ないのですが、下記のような投稿もありました。
'★エクセルオブジェクトの解放 excelApp.Quit 'Excelアプリケーションの終了 Set excelApp = Nothing 'アプリケーションオブジェクト解放 Set excelBook = Nothing 'ワークブックオブジェクト解放 Set excelSheet = Nothing 'シートオブジェクト解放
解放の順番が逆になっている場合が結構あります。
但し、VB6.0 の場合 上記で解放されないという事はありません。 実は、正しくExcel を扱っていれば、終了時の処理は、Excel を閉じるだけで、Excel のプロセス が残る事なくキチンと終了する事ができます。
====================================== 従って下記の終了処理は、 ====================================== '-------------------------------------------------------------- '保存時の問合せを非表示に設定 xlApp.DisplayAlerts = False 'Worksheet を名前をつけて保存します 'xlSheet.SaveAs xlFilePath 'オブジェクトを解放します Set xlSheet = Nothing xlBook.Close 'Book を閉じる Set xlBook = Nothing xlApp.Quit 'Quit メソッドを使って Excel を終了します。 Set xlApp = Nothing End Sub
======================================================== 下記のように書いてもExcel がキチンと解放されます。 (Set xlApp = Nothing のような関連付けを解除しなくても) ======================================================== '-------------------------------------------------------------- '保存時の問合せを非表示に設定 xlApp.DisplayAlerts = False 'Worksheet を名前をつけて保存します 'xlSheet.SaveAs xlFilePath xlApp.Quit 'Quit メソッドを使って Excel を終了します。 End Sub
但し、上記はあくまでもテスト例であってお薦めすることはできませんので当初のコードのような 終了処理を実施して下さい。
|
Excelの異なるバージョン間で同じプログラムを使用する(VB6.0 基本編) (No.15の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/16 22:22
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:参照設定,バージョン,, * ***********************************************************************************
元質問:複数のCSVデータ⇒XLSブック - Blue 2003/05/30-17:12 No.4200 CSVデータを1枚のXLSシートのように扱ってブックにすることはできないでしょうか?
----------------------------------------------------------------------------------- Excelの異なるバージョン間で同じプログラムを使用するには - 花ちゃん 2007/08/16 ----------------------------------------------------------------------------------- Excel の起動部分を下記から実行時バインディングの方法で起動すると参照設定の必要が なくなり、異なるバージョン間で使用する事ができます。 (ここのサイトの下記でも掲載しております。) http://hanatyan.sakura.ne.jp/vbhlp/Excel01.htm
'================================================================== 'Excel の起動処理(新規ファイルを使用する場合) 'オブジェクトへの参照を格納する変数を宣言(事前バインディング) Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet
'変数にオブジェクトの参照を代入します。 '新規 workbookとworksheet オブジェクトを作成します。 Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) '1 の代わりにシート名でも可 'エクセルを表示します。(非表示でも動作します) xlApp.Visible = True
'==================================================================
変更後(実行時バインディング(レイトバインディング)) '================================================================== 'Excel の起動処理(新規ファイルを使用する場合) 'オブジェクトへの参照を格納する変数を宣言(実行時バインディング) Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object
'変数にオブジェクトの参照を代入します。 '新規 workbookとworksheet オブジェクトを作成します。 Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) '1 の代わりにシート名でも可 'エクセルを表示します。(非表示でも動作します) xlApp.Visible = True
'==================================================================
但し、上記の方法でExcel を操作するにはいくつかの注意が必要です。
1.使用するExcelの定数等は、別途ご自分で宣言するか、定数値のようなものを使用しないと VBAの定数は使用できません。 http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=2295&page=1230
2.Excelのバージョン間で互換性のないメソッドやプロパティ等は使用できません。 例えば、Open メソッド や SaveAs メソッドのようなものでも、バージョン間で引数の型 が違ってきていますので、十分確認する事が必要です。
3.自動メンバ表示などのインテリセンス機能が使用できないのでコードの入力間違いの チェックが十分できないので注意が必要です。
4.従って、使用するであろう、バージョンのExcelで十分に動作確認する事が必要になります。
又、Excel のプロセスが残る等の問題が多く発生する可能性があり、解決も難しくなります。
少なくても、VBからExcelを操作する事に熟知されてから使用するようにして下さい、でないと 後で、エラーが発生したり、Excelのプロセスが解放されない等の問題が発生し、結局時間を とられて、各バージョンに合ったプログラムを別々にインストールした方が楽だったという事 になります。
上記の問題点をクリアできれば、ある程度は、Excel の各バージョン間で使用できますが、 Excel95以前やExcel2007以降のように範囲が広がると複雑な処理をした場合は、大抵問題が 発生するかと思いますので、くどいようですが、事前に対象のバージョンで十分テストをして 使用されるようにお願いします。
|
ファイル形式を変更(*.CSV/*.HTML 等)して保存(VB6.0 基本編) (No.16の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/22 10:47
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:HTM形式で保存,CSV形式で保存,CSVファイル, * ***********************************************************************************
元質問:エクセルのファイル形式の変更について - あき 2005/06/28-13:41 No.3661
VBから任意のCSVファイルをExcelで読み込み、ファイルの種類を変更してエクセルのファイル形式にして保存したいのですが、どうしてもできません。
----------------------------------------------------------------------------------- ファイル形式を変更(*.CSV/*.HTML 等)して保存 - 花ちゃん 2007/08/17 -----------------------------------------------------------------------------------
SaveAs メソッドの引数の FileFormat にファイルを保存するときのファイル形式を指定します。 指定できる形式については、FileFormat プロパティを参照してください。 既存のファイルでは、指定された最後のファイル形式が既定のファイル形式です。 新しいファイルでは、現在使用されている Excel のバージョンでのファイル形式になります。
使用できる 定数(FileFormat)については、VBAのヘルプで調べて下さい。
使用例(Excelの終了処理のところで)
'保存時の問合せを非表示に設定 xlApp.DisplayAlerts = False 'Worksheet を名前をつけて保存します 'xlSheet.SaveAs xlFilePath '------------------------------------------------------------ 'CSV 形式で保存する場合 xlSheet.SaveAs "c:\test.csv", xlCSV
'HTML 形式で保存する場合 xlSheet.SaveAs FileName:="c:\test.htm", FileFormat:=xlHtml '------------------------------------------------------------
上記のように保存したいファイルフォーマットを指定すればいいです。 (上記どちらの方法でも OK です。) -------------------------------------------------------------------------------------
------------------------------------------------------------------------------------- 尚、同じ *.xls 形式での保存であっても異なるバージョンで保存したい場合や異なるバージョン で作成されたファイルを保存するような場合も、保存形式を明示的に指定するようにして下さい。
|
図形(オートシェイプ等)の描画及び削除(VB6.0 基本編) (No.17の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/18 14:38
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:図形の描画,オートシェイプ,吹き出し,矢印 * ***********************************************************************************
元質問:VBからEXCELの図形削除 - ひらりん 2005/09/12-13:09 No.4380 VBからEXCEL上の図形(Shape)を削除させたいのですが、下記のように書いてはみたのですが図形を選択はしているのですが消えてはいません
'すべての図形を選択する xlSheet.Shapes.SelectAll '現在選択されているオブジェクトを削除する xlSheet.Selection.Delete
--------------------------------------------------- xlSheet.Selection の Selection プロパティ の使い方が間違っていてxlSheet オブジェクト には、Selection プロパティが無い為に削除が出来なかったようです。 >>14 (マクロをVBのコードに変換する場合の注意事項)参照
----------------------------------------------------------------------------------- 図形(オートシェイプ等)の描画及び削除 - 花ちゃん 2007/08/18 ----------------------------------------------------------------------------------- '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(図形の描画及び削除) '雲形吹き出しを描画 xlSheet.Shapes.AddShape msoShapeCloudCallout, 100, 30, 100, 40 'ブロック矢印を描画 xlSheet.Shapes.AddShape msoShapeRightArrow, 100, 100, 50, 50 '終端が三角形の矢印を描画 With xlSheet.Shapes.AddLine(100, 200, 250, 200).Line .EndArrowheadLength = msoArrowheadLong .EndArrowheadStyle = msoArrowheadTriangle .EndArrowheadWidth = msoArrowheadWide .Weight = 5# End With
Dim shp As Excel.shape For Each shp In xlSheet.Shapes Debug.Print shp.Name Next
'3秒間表示しておく xlApp.Wait Now + TimeValue("0:00:3") '図形を個別に削除する場合 xlSheet.Shapes(1).Delete xlApp.Wait Now + TimeValue("0:00:1") '全ての図形を選択 xlSheet.Shapes.SelectAll '選択されているものを削除する xlApp.Selection.Delete '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
Excel 上でコピー&ペースト(貼り付け)を実行する(VB6.0 基本編) (No.18の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/18 11:37
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:図形の描画,オートシェイプ,吹き出し,矢印 * ***********************************************************************************
元質問:EXCELでのコピー・貼り付けについて - DAI 2005/10/19-11:56 No.4680 セルのコピーを行ってそれを別のセルに貼り付けようとしていますが、うまくいきません。 最後のペーストの部分でエラーが発生します。
.Worksheets("Sheet1").Range("A1").Copy .Worksheets("Sheet1").Range("E5").Paste
----------------------------------------------------------------------------------- Excel 上でコピー&ペースト(貼り付け)を実行する - 花ちゃん 2007/08/18 ----------------------------------------------------------------------------------- > 最後のペーストの部分でエラーが発生します。
だったら、Excel の VBA のヘルプで Paste メソッド の 対象 のところを調べて見て下さい。
こう行った事が起きないように、事前バインディング で接続するようにして下さい。
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(Excel上でのコピー&ペースト)
'Excel 上でやりたい事をマクロで記録して見て下さい。 'マクロの記録結果 ' Range("B2:D6").Select 'セル範囲の "B2:D6" を選択 ' Selection.Copy 'コピーを実施 ' Range("B14").Select '貼付先 "B14" を選択 ' ActiveSheet.Paste '貼付を実施
'上記をVBのコードに直すと下記のようになります。 xlSheet.Range("B2:D6").Copy xlSheet.Paste Destination:=xlSheet.Range("B14")
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
すでに起動中のExcelファイルをVBから編集する(VB6.0 基本編) (No.19の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/18 19:17
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:起動中のExcel,表示しているExcel,フルパス * ***********************************************************************************
元質問:表示中のエクセルの編集 - ひろ 2005/10/20-10:39 No.4690
VBからでは、普通にマウスでダブルクリックなどで表示したエクセルの編集を行う事は可能でしょうか?
----------------------------------------------------------------------------------- Re^2: 表示中のエクセルの編集 - GOD 2005/10/20-15:35 No.4703 ----------------------------------------------------------------------------------- > 試しては、いませんが、Excel で開いて使っているファイルを VB から編集する事は > できなかったはずです。(読み取り専用でしか開けない) と、当時は答えていたのですが。(上記は、私(花ちゃん)の怪答)
GetObjectでできないかな。 set xxx = GetObject(Path) ただ、GetObjectする前にファイルが開かれているかどうかのチェックが出来るか微妙だけど。 ---------------------------------------------------------------- と、GOD さんが回答されていたのだが、元質問者からの返事もなく、私も試しておらず そのままになっていたのですが、当時このサイトで GetObject を使ってExcelを起動していた サンプルが残っていたので改めて試して見ましたので、ここに掲載しておきます。
----------------------------------------------------------------------------------- すでに起動中のExcelファイル(ダブルクリック等で)をVBから編集する - 花ちゃん 2007/08/18 -----------------------------------------------------------------------------------
Option Explicit
Private Sub Command1_Click() '★こちらは、GetObject 関数を使って起動(実行時バインディング) '従って参照設定は必要ありません。
Dim xlApp As Object Dim xlFilePath As String Dim xlSheetName As String 'エクセルのファイル名 xlFilePath = "C:\test1.xls" 'ブックのシート名 xlSheetName = "Sheet1" 'エクセルへ参照 第二引数を省略すると起動中のファイルを使用する Set xlApp = GetObject(xlFilePath) xlApp.Application.Visible = True xlApp.Windows(1).Visible = True
'書込み方法色々 xlApp.ActiveSheet.Cells(4, 1).Value = "セル(4,1)に書込"
With xlApp.Worksheets(xlSheetName) .Range("A1") = "セル(A1)にテスト書込み" .Cells(2, 2).Value = "セル(2,2)にテスト書込みです" With .Cells(2, 2) .Font.Size = 18 'フォントサイズ .Font.Name = "MS P明朝" 'フォントの種類 .Font.Bold = True '太字に設定 End With 'A列の幅を8に設定 .Cells(1, 1).ColumnWidth = 8 '1行目の高さを26に設定 .Rows(1).RowHeight = 26
End With
'シートをExcelから印刷 xlApp.Worksheets(xlSheetName).PrintOut '3秒間表示しておく xlApp.Application.Wait Now + TimeValue("0:00:3") '保存時の問合せを非表示に設定 xlApp.Application.DisplayAlerts = False 'Worksheet を名前をつけて保存します xlApp.SaveAs xlFilePath 'エクセルの終了 xlApp.Application.Quit 'オブジェクトを解放 Set xlApp = Nothing End Sub
------------------------------------------------------------------------------ Set xlApp = GetObject(xlFilePath) 上記のように、第二引数を省略すると起動中のファイルを使用し、起動していなければ 新たに起動します。
但し、その為に予め、起動中のファイルのパスが解っている必要があります。
起動しているかどうかは、ここの逆引きヘルプの指定のファイルが使用中かどうかを調べるで 調べる事ができます。
起動中のExcelファイルが1個だけなら、 Set xlApp = GetObject(, "Excel.Application") のようにすれば取得する事ができます。
又、ファイルをマウスのダブルクリック等で複数表示している場合は、下記のようにすれば 起動しているExcelファイルのフルパスを取得できます。
Private Sub Command2_Click() Dim xlApp As Object Set xlApp = GetObject(, "Excel.Application") Dim myBook As Object For Each myBook In xlApp.Workbooks '起動中のExcelファイルのフルパスを取得 Debug.Print myBook.FullName Next 'xlApp.Application.Quit '起動中の全てのExcelを終了します。 Set xlApp = Nothing 'オブジェクトを解放 End Sub
但し、上記もファイルの起動状態で取得できない場合がありますので注意して下さい。
|
メニューバーとツールバーを非表示(使用不可)にする(VB6.0 基本編) (No.20の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/18 21:06
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:メニューバー,ツールバー,使用不可,非表示 * ***********************************************************************************
元質問:Excelのメニューとツールバーについて - とびた 2006/02/26-19:13 No.5923
VBより、Excelのメニューとツールバーを無効にしたいと考えております。 Excel-VBAでは、以下のコードでメニューとツールバーを無効に出来ましたが、VBからでは、宣言の方法?が悪い様で、エラーになってしまいます。
----------------------------------------------------------------------------------- Re: Excelのメニューとツールバーについて - 花ちゃん 2006/02/26-20:51 No.5924 -----------------------------------------------------------------------------------
※ 終了時には必ず元に戻しておいて下さい。
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 'Excel 操作部分(Excelのメニューとツールバーを無効にする) ' Dim objMenu As Object ' For Each objMenu In xlApp.CommandBars("Worksheet Menu Bar").Controls ' objMenu.Enabled = False ' Next objMenu ' ' Dim objTool As Object ' For Each objTool In xlApp.CommandBars("Standard").Controls ' objTool.Enabled = False ' Next objTool
'ツールバーとメニューバーを非表示にする Dim objTool As Object For Each objTool In xlApp.CommandBars objTool.Enabled = False Next objTool '3秒間表示して元に戻す xlApp.Wait Now + TimeValue("0:00:3") 'Dim objTool As Object For Each objTool In xlApp.CommandBars objTool.Enabled = True Next objTool
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
|
自動リンクエラーのメッセージを表示させない方法(VB6.0 基本編) (No.21の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/19 12:11
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:ダイアログ,自動リンク,エラーメッセージ, * ***********************************************************************************
元質問:エクセルの自動リンクエラーを表示させない方法 - TOMO 2006/06/15-20:13 No.6672
VBでエクセルを開いた時に、「開いているブックには、他のファイルへの自動リンクが設定されています。このブックを更新し他のブックの変更を反映しますか?」 のメッセージを出さないように、VBで制御出来ないのでしょうか
----------------------------------------------------------------------------------- Re: エクセルの自動リンクエラーを表示させない方法 - 花ちゃん 2006/06/15-22:36 No.6675 -----------------------------------------------------------------------------------
Open メソッド の引数のUpdateLinks を調べて見て下さい。
>1では、現象変わらず。 今、試して見ましたが、有効になっていますよ。 ファイルをOpen する前に xlApp.DisplayAlerts = False を設定していますか? UpdateLinks = 0 〜 3 の設定と組合せればいいのでは。
xlApp.DisplayAlerts = False
'上記だけでもメッセージがでないようになりますが、記入位置に注意が必要です。 'ファイルをオープンする時にメッセージでるのだから、ファイルをオープンする前に '設定する必要があります。 このように書くとExcelを起動する前に設定する人がいますが 'DisplayAlerts プロパティ は、Excel Application のプロパティなので、xlApp が使用 '出来る状態でないと使用できません。
Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlFilePath As String xlFilePath = "c:\Book1.xls" Set xlApp = CreateObject("Excel.Application") '問合せを非表示に設定 xlApp.DisplayAlerts = False 'UpdateLinks:=0 等の設定値は、ご自分の指定の設定値にして下さい。 Set xlBook = xlApp.Workbooks.Open(xlFilePath, UpdateLinks:=0) Set xlSheet = xlBook.Worksheets(1) xlApp.Visible = True
|
Excel画面廻りの表示設定色々(VB6.0 基本編) (No.22の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/20 09:49
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:メニュー,スクロールバー,関数ボックス, * ***********************************************************************************
元質問:ワークシートだけ表示させる - ダンボ 2006/09/12-15:28 No.7233
----------------------------------------------------------------------------------- Excel2000のVBAです。 定められた操作しかできないようにワークシートだけを表示させたいのです。 With Application .DisplayFullScreen = True .DisplayAlerts = False .DisplayFormulaBar = False .ScreenUpdating = False End With With ActiveWindow .DisplayHorizontalScrollBar = False '水平スクロールバーを消す .DisplayVerticalScrollBar = False '垂直スクロールバーを消す .DisplayWorkbookTabs = False 'シート見出しを消す .DisplayGridlines = False '枠線を消す .DisplayHeadings = False '行列番号を消す End With これで大分望みに近いのですが、 (1)システムメニュー(FileからHelpまでの奴)が消せない。 (2)DisplayFullScreen=True で「全画面表示を閉じます」ダイアログボックスが出てしまう。 の2点が不満です。対策はありますか?
----------------------------------------------------------------------------------- > (1)システムメニュー(FileからHelpまでの奴)が消せない。 Application.CommandBars("Worksheet Menu Bar").Enabled = False Application.CommandBars("Standard").Visible = False で、システムメニュー消えました。標準ツールバー消えました。 あうぅ編集ツールバーが残っています。
----------------------------------------------------------------------------------- ※ 後は、上記の一連のスレッドをご覧下さい。 http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=7233&page=300#7233
又、ユーザーからの操作されたくないという事なら下記のような方法もあります。 ----------------------------------------------------------------------------------- Re^3: VB-EXCEL 処理速度 - 魔界の仮面弁士 2003/08/04-20:04 No.5223 ----------------------------------------------------------------------------------- ユーザーから操作されたくない、という事であれば、Excel.Applicationオブジェクトの Interactive プロパティを使って、ユーザーからの操作を禁止するという手もあります。
----------------------------------------------------------------------------------- Interactive プロパティ (VBAのヘルプより抜粋 ---- by 花ちゃん ---- )
True の場合、Excel が対話モードになります。既定値は True です。このプロパティに False が設定されると、キーボードやマウスからの入力を受け付けなくなります。ただし、表示されたダイアログ ボックスへの入力は可能です。入力できない状態にしておくと、マクロで Excel のオブジェクトを移動したりアクティブにしているときに、ユーザーからの干渉を防ぐことができます。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
xlApp.Interactive = False
-----------------------------------------------------------------------------------
|
選択したセルが定義した指定の範囲にあるかどうか(VB6.0 基本編) (No.23の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 10:55
- 名前: 花ちゃん
- * カテゴリー:[サポート技術情報]
文書番号 : 259137 最終更新日 : 2008年1月23日
Visual Basic のマクロを使用して Excel ワークシートの選択したセルが定義した 指定の範囲にあるかどうかを確認する方法
下記のMicrosoft サポート技術情報 に掲載されています。 リンクが切れている場合は、上記文書名で検索して見て下さい。
http://support.microsoft.com/kb/259137/ja
|
選択範囲内の文字の出現回数を数える方法(VB6.0 基本編) (No.24の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 10:54
- 名前: 花ちゃん
- * カテゴリー:[サポート技術情報]
文書番号 : 89794 最終更新日 : 2008年2月6日
Excel で Visual Basic for Applications を使用して選択範囲内の文字の出現回数を 数える方法
下記のMicrosoft サポート技術情報 に掲載されています。 リンクが切れている場合は、上記文書名で検索して見て下さい。
http://support.microsoft.com/kb/89794/ja
|
AutoFill メソッドを使ってセルに連続してデータを入力する(VB6.0 基本編) (No.25の個別表示) [スレッド一覧へ] |
- 日時: 2013/05/22 15:08
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,オート フィル,セルに連続してデータを入力する,セル操作, * ***********************************************************************************
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=319&no=32 上記リンクの VB2010 から Excel のセルに関する操作、1行 Tips 集その1(VB.NET) ( No.32 ) の 15.AutoFill メソッドを使ってセルに連続してデータを入力する をVB6.0 用に書き換えた分です
http://www.hanatyan.sakura.ne.jp/vb6/excel02.htm VBからExcelを起動・終了する(基本操作部分) のコードを使ってExcelを起動・終了して下さい。
上記のコードに下記コードを追加してして試して見て下さい。
Private Sub Command3_Click() Dim xlRange As Excel.Range Dim xlRange1 As Excel.Range Set xlRange = xlSheet.Range("A1") xlRange.Value = "1月" Set xlRange1 = xlSheet.Range("A1:L1") 'セル A1 ~ L1 まで、1月 〜 12月 と入力します。 xlRange.AutoFill Destination:=xlRange1, Type:=xlFillMonths End Sub
※ 今後のサンプルは、上記同様にして試して下さい。
|
Findメソッドを使っての選択範囲内の文字の出現回数を数える(VB6.0 基本編) (No.26の個別表示) [スレッド一覧へ] |
- 日時: 2013/05/23 09:41
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,出現回数,検索,書き換え,Find メソッド,入力済みセル範囲 * *********************************************************************************** サポート技術情報に掲載されていたサンプルを紹介していたのですが、テストしてみると うまく動作しないし、Cell や Selection を使っているので、VB から使用するには間違った 使用をされかねないので、Excel の機能の Find メソッドを使って作ってみました。 ついでに書き換えもできるようにしております。
http://www.hanatyan.sakura.ne.jp/vb6/excel02.htm VBからExcelを起動・終了する(基本操作部分) のコードを使ってExcelを起動・終了して下さい。
上記のコードに下記コードを追加してして試して見て下さい。
Private Sub Command3_Click() Dim c As Excel.Range Dim firstAddress As String Dim nextAddress As String Dim n As Long '検索範囲をxlSheet の入力済みセル範囲とする With xlSheet.Range(xlSheet.UsedRange.Address) 'lookin:=xlValues 検索対象を[値]に設定 Set c = .Find(Text1.Text, lookin:=xlValues) If Not c Is Nothing Then '見つかった場合、セルのアドレスを取得 firstAddress = c.Address Do '見つかった件数をカウントする n = n + 1: c.Value = "見っけ " & c.Address '見つかったセルの値を書き換える場合 '見つかったセルの次のセルから再検索 Set c = .FindNext(c) If Not c Is Nothing Then nextAddress = c.Address Else nextAddress = "" End If Loop While Not c Is Nothing And nextAddress <> firstAddress End If End With Label1.Caption = n & " 個見つかりました。" End Sub
コードを変更された場合は、タスクマネージャにExcelのプロセスが残っていない事を確認して下さい。
※ 今後のサンプルは、上記同様にして試して下さい。
上記実行結果の図 http://www.hanatyan.sakura.ne.jp/bbs_gif/excelfind.gif
|
|